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 事件集
|
|
/// <summary>
|
/// 水力点击事件
|
/// 包含左键和右键
|
/// </summary>
|
public event Action<string> HydroClickEvent;
|
/// <summary>
|
/// 水力点击事件
|
/// 仅左键
|
/// </summary>
|
public event Action<string> HydroMouseLeftClickEvent;
|
|
/// <summary>
|
/// 选择可见事件
|
/// </summary>
|
public event Action<string> SelectVisualEvent;
|
|
/// <summary>
|
/// 加载完成事件
|
/// </summary>
|
public event Action LoadCompletedEvent;
|
|
#endregion
|
|
private XhsProjectVmo _project = null;//项目
|
private XhsProjectSiteVmo _projectSite = null; //项目站
|
private Yw.Model.HydroModelInfo _hydroInfo = null;//水力信息
|
private List<HydroVisualViewModel> _allVisualViewModelList = null;//
|
|
/// <summary>
|
/// 初始化数据
|
/// 仅支持调用一次
|
/// </summary>
|
public async Task InitialData
|
(
|
XhsProjectVmo project,
|
XhsProjectSiteVmo projectSite,
|
Yw.Model.HydroModelInfo hydroInfo,
|
List<HydroVisualViewModel> allVisualViewModelList
|
)
|
{
|
if (project == null)
|
{
|
return;
|
}
|
_project = project;
|
_projectSite = projectSite;
|
_hydroInfo = hydroInfo;
|
_allVisualViewModelList = allVisualViewModelList;
|
await ShowBimfaceCtrl();
|
}
|
|
|
#region 显示与隐藏
|
|
/// <summary>
|
/// 显示构件
|
/// </summary>
|
public async Task ShowComponents(List<string> elementIds)
|
{
|
await _bimfaceCtrl?.ShowComponents(elementIds);
|
}
|
|
/// <summary>
|
/// 隐藏构件
|
/// </summary>
|
public async Task HideComponents(List<string> elementIds)
|
{
|
await _bimfaceCtrl?.HideComponents(elementIds);
|
}
|
|
/// <summary>
|
/// 显示所有构件
|
/// </summary>
|
public async Task ShowAllComponents()
|
{
|
await _bimfaceCtrl?.ShowAllComponents();
|
}
|
|
#endregion
|
|
#region 半透明
|
|
/// <summary>
|
/// 半透明
|
/// </summary>
|
public async Task TranslucentComponents(List<string> codes)
|
{
|
await _bimfaceCtrl?.TranslucentComponents(codes);
|
}
|
|
/// <summary>
|
/// 取消半透明
|
/// </summary>
|
public async Task OpaqueComponents(List<string> codes)
|
{
|
await _bimfaceCtrl?.OpaqueComponents(codes);
|
}
|
|
#endregion
|
|
#region 构件的选中与取消
|
|
/// <summary>
|
/// 设置选择的构件
|
/// </summary>
|
/// <returns></returns>
|
public async Task SetSelectedComponents(List<string> elements)
|
{
|
await _bimfaceCtrl?.SetSelectedComponents(elements);
|
}
|
|
/// <summary>
|
/// 增加选择的构件
|
/// </summary>
|
/// <param name="elements"></param>
|
/// <returns></returns>
|
public async Task AddSelectedComponents(List<string> elements)
|
{
|
await _bimfaceCtrl?.AddSelectedComponents(elements);
|
}
|
|
/// <summary>
|
/// 移除选择的构件
|
/// </summary>
|
/// <param name="elements"></param>
|
/// <returns></returns>
|
public async Task RemoveSelectedComponents(List<string> elements)
|
{
|
await _bimfaceCtrl?.RemoveSelectedComponents(elements);
|
}
|
|
/// <summary>
|
/// 清除选择的构件
|
/// </summary>
|
/// <param name="elements"></param>
|
/// <returns></returns>
|
public async Task ClearSelectedComponents()
|
{
|
await _bimfaceCtrl?.ClearSelectedComponents();
|
}
|
|
#endregion
|
|
#region 缩放与选择
|
|
/// <summary>
|
/// 缩放至构件
|
/// </summary>
|
public async Task ZoomToComponent(string code)
|
{
|
await _bimfaceCtrl?.ZoomToComponent(code);
|
}
|
|
/// <summary>
|
/// 缩放至选择构件
|
/// </summary>
|
public async Task ZoomToSelectedComponents()
|
{
|
await _bimfaceCtrl?.ZoomToSelectedComponents();
|
}
|
|
/// <summary>
|
/// 缩放至选择构件
|
/// </summary>
|
public async Task ZoomAndSelectComponent(string code)
|
{
|
if (string.IsNullOrEmpty(code))
|
{
|
return;
|
}
|
await _bimfaceCtrl?.ZoomAndSelectComponents(new List<string>() { code });
|
}
|
|
/// <summary>
|
/// 缩放至选择构件
|
/// </summary>
|
public async Task ZoomAndSelectComponents(List<string> codes)
|
{
|
await _bimfaceCtrl?.ZoomAndSelectComponents(codes);
|
}
|
|
#endregion
|
|
#region 构件着色
|
|
/// <summary>
|
/// 设置强调构件
|
/// </summary>
|
public async Task OverrideComponentsColor(List<string> elementIds, string color, double transparency)
|
{
|
await _bimfaceCtrl?.OverrideComponentsColor(elementIds, color, transparency);
|
}
|
|
/// <summary>
|
/// 设置强调构件
|
/// </summary>
|
public async Task OverrideComponentsColor(string elementId, string color, double transparency)
|
{
|
if (string.IsNullOrEmpty(elementId))
|
{
|
return;
|
}
|
await _bimfaceCtrl?.OverrideComponentsColor(new List<string>() { elementId }, color, transparency);
|
}
|
|
/// <summary>
|
/// 恢复构件颜色
|
/// </summary>
|
public async Task RestoreComponentsColor(List<string> elementIds)
|
{
|
await _bimfaceCtrl?.RestoreComponentsColor(elementIds);
|
}
|
|
/// <summary>
|
/// 恢复构件颜色
|
/// </summary>
|
public async Task RestoreComponentsColor(string elementId)
|
{
|
if (string.IsNullOrEmpty(elementId))
|
{
|
return;
|
}
|
await _bimfaceCtrl?.RestoreComponentsColor(new List<string>() { elementId });
|
}
|
|
#endregion
|
|
#region BIM控件
|
|
//bimface控件
|
private SimulationBimfaceCtrl _bimfaceCtrl = null;
|
|
//获取 bimface 控件
|
private async Task<SimulationBimfaceCtrl> 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<string> _allDecoratorCodes = null;
|
|
//获取装饰件code列表
|
private async Task<List<string>> GetDecoratorCodes()
|
{
|
if (_hydroInfo == null)
|
{
|
return default;
|
}
|
if (_allDecoratorCodes == null)
|
{
|
_allDecoratorCodes = await BLLFactory<Yw.BLL.HydroDecoratorInfo>.Instance.GetCodeListByModelID(_hydroInfo.ID, null);
|
}
|
if (_allDecoratorCodes == null)
|
{
|
_allDecoratorCodes = new List<string>();
|
}
|
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
|
|
}
|
}
|