using Yw.WinFrmUI.Bimface;
|
|
namespace HStation.WinFrmUI
|
{
|
public partial class XhsProjectSimulationBimfaceCtrl : DevExpress.XtraEditors.XtraUserControl
|
{
|
public XhsProjectSimulationBimfaceCtrl()
|
{
|
InitializeComponent();
|
}
|
|
#region 事件集
|
|
/// <summary>
|
/// 水力点击事件
|
/// 包含左键和右键
|
/// </summary>
|
public event Action<string> HydroClickEvent;
|
/// <summary>
|
/// 水力点击事件
|
/// 仅左键
|
/// </summary>
|
public event Action<string> HydroMouseLeftClickEvent;
|
/// <summary>
|
/// 加载完成事件
|
/// </summary>
|
public event Action LoadCompletedEvent;
|
|
#endregion
|
|
//项目
|
private XhsProjectVmo _project = null;
|
//项目站
|
private XhsProjectSiteVmo _projectSite = null;
|
|
/// <summary>
|
/// 初始化数据
|
/// 仅支持调用一次
|
/// </summary>
|
public async Task InitialData(XhsProjectVmo project, XhsProjectSiteVmo projectSite)
|
{
|
if (project == null)
|
{
|
return;
|
}
|
_project = project;
|
_projectSite = projectSite;
|
if (_projectSite == null)
|
{
|
_projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_project.ID);
|
}
|
var bimfaceInteropContainer = GetBimfaceInteropContainer();
|
this.Controls.Clear();
|
this.Controls.Add(bimfaceInteropContainer);
|
await bimfaceInteropContainer.InitialContainer();
|
}
|
|
#region 交互容器
|
|
//bimface 交互容器
|
private BimfaceInterop3dContainer _bimfaceInteropContainer = null;
|
|
//获取Bimface 交互容器
|
private BimfaceInterop3dContainer GetBimfaceInteropContainer()
|
{
|
if (_bimfaceInteropContainer == null)
|
{
|
_bimfaceInteropContainer = new BimfaceInterop3dContainer();
|
_bimfaceInteropContainer.Dock = DockStyle.Fill;
|
_bimfaceInteropContainer.LoadCompletedEvent += async () =>
|
{
|
if (_projectSite == null)
|
{
|
return;
|
}
|
|
var relation = await BLLFactory<Yw.BLL.BimfaceFileRelation>.Instance
|
.GetDefaultByObjectTypeAndObjectIDOfPurpose
|
(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation);
|
if (relation == null)
|
{
|
return;
|
}
|
|
var bimfaceFile = await BLLFactory<Yw.BLL.BimfaceFile>.Instance.GetByID(relation.BimfaceFileID);
|
if (bimfaceFile == null)
|
{
|
return;
|
}
|
|
var viewToken = await BimfaceHelper.GetViewToken(bimfaceFile.BimfaceId);
|
if (string.IsNullOrEmpty(viewToken))
|
{
|
return;
|
}
|
await _bimfaceInteropContainer.LoadView(viewToken);
|
};
|
_bimfaceInteropContainer.LoadFailedEvent += () =>
|
{
|
TipFormHelper.ShowError("三维模型容器加载失败");
|
};
|
_bimfaceInteropContainer.LoadViewCompletedEvent += () =>
|
{
|
this.LoadCompletedEvent?.Invoke();
|
};
|
_bimfaceInteropContainer.LoadViewFailedEvent += (obj) =>
|
{
|
TipFormHelper.ShowError($"三维模型加载失败");
|
};
|
_bimfaceInteropContainer.ClickInEvent += (obj) =>
|
{
|
if (obj == null)
|
{
|
return;
|
}
|
this.HydroClickEvent?.Invoke(obj.ObjectId);
|
};
|
_bimfaceInteropContainer.ClickOutEvent += (obj) =>
|
{
|
this.HydroClickEvent?.Invoke(null);
|
};
|
_bimfaceInteropContainer.MouseLeftClickInEvent += (obj) =>
|
{
|
if (obj == null)
|
{
|
return;
|
}
|
this.HydroMouseLeftClickEvent?.Invoke(obj.ObjectId);
|
};
|
_bimfaceInteropContainer.MouseLeftClickOutEvent += (obj) =>
|
{
|
this.HydroMouseLeftClickEvent?.Invoke(null);
|
};
|
}
|
return _bimfaceInteropContainer;
|
}
|
|
|
#endregion
|
|
#region 显示与隐藏
|
|
/// <summary>
|
/// 显示构件
|
/// </summary>
|
public async Task ShowComponents(List<string> elementIds)
|
{
|
if (_bimfaceInteropContainer == null)
|
{
|
return;
|
}
|
await _bimfaceInteropContainer.ShowComponents(elementIds);
|
}
|
|
/// <summary>
|
/// 隐藏构件
|
/// </summary>
|
public async Task HideComponents(List<string> elementIds)
|
{
|
if (_bimfaceInteropContainer == null)
|
{
|
return;
|
}
|
await _bimfaceInteropContainer.HideComponents(elementIds);
|
}
|
|
/// <summary>
|
/// 显示所有构件
|
/// </summary>
|
public async Task ShowAllComponents()
|
{
|
if (_bimfaceInteropContainer == null)
|
{
|
return;
|
}
|
await _bimfaceInteropContainer.ShowAllComponents();
|
}
|
|
#endregion
|
|
#region 构件的半透明与取消
|
|
/// <summary>
|
/// 半透明构件
|
/// </summary>
|
public async Task TranslucentComponents(List<string> elementIds)
|
{
|
await _bimfaceInteropContainer?.TranslucentComponents(elementIds);
|
}
|
|
/// <summary>
|
/// 取消构件半透明
|
/// </summary>
|
public async Task OpaqueComponents(List<string> elementIds)
|
{
|
await _bimfaceInteropContainer?.OpaqueComponents(elementIds);
|
}
|
|
#endregion
|
|
#region 构件的选中与取消
|
|
/// <summary>
|
/// 设置选择的构件
|
/// </summary>
|
/// <returns></returns>
|
public async Task SetSelectedComponents(List<string> elements)
|
{
|
if (_bimfaceInteropContainer == null)
|
{
|
return;
|
}
|
await _bimfaceInteropContainer.SetSelectedComponents(elements);
|
}
|
|
/// <summary>
|
/// 增加选择的构件
|
/// </summary>
|
/// <param name="elements"></param>
|
/// <returns></returns>
|
public async Task AddSelectedComponents(List<string> elements)
|
{
|
if (_bimfaceInteropContainer == null)
|
{
|
return;
|
}
|
await _bimfaceInteropContainer.AddSelectedComponents(elements);
|
}
|
|
/// <summary>
|
/// 移除选择的构件
|
/// </summary>
|
/// <param name="elements"></param>
|
/// <returns></returns>
|
public async Task RemoveSelectedComponents(List<string> elements)
|
{
|
if (_bimfaceInteropContainer == null)
|
{
|
return;
|
}
|
await _bimfaceInteropContainer.RemoveSelectedComponents(elements);
|
}
|
|
/// <summary>
|
/// 清除选择的构件
|
/// </summary>
|
/// <param name="elements"></param>
|
/// <returns></returns>
|
public async Task ClearSelectedComponents()
|
{
|
if (_bimfaceInteropContainer == null)
|
{
|
return;
|
}
|
await _bimfaceInteropContainer.ClearSelectedComponents();
|
}
|
|
#endregion
|
|
#region 缩放与选择
|
|
/// <summary>
|
/// 缩放至构件
|
/// </summary>
|
public async Task ZoomToComponent(string code)
|
{
|
await _bimfaceInteropContainer?.ZoomToComponent(code);
|
}
|
|
/// <summary>
|
/// 缩放至选择构件
|
/// </summary>
|
public async Task ZoomToSelectedComponents()
|
{
|
await _bimfaceInteropContainer?.ZoomToSelectedComponents();
|
}
|
|
/// <summary>
|
/// 缩放至选择构件
|
/// </summary>
|
public async Task ZoomAndSelectComponent(string code)
|
{
|
if (string.IsNullOrEmpty(code))
|
{
|
return;
|
}
|
await _bimfaceInteropContainer?.ZoomAndSelectComponents(new List<string>() { code });
|
}
|
|
/// <summary>
|
/// 缩放至选择构件
|
/// </summary>
|
public async Task ZoomAndSelectComponents(List<string> codes)
|
{
|
await _bimfaceInteropContainer?.ZoomAndSelectComponents(codes);
|
}
|
|
#endregion
|
|
#region 强调构件
|
|
private const string _blinkColor = "#32D3A6";//强调构件颜色
|
private const double _blinkTransparency = 0.8d; //强调构件透明度
|
|
/// <summary>
|
/// 设置强调构件
|
/// </summary>
|
public async Task SetBlinkComponents(string elementId, string color = _blinkColor, double transparency = _blinkTransparency)
|
{
|
if (string.IsNullOrEmpty(elementId))
|
{
|
return;
|
}
|
await _bimfaceInteropContainer?.SetBlinkComponents(new List<string>() { elementId }, color, transparency);
|
}
|
|
/// <summary>
|
/// 设置强调构件
|
/// </summary>
|
public async Task SetBlinkComponents(List<string> elementIds, string color = _blinkColor, double transparency = _blinkTransparency)
|
{
|
if (elementIds == null || elementIds.Count < 1)
|
{
|
return;
|
}
|
await _bimfaceInteropContainer?.SetBlinkComponents(elementIds, color, transparency);
|
}
|
|
/// <summary>
|
/// 清除强调构件
|
/// </summary>
|
public async Task ClearBlinkComponents()
|
{
|
await _bimfaceInteropContainer?.ClearBlinkComponents();
|
}
|
|
#endregion
|
|
#region 构件着色
|
|
/// <summary>
|
/// 设置强调构件
|
/// </summary>
|
public async Task OverrideComponentsColor(List<string> elementIds, string color, double transparency)
|
{
|
await _bimfaceInteropContainer?.OverrideComponentsColor(elementIds, color, transparency);
|
}
|
|
/// <summary>
|
/// 设置强调构件
|
/// </summary>
|
public async Task OverrideComponentsColor(string elementId, string color, double transparency)
|
{
|
if (string.IsNullOrEmpty(elementId))
|
{
|
return;
|
}
|
await _bimfaceInteropContainer.OverrideComponentsColor(new List<string>() { elementId }, color, transparency);
|
}
|
|
/// <summary>
|
/// 恢复构件颜色
|
/// </summary>
|
public async Task RestoreComponentsColor(List<string> elementIds)
|
{
|
await _bimfaceInteropContainer?.RestoreComponentsColor(elementIds);
|
}
|
|
/// <summary>
|
/// 恢复构件颜色
|
/// </summary>
|
public async Task RestoreComponentsColor(string elementId)
|
{
|
if (string.IsNullOrEmpty(elementId))
|
{
|
return;
|
}
|
await _bimfaceInteropContainer?.RestoreComponentsColor(new List<string>() { elementId });
|
}
|
|
#endregion
|
|
#region 业务计算自定义标签
|
|
/// <summary>
|
/// 设置业务计算自定义标签
|
/// </summary>
|
public async Task SetLogicCalcuCustomLabels(List<LogicCalcuCustomLabel> obj)
|
{
|
await _bimfaceInteropContainer?.SetLogicCalcuCustomLabels(obj);
|
}
|
|
/// <summary>
|
/// 清除业务计算自定义标签
|
/// </summary>
|
public async Task ClearLogicCalcuCustomLabels()
|
{
|
await _bimfaceInteropContainer?.ClearLogicCalcuCustomLabels();
|
}
|
|
#endregion
|
|
#region 业务标注引线标签
|
|
/// <summary>
|
/// 设置业务标注引线标签
|
/// </summary>
|
public async Task SetLogicMarkLeadLabels(List<LogicMarkLeadLabel> obj)
|
{
|
await _bimfaceInteropContainer?.SetLogicMarkLeadLabels(obj);
|
}
|
|
/// <summary>
|
/// 更新业务标注引线标签
|
/// </summary>
|
public async Task UpdateLogicMarkLeadLabel(LogicMarkLeadLabel obj)
|
{
|
await _bimfaceInteropContainer?.UpdateLogicMarkLeadLabel(obj);
|
}
|
|
/// <summary>
|
/// 更新业务标注引线标签
|
/// </summary>
|
public async Task UpdateLogicMarkLeadLabels(List<LogicMarkLeadLabel> obj)
|
{
|
await _bimfaceInteropContainer?.UpdateLogicMarkLeadLabels(obj);
|
}
|
|
/// <summary>
|
/// 清除业务标注引线标签
|
/// </summary>
|
public async Task ClearLogicMarkLeadLabels()
|
{
|
await _bimfaceInteropContainer?.ClearLogicMarkLeadLabels();
|
}
|
|
#endregion
|
|
#region 业务水流动画
|
|
/// <summary>
|
/// 加载水流动画
|
/// </summary>
|
public async Task LoadFlowEffect(LogicFlowEffect obj)
|
{
|
await _bimfaceInteropContainer?.LoadFlowEffect(obj);
|
}
|
|
/// <summary>
|
/// 加载水流动画
|
/// </summary>
|
public async Task LoadFlowEffect(List<LogicFlowEffect> obj)
|
{
|
await _bimfaceInteropContainer?.LoadFlowEffectList(obj);
|
}
|
|
/// <summary>
|
/// 更新水流动画
|
/// </summary>
|
public async Task UpdateFlowEffect(LogicFlowEffect obj)
|
{
|
await _bimfaceInteropContainer?.UpdateFlowEffect(obj);
|
}
|
|
/// <summary>
|
/// 更新水流动画
|
/// </summary>
|
public async Task UpdateFlowEffectList(List<LogicFlowEffect> obj)
|
{
|
await _bimfaceInteropContainer?.UpdateFlowEffectList(obj);
|
}
|
|
/// <summary>
|
/// 卸载水流动画
|
/// </summary>
|
public async Task UnloadFlowEffect()
|
{
|
await _bimfaceInteropContainer?.UnloadFlowEffect();
|
}
|
|
/// <summary>
|
/// 通过Id卸载水流动画
|
/// </summary>
|
public async Task UnloadFlowEffectById(string Id)
|
{
|
await _bimfaceInteropContainer?.UnloadFlowEffectById(Id);
|
}
|
|
#endregion
|
|
#region 连接构件颜色
|
|
private const string _linkComponentColor = "#008B00";//连接构件颜色
|
private const string _linkStartComponentColor = "#094EF7";//连接开始构件颜色
|
private const string _linkEndComponentColor = "#ECBF08";//连接结束构件颜色
|
private const double _linkComponentTransparency = 0.8;
|
private List<string> _linkComponentIds = null;//连接构件id列表
|
|
/// <summary>
|
/// 设置连接构件颜色
|
/// </summary>
|
public async Task SetLinkComponentsColor(List<string> elementIds)
|
{
|
await RestoreLinkComponentsColor();
|
_linkComponentIds = elementIds;
|
if (_linkComponentIds == null || _linkComponentIds.Count < 1)
|
{
|
return;
|
}
|
await _bimfaceInteropContainer?.OverrideComponentsColor(_linkComponentIds, _linkComponentColor, _linkComponentTransparency);
|
}
|
|
/// <summary>
|
/// 恢复连接构件颜色
|
/// </summary>
|
public async Task RestoreLinkComponentsColor()
|
{
|
if (_linkComponentIds == null || _linkComponentIds.Count < 1)
|
{
|
return;
|
}
|
await _bimfaceInteropContainer?.RestoreComponentsColor(_linkComponentIds);
|
}
|
|
/// <summary>
|
/// 设置连接开始构件颜色
|
/// </summary>
|
public async Task SetLinkStartComponentsColor(List<string> elementIds)
|
{
|
if (elementIds == null || elementIds.Count < 1)
|
{
|
return;
|
}
|
if (_linkComponentIds == null)
|
{
|
_linkComponentIds = new List<string>();
|
}
|
_linkComponentIds.AddRange(elementIds);
|
await _bimfaceInteropContainer?.OverrideComponentsColor(elementIds, _linkStartComponentColor, _linkComponentTransparency);
|
}
|
|
/// <summary>
|
/// 设置连接结束构件颜色
|
/// </summary>
|
public async Task SetLinkEndComponentsColor(List<string> elementIds)
|
{
|
if (elementIds == null || elementIds.Count < 1)
|
{
|
return;
|
}
|
if (_linkComponentIds == null)
|
{
|
_linkComponentIds = new List<string>();
|
}
|
_linkComponentIds.AddRange(elementIds);
|
await _bimfaceInteropContainer?.OverrideComponentsColor(elementIds, _linkEndComponentColor, _linkComponentTransparency);
|
}
|
|
#endregion
|
|
#region 业务监测点
|
|
/// <summary>
|
/// 设置业务监测点
|
/// </summary>
|
public async Task SetLogicMonitors(List<LogicMonitor> obj)
|
{
|
await _bimfaceInteropContainer?.SetLogicMonitors(obj);
|
}
|
|
/// <summary>
|
/// 清除业务监测点
|
/// </summary>
|
public async Task ClearLogicMonitors()
|
{
|
await _bimfaceInteropContainer?.ClearLogicMonitors();
|
}
|
|
#endregion
|
|
}
|
}
|