namespace Yw.WpfUI.Hydro
|
{
|
/// <summary>
|
/// 绘制管理器
|
/// </summary>
|
internal class DrawManager
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public DrawManager(HelixViewport3D viewport)
|
{
|
_viewport = viewport;
|
_initialHelper = new DrawInitialHelper(viewport);
|
_backgroundHelper = new DrawBackgroundHelper(viewport, _initialHelper);
|
_workPanelHelper = new DrawWorkPanelHelper(viewport, _initialHelper);
|
_cameraHelper = new DrawCameraHelper(viewport, _initialHelper);
|
_zoomHelper = new DrawZoomHelper(viewport);
|
_highlightHelper = new DrawHighlightHelper(viewport, _initialHelper);
|
_selectionHelper = new DrawSelectionHelper(viewport, _initialHelper);
|
_selectionHelper.SelectionChangedEvent += OnSelectionChanged;
|
_colorHelper = new DrawColorHelper(viewport, _initialHelper);
|
_opacityHelper = new DrawOpacityHelper(viewport, _initialHelper);
|
_visibleHelper = new DrawVisibleHelper(viewport, _initialHelper);
|
_billboardTextHelper = new DrawBillboardTextHelper(viewport, _initialHelper);
|
_flowDirectionHelper = new DrawFlowDirectionHelper(viewport, _initialHelper);
|
}
|
|
#region 事件集合
|
|
/// <summary>
|
/// 选择改变事件
|
/// </summary>
|
public event Action<List<VisualL3d>> SelectionChangedEvent;
|
|
#endregion
|
|
#region 固定资源
|
|
protected readonly HelixViewport3D _viewport = null;//三维组件
|
protected readonly DrawInitialHelper _initialHelper = null;//初始化辅助类
|
protected readonly DrawBackgroundHelper _backgroundHelper = null;//背景辅助类
|
protected readonly DrawWorkPanelHelper _workPanelHelper = null;//工作面板辅助类
|
protected readonly DrawCameraHelper _cameraHelper = null;//相机辅助类
|
protected readonly DrawZoomHelper _zoomHelper = null;//缩放辅助类
|
protected readonly DrawHighlightHelper _highlightHelper = null;//高亮辅助类
|
protected readonly DrawSelectionHelper _selectionHelper = null;//选择辅助类
|
protected readonly DrawColorHelper _colorHelper = null;//颜色辅助类
|
protected readonly DrawOpacityHelper _opacityHelper = null;//透明度辅助类
|
protected readonly DrawVisibleHelper _visibleHelper = null;//可见性辅助类
|
protected readonly DrawBillboardTextHelper _billboardTextHelper = null;//公告文本辅助类
|
protected readonly DrawFlowDirectionHelper _flowDirectionHelper = null;//水流方向辅助类
|
|
#endregion
|
|
#region 判断字段
|
|
/// <summary>
|
/// 是否启用缩放
|
/// </summary>
|
public virtual bool IsZoomEnabled
|
{
|
get { return _viewport.IsZoomEnabled; }
|
set { _viewport.IsZoomEnabled = value; }
|
}
|
|
/// <summary>
|
/// 是否启用平移
|
/// </summary>
|
public virtual bool IsPanEnabled
|
{
|
get { return _viewport.IsPanEnabled; }
|
set { _viewport.IsPanEnabled = value; }
|
}
|
|
/// <summary>
|
/// 是否启用旋转
|
/// </summary>
|
public virtual bool IsRotationEnabled
|
{
|
get { return _viewport.IsRotationEnabled; }
|
set { _viewport.IsRotationEnabled = value; }
|
}
|
|
/// <summary>
|
/// 是否启用高亮
|
/// </summary>
|
public bool IsHighlightEnabled
|
{
|
get { return _highlightHelper.Enabled; }
|
set { _highlightHelper.Enabled = value; }
|
}
|
|
/// <summary>
|
/// 是否启用选择
|
/// </summary>
|
public virtual bool IsSelectionEnabled
|
{
|
get => _isSelectionEnabled;
|
set => _isSelectionEnabled = value;
|
}
|
protected bool _isSelectionEnabled = true;
|
|
/// <summary>
|
/// 是否启用缩放适应
|
/// </summary>
|
public virtual bool IsZoomExtentsEnabled
|
{
|
get => _isZoomExtentsEnabled;
|
set => _isZoomExtentsEnabled = value;
|
}
|
protected bool _isZoomExtentsEnabled = true;
|
|
#endregion
|
|
#region 初始化
|
|
/// <summary>
|
/// 是否初始化
|
/// </summary>
|
public virtual bool Initialized
|
{
|
get
|
{
|
return _initialHelper.Initialized;
|
}
|
}
|
|
/// <summary>
|
/// 初始化
|
/// </summary>
|
public virtual void Initial(NetworkL3d nw)
|
{
|
_initialHelper.Initial(nw);
|
InitialViewport();
|
}
|
|
/// <summary>
|
/// 关闭
|
/// </summary>
|
public virtual void Close()
|
{
|
_initialHelper.Dispose();
|
_backgroundHelper.Dispose();
|
_workPanelHelper.Dispose();
|
_cameraHelper.Dispose();
|
_zoomHelper.Dispose();
|
_highlightHelper.Dispose();
|
_selectionHelper.SelectionChangedEvent -= OnSelectionChanged;
|
_selectionHelper.Dispose();
|
_colorHelper.Dispose();
|
_opacityHelper.Dispose();
|
_visibleHelper.Dispose();
|
_billboardTextHelper.Dispose();
|
_flowDirectionHelper.Dispose();
|
}
|
|
//初始化Vieport
|
protected virtual void InitialViewport()
|
{
|
InitialViewportCube();
|
InitialViewportInput();
|
}
|
|
//初始化Viewport立方体
|
protected virtual void InitialViewportCube()
|
{
|
_viewport.ViewCubeBackText = "后";
|
_viewport.ViewCubeBottomText = "下";
|
_viewport.ViewCubeFrontText = "前";
|
_viewport.ViewCubeLeftText = "左";
|
_viewport.ViewCubeRightText = "右";
|
_viewport.ViewCubeTopText = "上";
|
}
|
|
//初始化Viewport交互
|
protected virtual void InitialViewportInput()
|
{
|
//_viewport.ZoomAroundMouseDownPoint = true;
|
//_viewport.RotateAroundMouseDownPoint = true;
|
// _viewport.SnapMouseDownPoint = true;
|
}
|
|
//初始化Viewport数据
|
protected virtual void InitialViewportData()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
if (_initialHelper.Network.CameraController != null)
|
{
|
if (_initialHelper.Network.CameraController.DefaultCamera != null)
|
{
|
if (_initialHelper.Network.CameraController.DefaultCamera.Camera != null)
|
{
|
_cameraHelper.SetView(_initialHelper.Network.CameraController.DefaultCamera.Camera);
|
}
|
}
|
}
|
}
|
|
|
#endregion
|
|
#region 图片背景
|
|
/// <summary>
|
/// 显示背景
|
/// </summary>
|
public virtual void ShowBackgroud()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_backgroundHelper.Show();
|
}
|
|
/// <summary>
|
/// 隐藏背景
|
/// </summary>
|
public virtual void HideBackgroud()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_backgroundHelper.Hide();
|
}
|
|
/// <summary>
|
/// 背景可见性
|
/// </summary>
|
public virtual bool BackgroudVisible
|
{
|
get
|
{
|
if (!Initialized)
|
{
|
return false;
|
}
|
return _backgroundHelper.Visible;
|
}
|
set
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_backgroundHelper.Visible = value;
|
}
|
}
|
|
/// <summary>
|
/// 设置背景
|
/// </summary>
|
public virtual void SetBackground(BackgroundL3d bc)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
if (bc == null)
|
{
|
return;
|
}
|
_initialHelper.SetBackground(bc);
|
}
|
|
/// <summary>
|
/// 设置背景
|
/// </summary>
|
public virtual void SetBackground(string url)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_initialHelper.SetBackground(url);
|
}
|
|
#endregion
|
|
#region 工作面板
|
|
/// <summary>
|
/// 显示工作面板
|
/// </summary>
|
public virtual void ShowWorkPanel()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_workPanelHelper.Show();
|
}
|
|
/// <summary>
|
/// 隐藏工作面板
|
/// </summary>
|
public virtual void HideWorkPanel()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_workPanelHelper.Hide();
|
}
|
|
/// <summary>
|
/// 工作面板可见性
|
/// </summary>
|
public virtual bool WorkPanelVisible
|
{
|
get
|
{
|
if (!Initialized)
|
{
|
return false;
|
}
|
return _workPanelHelper.Visible;
|
}
|
set
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_workPanelHelper.Visible = value;
|
}
|
}
|
|
/// <summary>
|
/// 设置工作面板
|
/// </summary>
|
public virtual void SetWorkPanel(WorkPanelL3d workPanel)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
if (workPanel == null)
|
{
|
return;
|
}
|
_initialHelper.SetWorkPanel(workPanel);
|
}
|
|
#endregion
|
|
#region 相机视角
|
|
#region 默认视角
|
|
/// <summary>
|
/// 设置默认视图
|
/// </summary>
|
public void SetDefaultView()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
var cs = _cameraHelper.GetView();
|
_initialHelper.SetDefaultCameraSetting(cs);
|
}
|
|
/// <summary>
|
/// 设置默认视图
|
/// </summary>
|
public void SetDefaultView(string name)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_initialHelper.SetDefaultCameraName(name);
|
}
|
|
/// <summary>
|
/// 显示默认视图
|
/// </summary>
|
public void ShowDefaultView()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
var cs = _initialHelper.GetDefaultCameraSetting();
|
_cameraHelper.SetView(cs);
|
}
|
|
#endregion
|
|
#region 六视图
|
|
/// <summary>
|
/// 显示上视图
|
/// </summary>
|
public virtual void ShowTopView()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_cameraHelper.SetTopView();
|
}
|
|
/// <summary>
|
/// 显示下视图
|
/// </summary>
|
public virtual void ShowBottomView()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_cameraHelper.SetBottomView();
|
}
|
|
/// <summary>
|
/// 显示左视图
|
/// </summary>
|
public virtual void ShowLeftView()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_cameraHelper.SetLeftView();
|
}
|
|
/// <summary>
|
/// 显示右视图
|
/// </summary>
|
public virtual void ShowRightView()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_cameraHelper.SetRightView();
|
}
|
|
/// <summary>
|
/// 显示前视图
|
/// </summary>
|
public virtual void ShowFrontView()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_cameraHelper.SetFrontView();
|
}
|
|
/// <summary>
|
/// 显示后视图
|
/// </summary>
|
public virtual void ShowBackView()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_cameraHelper.SetBackView();
|
}
|
|
#endregion
|
|
#region 等轴视图
|
|
/// <summary>
|
/// 西南视角
|
/// 从物体的左前下方观察
|
/// </summary>
|
public virtual void ShowSouthWestView()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_cameraHelper.SetSouthWestView();
|
}
|
|
/// <summary>
|
/// 东南视角
|
/// 从物体的右前下方观察
|
/// </summary>
|
public virtual void ShowSouthEastView()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_cameraHelper.SetSouthEastView();
|
}
|
|
/// <summary>
|
/// 东北视角
|
/// 从物体的右后上方观察
|
/// </summary>
|
public virtual void ShowNorthEastView()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_cameraHelper.SetNorthEastView();
|
}
|
|
/// <summary>
|
/// 西北视角
|
/// 从物体的左后上方观察
|
/// </summary>
|
public virtual void ShowNorthWestView()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_cameraHelper.SetNorthWestView();
|
}
|
|
#endregion
|
|
#endregion
|
|
#region 关联缩放
|
|
/// <summary>
|
/// 缩放至可见构件
|
/// </summary>
|
public virtual void ZoomToVisual(string Id)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
var visual3d = _initialHelper.GetVisual3D(Id);
|
if (visual3d != null)
|
{
|
_zoomHelper.ZoomToVisual(visual3d);
|
}
|
}
|
|
/// <summary>
|
/// 缩放至可见构件
|
/// </summary>
|
public virtual void ZoomToVisual(List<string> Ids)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
var visual3ds = _initialHelper.GetVisual3D(Ids);
|
if (visual3ds != null && visual3ds.Count > 0)
|
{
|
_zoomHelper.ZoomToVisual(visual3ds);
|
}
|
}
|
|
#endregion
|
|
#region 选择构件
|
|
/// <summary>
|
/// 选择可见构件
|
/// </summary>
|
public virtual void SelectVisual(string Id)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
var visual3d = _initialHelper.GetVisual3D(Id);
|
_selectionHelper.SelectVisual(visual3d);
|
}
|
|
/// <summary>
|
/// 选择可见构件
|
/// </summary>
|
public virtual void SelectVisual(List<string> Ids)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
var visual3ds = _initialHelper.GetVisual3D(Ids);
|
_selectionHelper.SelectVisual(visual3ds);
|
}
|
|
//处理选择改变
|
protected virtual void OnSelectionChanged(List<VisualDraw3D> visual3ds)
|
{
|
var visuals = visual3ds?.Select(x => x.Visual).ToList();
|
this.SelectionChangedEvent?.Invoke(visuals);
|
}
|
|
#endregion
|
|
#region 缩放选择
|
|
/// <summary>
|
/// 缩放并选择可见构件
|
/// </summary>
|
public virtual void ZoomAndSelectVisual(string Id)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
var visual3d = _initialHelper.GetVisual3D(Id);
|
_zoomHelper.ZoomToVisual(visual3d);
|
_selectionHelper.SelectVisual(visual3d);
|
}
|
|
/// <summary>
|
/// 缩放并选择可见构件
|
/// </summary>
|
public virtual void ZoomAndSelectVisual(List<string> Ids)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
var visual3ds = _initialHelper.GetVisual3D(Ids);
|
_zoomHelper.ZoomToVisual(visual3ds);
|
_selectionHelper.SelectVisual(visual3ds);
|
}
|
|
#endregion
|
|
#region 颜色覆盖
|
|
/// <summary>
|
/// 设置颜色
|
/// </summary>
|
public virtual void SetColor(string Id, string htmlColor)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_colorHelper.Set(Id, htmlColor);
|
}
|
|
/// <summary>
|
/// 设置颜色
|
/// </summary>
|
public virtual void SetColor(List<string> Ids, string htmlColor)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_colorHelper.Set(Ids, htmlColor);
|
}
|
|
/// <summary>
|
/// 设置颜色
|
/// </summary>
|
public virtual void SetColor(List<ColorL3d> list)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_colorHelper.Set(list);
|
}
|
|
/// <summary>
|
/// 清除颜色
|
/// </summary>
|
public virtual void ClearColor(string Id)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_colorHelper.Clear(Id);
|
}
|
|
/// <summary>
|
/// 清除颜色
|
/// </summary>
|
public virtual void ClearColor(List<string> Ids)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_colorHelper.Clear(Ids);
|
}
|
|
/// <summary>
|
/// 清除颜色
|
/// </summary>
|
public virtual void ClearColor()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_colorHelper.Clear();
|
}
|
|
#endregion
|
|
#region 透明度
|
|
/// <summary>
|
/// 设置透明度
|
/// </summary>
|
public virtual void SetOpacity(string Id, double opacity)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_opacityHelper.Set(Id, opacity);
|
}
|
|
/// <summary>
|
/// 设置透明度
|
/// </summary>
|
public virtual void SetOpacity(List<string> Ids, double opacity)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_opacityHelper.Set(Ids, opacity);
|
}
|
|
/// <summary>
|
/// 设置透明度
|
/// </summary>
|
public virtual void SetOpacity(List<OpacityL3d> list)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_opacityHelper.Set(list);
|
}
|
|
/// <summary>
|
/// 清除透明度
|
/// </summary>
|
public virtual void ClearOpacity(string Id)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_opacityHelper.Clear(Id);
|
}
|
|
/// <summary>
|
/// 清除透明度
|
/// </summary>
|
public virtual void ClearOpacity(List<string> Ids)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_opacityHelper.Clear(Ids);
|
}
|
|
/// <summary>
|
/// 清除透明度
|
/// </summary>
|
public virtual void ClearOpacity()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_opacityHelper.Clear();
|
}
|
|
#endregion
|
|
#region 可见性
|
|
/// <summary>
|
/// 设置可见性
|
/// </summary>
|
public virtual void SetVisible(string Id, bool visible)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_visibleHelper.Set(Id, visible);
|
}
|
|
/// <summary>
|
/// 设置可见性
|
/// </summary>
|
public virtual void SetVisible(List<string> Ids, bool visible)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_visibleHelper.Set(Ids, visible);
|
}
|
|
/// <summary>
|
/// 设置可见性
|
/// </summary>
|
public virtual void SetVisible(List<VisibleL3d> list)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_visibleHelper.Set(list);
|
}
|
|
/// <summary>
|
/// 清除可见性
|
/// </summary>
|
public virtual void ClearVisible(string Id)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_visibleHelper.Clear(Id);
|
}
|
|
/// <summary>
|
/// 清除可见性
|
/// </summary>
|
public virtual void ClearVisible(List<string> Ids)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_visibleHelper.Clear(Ids);
|
}
|
|
/// <summary>
|
/// 清除可见性
|
/// </summary>
|
public virtual void ClearVisible()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_visibleHelper.Clear();
|
}
|
|
#endregion
|
|
#region 公告文本
|
|
/// <summary>
|
/// 显示公告文本
|
/// </summary>
|
public virtual void ShowBillboardText()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_billboardTextHelper.Show();
|
}
|
|
/// <summary>
|
/// 隐藏公告文本
|
/// </summary>
|
public virtual void HideBillboardText()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_billboardTextHelper.Hide();
|
}
|
|
/// <summary>
|
/// 公告文本可见性
|
/// </summary>
|
public virtual bool BillboardTextVisible
|
{
|
get
|
{
|
if (!Initialized)
|
{
|
return false;
|
}
|
return _billboardTextHelper.Visible;
|
}
|
set
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_billboardTextHelper.Visible = value;
|
}
|
}
|
|
/// <summary>
|
/// 设置公告文本
|
/// </summary>
|
public virtual void SetBillboardText(List<TextL3d> items)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_billboardTextHelper.Set(items);
|
}
|
|
/// <summary>
|
/// 设置公告文本
|
/// </summary>
|
public virtual void SetBillboardText(TextL3d items)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_billboardTextHelper.Set(items);
|
}
|
|
/// <summary>
|
/// 清理公告板文本
|
/// </summary>
|
public virtual void ClearBillboardText()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_billboardTextHelper.Clear();
|
}
|
|
#endregion
|
|
#region 水流方向
|
|
/// <summary>
|
/// 显示水流方向
|
/// </summary>
|
public virtual void ShowFlowDirection()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_flowDirectionHelper.Show();
|
}
|
|
/// <summary>
|
/// 隐藏水流方向
|
/// </summary>
|
public virtual void HideFlowDirection()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_flowDirectionHelper.Hide();
|
}
|
|
/// <summary>
|
/// 水流方向可见性
|
/// </summary>
|
public virtual bool FlowDirectionVisible
|
{
|
get
|
{
|
if (!Initialized)
|
{
|
return false;
|
}
|
return _flowDirectionHelper.Visible;
|
}
|
set
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_flowDirectionHelper.Visible = value;
|
}
|
}
|
|
/// <summary>
|
/// 设置水流方向
|
/// </summary>
|
public virtual void SetFlowDirection(FlowDirectionL3d item)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_flowDirectionHelper.Set(item);
|
}
|
|
/// <summary>
|
/// 设置水流方向
|
/// </summary>
|
public virtual void SetFlowDirection(List<FlowDirectionL3d> items)
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_flowDirectionHelper.Set(items);
|
}
|
|
/// <summary>
|
/// 清理水流方向
|
/// </summary>
|
public virtual void ClearFlowDirection()
|
{
|
if (!Initialized)
|
{
|
return;
|
}
|
_flowDirectionHelper.Clear();
|
}
|
|
#endregion
|
|
|
|
}
|
}
|