using DevExpress.Office.Utils;
|
using DevExpress.Xpo.Helpers;
|
using Yw.WinFrmUI.Bimface;
|
|
namespace HStation.WinFrmUI
|
{
|
public partial class XhsProjectSimulationBimfaceCtrl : DevExpress.XtraEditors.XtraUserControl
|
{
|
public XhsProjectSimulationBimfaceCtrl()
|
{
|
InitializeComponent();
|
this.bimfaceInterop3dContainer1.LoadCompletedEvent += BimfaceInterop3dContainer1_LoadCompletedEvent;
|
this.bimfaceInterop3dContainer1.LoadViewCompletedEvent += BimfaceInterop3dContainer1_LoadViewCompletedEvent;
|
this.bimfaceInterop3dContainer1.ClickInEvent += BimfaceInterop3dContainer1_ClickInEvent;
|
this.bimfaceInterop3dContainer1.ClickOutEvent += BimfaceInterop3dContainer1_ClickOutEvent;
|
}
|
|
/// <summary>
|
/// 水力点击事件
|
/// </summary>
|
public event Action<Yw.Model.HydroParterInfo> HydroClickEvent;
|
/// <summary>
|
/// 加载完成事件
|
/// </summary>
|
public event Action LoadCompletedEvent;
|
|
|
private HStation.Vmo.XhsProjectVmo _project = null;
|
private HStation.Vmo.XhsProjectSiteVmo _projectSite = null;
|
private Func<Yw.Model.HydroModelInfo> _hydroInfoFunc = null;
|
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public async Task SetBindingData
|
(
|
HStation.Vmo.XhsProjectVmo project,
|
HStation.Vmo.XhsProjectSiteVmo projectSite,
|
Func<Yw.Model.HydroModelInfo> hydroInfoFunc
|
)
|
{
|
if (project == null)
|
{
|
return;
|
}
|
_project = project;
|
_projectSite = projectSite;
|
_hydroInfoFunc = hydroInfoFunc;
|
if (_projectSite == null)
|
{
|
_projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_project.ID);
|
}
|
await this.bimfaceInterop3dContainer1.InitialContainer();
|
}
|
|
//页面加载完成后触发
|
private async void BimfaceInterop3dContainer1_LoadCompletedEvent()
|
{
|
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 this.bimfaceInterop3dContainer1.LoadView(viewToken);
|
}
|
|
//页面视图加载完成后触发
|
private void BimfaceInterop3dContainer1_LoadViewCompletedEvent()
|
{
|
this.LoadCompletedEvent?.Invoke();
|
}
|
|
//内部点击
|
private void BimfaceInterop3dContainer1_ClickInEvent(Yw.WinFrmUI.Bimface.ClickIn3dInfo obj)
|
{
|
if (obj == null)
|
{
|
return;
|
}
|
if (HydroClickEvent != null)
|
{
|
var hydroInfo = _hydroInfoFunc?.Invoke();
|
if (hydroInfo == null)
|
{
|
return;
|
}
|
var allParterList = hydroInfo.GetAllParters();
|
var parter = allParterList?.Find(x => x.Code == obj.ObjectId);
|
this.HydroClickEvent.Invoke(parter);
|
}
|
}
|
|
//外部点击
|
private void BimfaceInterop3dContainer1_ClickOutEvent(ClickOut3dInfo obj)
|
{
|
this.HydroClickEvent?.Invoke(null);
|
}
|
|
|
#region 构件的显示与隐藏
|
|
/// <summary>
|
/// 显示构件
|
/// </summary>
|
/// <param name="elementIds">构件id列表</param>
|
/// <returns></returns>
|
public async Task ShowComponents(List<string> elementIds)
|
{
|
await this.bimfaceInterop3dContainer1.ShowComponents(elementIds);
|
}
|
|
/// <summary>
|
/// 隐藏构件
|
/// </summary>
|
/// <param name="elementIds">构件id列表</param>
|
/// <returns></returns>
|
public async Task HideComponents(List<string> elementIds)
|
{
|
await this.bimfaceInterop3dContainer1.HideComponents(elementIds);
|
}
|
|
/// <summary>
|
/// 显示所有构件
|
/// </summary>
|
/// <returns></returns>
|
public async Task ShowAllComponents()
|
{
|
await this.bimfaceInterop3dContainer1.ShowAllComponents();
|
}
|
|
#endregion
|
|
#region 构件的半透明与取消
|
|
/// <summary>
|
/// 半透明构件
|
/// </summary>
|
/// <param name="elementIds">构件id列表</param>
|
/// <returns></returns>
|
public async Task TranslucentComponents(List<string> elementIds)
|
{
|
await this.bimfaceInterop3dContainer1.TranslucentComponents(elementIds);
|
}
|
|
/// <summary>
|
/// 取消构件半透明
|
/// </summary>
|
/// <param name="elementIds">构件id列表</param>
|
/// <returns></returns>
|
public async Task OpaqueComponents(List<string> elementIds)
|
{
|
await this.bimfaceInterop3dContainer1.OpaqueComponents(elementIds);
|
}
|
|
#endregion
|
|
#region 构件的选中与取消
|
|
/// <summary>
|
/// 设置选择的构件
|
/// </summary>
|
/// <returns></returns>
|
public async Task SetSelectedComponents(List<string> elements)
|
{
|
await this.bimfaceInterop3dContainer1.SetSelectedComponents(elements);
|
}
|
|
/// <summary>
|
/// 增加选择的构件
|
/// </summary>
|
/// <param name="elements"></param>
|
/// <returns></returns>
|
public async Task AddSelectedComponents(List<string> elements)
|
{
|
await this.bimfaceInterop3dContainer1.AddSelectedComponents(elements);
|
}
|
|
/// <summary>
|
/// 移除选择的构件
|
/// </summary>
|
/// <param name="elements"></param>
|
/// <returns></returns>
|
public async Task RemoveSelectedComponents(List<string> elements)
|
{
|
await this.bimfaceInterop3dContainer1.RemoveSelectedComponents(elements);
|
}
|
|
/// <summary>
|
/// 清除选择的构件
|
/// </summary>
|
/// <param name="elements"></param>
|
/// <returns></returns>
|
public async Task ClearSelectedComponents()
|
{
|
await this.bimfaceInterop3dContainer1.ClearSelectedComponents();
|
}
|
|
#endregion
|
|
#region 缩放
|
|
/// <summary>
|
/// 缩放至构件
|
/// </summary>
|
public async Task ZoomToComponent(string elementId)
|
{
|
await this.bimfaceInterop3dContainer1.ZoomToComponent(elementId);
|
}
|
|
/// <summary>
|
/// 缩放至选择构件
|
/// </summary>
|
public async Task ZoomToSelectedComponents()
|
{
|
await this.bimfaceInterop3dContainer1.ZoomToSelectedComponents();
|
}
|
|
/// <summary>
|
/// 缩放至选择构件
|
/// </summary>
|
public async Task ZoomAndSelectComponents(List<string> elementIds)
|
{
|
await this.bimfaceInterop3dContainer1.ZoomAndSelectComponents(elementIds);
|
}
|
|
#endregion
|
|
#region 强调构件
|
|
/// <summary>
|
/// 设置强调构件
|
/// </summary>
|
public async Task SetBlinkComponents(List<string> elementIds, string color, double transparency)
|
{
|
await this.bimfaceInterop3dContainer1.SetBlinkComponents(elementIds, color, transparency);
|
}
|
|
/// <summary>
|
/// 清除强调构件
|
/// </summary>
|
public async Task SetBlinkComponents()
|
{
|
await this.bimfaceInterop3dContainer1.ClearBlinkComponents();
|
}
|
|
#endregion
|
|
#region 构件着色
|
|
/// <summary>
|
/// 设置强调构件
|
/// </summary>
|
public async Task OverrideComponentsColor(List<string> elementIds, string color, double transparency)
|
{
|
await this.bimfaceInterop3dContainer1.OverrideComponentsColor(elementIds, color, transparency);
|
}
|
|
/// <summary>
|
/// 恢复构件颜色
|
/// </summary>
|
public async Task SetBlinkComponents(List<string> elementIds)
|
{
|
await this.bimfaceInterop3dContainer1.RestoreComponentsColor(elementIds);
|
}
|
|
#endregion
|
|
#region 自定义标签
|
|
/// <summary>
|
/// 设置自定义标签
|
/// </summary>
|
public async Task SetCustomLabels(List<CustomLabel> obj)
|
{
|
await this.bimfaceInterop3dContainer1.SetCustomLabels(obj);
|
}
|
|
/// <summary>
|
/// 清除自定义标签
|
/// </summary>
|
public async Task ClearCustomLabels()
|
{
|
await this.bimfaceInterop3dContainer1.ClearCustomLabels();
|
}
|
|
|
#endregion
|
|
#region 业务
|
|
#region 连接构件颜色
|
|
private const string _linkComponentColor = "#008B00";
|
private const double _linkComponentTransparency = 0.8;
|
private List<string> _linkComponentIds = null;//连接构件id列表
|
|
/// <summary>
|
/// 设置连接构件颜色
|
/// </summary>
|
public async Task SetLinkComponentsColor(List<string> elementIds)
|
{
|
if (_linkComponentIds != null && _linkComponentIds.Count > 0)
|
{
|
await this.bimfaceInterop3dContainer1.RestoreComponentsColor(_linkComponentIds);
|
}
|
_linkComponentIds = elementIds;
|
if (elementIds == null || elementIds.Count < 1)
|
{
|
return;
|
}
|
await this.bimfaceInterop3dContainer1.OverrideComponentsColor(elementIds, _linkComponentColor, _linkComponentTransparency);
|
}
|
|
#endregion
|
|
#region 设置Open构件颜色
|
|
private const string _openComponentColor = "#2E8B57";
|
private const double _openComponentTransparency = 0.8;
|
private List<string> _openComponentIds = null;//Open构件id列表
|
|
/// <summary>
|
/// 设置Open构件颜色
|
/// </summary>
|
public async Task SetOpenComponentsColor(List<string> elementIds)
|
{
|
if (_openComponentIds != null && _openComponentIds.Count > 0)
|
{
|
await this.bimfaceInterop3dContainer1.RestoreComponentsColor(_openComponentIds);
|
}
|
_openComponentIds = elementIds;
|
if (elementIds == null || elementIds.Count < 1)
|
{
|
return;
|
}
|
await this.bimfaceInterop3dContainer1.OverrideComponentsColor(elementIds, _openComponentColor, _openComponentTransparency);
|
}
|
|
#endregion
|
|
#region 自定义标签
|
|
/// <summary>
|
/// 显示计算自定义标签
|
/// </summary>
|
public async Task ShowCalcuCustomLabels(CalcuResult calcuResult)
|
{
|
var hydroInfo = _hydroInfoFunc?.Invoke();
|
if (hydroInfo == null)
|
{
|
return;
|
}
|
if (calcuResult == null)
|
{
|
return;
|
}
|
if (!calcuResult.Succeed)
|
{
|
await this.bimfaceInterop3dContainer1.ClearCustomLabels();
|
return;
|
}
|
var obj = new List<CustomLabel>();
|
var allParterList = hydroInfo.GetAllParters();
|
allParterList?.ForEach(x =>
|
{
|
if (x is Yw.Model.HydroPumpInfo pump)
|
{
|
var calcuPump = calcuResult.LinkList.Find(x => x.Id == pump.Code);
|
var calcuPumpStart = calcuResult.NodeList.Find(x => x.Id == pump.StartCode);
|
var calcuPumpEnd = calcuResult.NodeList.Find(x => x.Id == pump.EndCode);
|
var pumpCustomLabel = new CustomLabel();
|
pumpCustomLabel.Id = pump.Code;
|
pumpCustomLabel.Data = new List<CustomLabelItem>()
|
{
|
new CustomLabelItem(){ Name="流量",Value=Math.Round(calcuPump.Flow,1).ToString(),Unit="m³/h"},
|
new CustomLabelItem(){ Name="进口压力",Value=Math.Round(calcuPumpStart.Head,4).ToString(),Unit="Mpa"},
|
new CustomLabelItem(){ Name="出口压力",Value=Math.Round(calcuPumpEnd.Head,4).ToString(),Unit="Mpa"},
|
};
|
obj.Add(pumpCustomLabel);
|
}
|
else if (x is Yw.Model.HydroEmitterInfo emitter)
|
{
|
var calcuEmitter = calcuResult.NodeList.Find(x => x.Id == emitter.Code);
|
var emitterCustomLabel = new CustomLabel();
|
emitterCustomLabel.Id = emitter.Code;
|
emitterCustomLabel.Data = new List<CustomLabelItem>()
|
{
|
new CustomLabelItem(){ Name="流量",Value=Math.Round(calcuEmitter.Demand,1).ToString(),Unit="m³"},
|
new CustomLabelItem(){ Name="压力",Value=Math.Round(calcuEmitter.Head,4).ToString(),Unit="Mpa"}
|
};
|
obj.Add(emitterCustomLabel);
|
}
|
});
|
|
await this.bimfaceInterop3dContainer1.SetCustomLabels(obj);
|
}
|
|
#endregion
|
|
#endregion
|
|
|
|
}
|
}
|