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 } }