using Yw.WinFrmUI.Bimface;
namespace HStation.WinFrmUI
{
public partial class CreateXhsSchemeBimfaceCtrl : DevExpress.XtraEditors.XtraUserControl
{
public CreateXhsSchemeBimfaceCtrl()
{
InitializeComponent();
this.docPnlBottom.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden;
}
#region 事件集
///
/// 水力点击事件
/// 包含左键和右键
///
public event Action HydroClickEvent;
///
/// 水力点击事件
/// 仅左键
///
public event Action HydroMouseLeftClickEvent;
///
/// 选择可见事件
///
public event Action SelectVisualEvent;
///
/// 加载完成事件
///
public event Action LoadCompletedEvent;
#endregion
private XhsProjectVmo _project = null;//项目
private XhsProjectSiteVmo _projectSite = null; //项目站
private Yw.Model.HydroModelInfo _hydroInfo = null;//水力信息
private List _allVisualViewModelList = null;//
///
/// 初始化数据
/// 仅支持调用一次
///
public async Task InitialData
(
XhsProjectVmo project,
XhsProjectSiteVmo projectSite,
Yw.Model.HydroModelInfo hydroInfo,
List allVisualViewModelList
)
{
if (project == null)
{
return;
}
_project = project;
_projectSite = projectSite;
_hydroInfo = hydroInfo;
_allVisualViewModelList = allVisualViewModelList;
await ShowBimfaceCtrl();
}
#region 显示与隐藏
///
/// 显示构件
///
public async Task ShowComponents(List elementIds)
{
await _bimfaceCtrl?.ShowComponents(elementIds);
}
///
/// 隐藏构件
///
public async Task HideComponents(List elementIds)
{
await _bimfaceCtrl?.HideComponents(elementIds);
}
///
/// 显示所有构件
///
public async Task ShowAllComponents()
{
await _bimfaceCtrl?.ShowAllComponents();
}
#endregion
#region 半透明
///
/// 半透明
///
public async Task TranslucentComponents(List codes)
{
await _bimfaceCtrl?.TranslucentComponents(codes);
}
///
/// 取消半透明
///
public async Task OpaqueComponents(List codes)
{
await _bimfaceCtrl?.OpaqueComponents(codes);
}
#endregion
#region 构件的选中与取消
///
/// 设置选择的构件
///
///
public async Task SetSelectedComponents(List elements)
{
await _bimfaceCtrl?.SetSelectedComponents(elements);
}
///
/// 增加选择的构件
///
///
///
public async Task AddSelectedComponents(List elements)
{
await _bimfaceCtrl?.AddSelectedComponents(elements);
}
///
/// 移除选择的构件
///
///
///
public async Task RemoveSelectedComponents(List elements)
{
await _bimfaceCtrl?.RemoveSelectedComponents(elements);
}
///
/// 清除选择的构件
///
///
///
public async Task ClearSelectedComponents()
{
await _bimfaceCtrl?.ClearSelectedComponents();
}
#endregion
#region 缩放与选择
///
/// 缩放至构件
///
public async Task ZoomToComponent(string code)
{
await _bimfaceCtrl?.ZoomToComponent(code);
}
///
/// 缩放至选择构件
///
public async Task ZoomToSelectedComponents()
{
await _bimfaceCtrl?.ZoomToSelectedComponents();
}
///
/// 缩放至选择构件
///
public async Task ZoomAndSelectComponent(string code)
{
if (string.IsNullOrEmpty(code))
{
return;
}
await _bimfaceCtrl?.ZoomAndSelectComponents(new List() { code });
}
///
/// 缩放至选择构件
///
public async Task ZoomAndSelectComponents(List codes)
{
await _bimfaceCtrl?.ZoomAndSelectComponents(codes);
}
#endregion
#region 构件着色
///
/// 设置强调构件
///
public async Task OverrideComponentsColor(List elementIds, string color, double transparency)
{
await _bimfaceCtrl?.OverrideComponentsColor(elementIds, color, transparency);
}
///
/// 设置强调构件
///
public async Task OverrideComponentsColor(string elementId, string color, double transparency)
{
if (string.IsNullOrEmpty(elementId))
{
return;
}
await _bimfaceCtrl?.OverrideComponentsColor(new List() { elementId }, color, transparency);
}
///
/// 恢复构件颜色
///
public async Task RestoreComponentsColor(List elementIds)
{
await _bimfaceCtrl?.RestoreComponentsColor(elementIds);
}
///
/// 恢复构件颜色
///
public async Task RestoreComponentsColor(string elementId)
{
if (string.IsNullOrEmpty(elementId))
{
return;
}
await _bimfaceCtrl?.RestoreComponentsColor(new List() { elementId });
}
#endregion
#region BIM控件
//bimface控件
private SimulationBimfaceCtrl _bimfaceCtrl = null;
//获取 bimface 控件
private async Task GetBimfaceCtrl()
{
if (_hydroInfo == null)
{
return default;
}
if (_bimfaceCtrl == null)
{
_bimfaceCtrl = new SimulationBimfaceCtrl();
_bimfaceCtrl.Dock = DockStyle.Fill;
await _bimfaceCtrl.InitialData(_project, _projectSite);
_bimfaceCtrl.LoadCompletedEvent += () =>
{//view加载完成事件
this.barCkDecorator.Checked = false;
this.LoadCompletedEvent?.Invoke();
};
_bimfaceCtrl.HydroMouseLeftClickEvent += (code) =>
{//鼠标左键点击事件
this.HydroMouseLeftClickEvent?.Invoke(code);
};
_bimfaceCtrl.HydroClickEvent += (code) =>
{
this.HydroClickEvent?.Invoke(code);
};
}
return _bimfaceCtrl;
}
//显示 bimface 控件
private async Task ShowBimfaceCtrl()
{
var bimfaceCtrl = await GetBimfaceCtrl();
this.xtraUserControl1.Controls.Clear();
this.xtraUserControl1.Controls.Add(bimfaceCtrl);
}
#endregion
#region 一键显隐
private List _allDecoratorCodes = null;
//获取装饰件code列表
private async Task> GetDecoratorCodes()
{
if (_hydroInfo == null)
{
return default;
}
if (_allDecoratorCodes == null)
{
_allDecoratorCodes = await BLLFactory.Instance.GetCodeListByModelID(_hydroInfo.ID, null);
}
if (_allDecoratorCodes == null)
{
_allDecoratorCodes = new List();
}
return _allDecoratorCodes;
}
//设置装饰件可见性
private async void SetDecoratorVisible(bool isDecoratorVisible)
{
var codes = await GetDecoratorCodes();
if (isDecoratorVisible)
{
await _bimfaceCtrl?.ShowComponents(codes);
}
else
{
await _bimfaceCtrl?.HideComponents(codes);
}
}
//设置
private void barCkDecorator_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
SetDecoratorVisible(this.barCkDecorator.Checked);
}
#endregion
#region 构件查询
//查询组件
private HydroVisualSearchListCtrl _searchCtrl = null;
//获取查询组件
private HydroVisualSearchListCtrl GetSearchCtrl()
{
if (_searchCtrl == null)
{
_searchCtrl = new HydroVisualSearchListCtrl();
_searchCtrl.Dock = DockStyle.Fill;
_searchCtrl.InitialData(_allVisualViewModelList);
_searchCtrl.HydroClickInfoEvent += (visual) =>
{
if (visual == null)
{
return;
}
_bimfaceCtrl?.ZoomAndSelectComponent(visual.Code);
this.SelectVisualEvent?.Invoke(visual.Code);
};
_searchCtrl.HydroSearchInfoEvent += (list) =>
{
var visual = list?.FirstOrDefault();
if (visual == null)
{
return;
}
_bimfaceCtrl?.ZoomAndSelectComponent(visual.Code);
this.SelectVisualEvent?.Invoke(visual.Code);
};
}
return _searchCtrl;
}
//查询控件是否可见
private bool IsSearchCtrlVisible
{
get
{
if (this.docPnlBottom.Visibility == DevExpress.XtraBars.Docking.DockVisibility.Visible)
{
if (this.controlContainerBottom.Controls.Count > 0)
{
if (this.controlContainerBottom.Controls[0] is HydroVisualSearchListCtrl)
{
return true;
}
}
}
return false;
}
}
//显示查询控件
private void ShowSearchCtrl(string content)
{
if (IsSearchCtrlVisible)
{
return;
}
var searchCtrl = GetSearchCtrl();
searchCtrl.SetBindingData(content);
this.controlContainerBottom.Controls.Clear();
this.controlContainerBottom.Controls.Add(searchCtrl);
this.docPnlBottom.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible;
this.docPnlBottom.Text = "构件查询";
this.docPnlBottom.Height = 350;
}
//显示查询窗体
private void ShowSearchDlg()
{
if (IsSearchCtrlVisible)
{
return;
}
var dlg = new InputHydroVisualSearchListDlg();
dlg.SearchEvent += (content) =>
{
if (string.IsNullOrEmpty(content))
{
return;
}
ShowSearchCtrl(content);
};
dlg.SetBindingData();
dlg.ShowDialog();
}
//查询
private void barBtnSearch_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
ShowSearchDlg();
}
#endregion
}
}