namespace Yw.WpfUI.Hydro { /// /// 绘制移除辅助类 /// internal class DrawRemoveHelper : IDisposable { /// /// /// public DrawRemoveHelper ( HelixViewport3D viewport, DrawInitialHelper initialHelper ) { _viewport = viewport; _initialHelper = initialHelper; Attach(); } #region 事件集合 /// /// 移除改变事件 /// public event Action> RemoveChangedEvent; #endregion private readonly HelixViewport3D _viewport = null;//三维组件 private readonly DrawInitialHelper _initialHelper = null;//初始化辅助类 /// /// 是否初始化 /// public bool Initialized { get { return _initialized; } private set { _initialized = value; } } private bool _initialized = false; //初始化 private void Initialize() { if (!_initialHelper.Initialized) { return; } _initialized = true; } //处理初始化完成 private void OnInitialCompleted() { Initialize(); } /// /// 移除 /// public bool Remove(string Id) { if (!Initialized) { return false; } if (string.IsNullOrEmpty(Id)) { return false; } var visual3d = _initialHelper.GetVisual3D(Id); if (visual3d == null) { return false; } var list = new List(); list.Add(visual3d); if (visual3d is NodeDraw3D node3d) { var link3ds = _initialHelper.GetConnectLink3D(node3d); if (link3ds != null && link3ds.Count > 0) { foreach (var link3d in link3ds) { if (!list.Contains(link3d)) { list.Add(link3d); } } } } var bol = _initialHelper.RemoveVisual3D(list); if (bol) { OnRemoveChanged(list); } return bol; } /// /// 移除 /// public bool Remove(List Ids) { if (!Initialized) { return false; } if (Ids == null || Ids.Count < 1) { return false; } var list = new List(); foreach (var Id in Ids) { var visual3d = _initialHelper.GetVisual3D(Id); if (visual3d != null) { if (!list.Contains(visual3d)) { list.Add(visual3d); } if (visual3d is NodeDraw3D node3d) { var link3ds = _initialHelper.GetConnectLink3D(node3d); if (link3ds != null && link3ds.Count > 0) { foreach (var link3d in link3ds) { if (!list.Contains(link3d)) { list.Add(link3d); } } } } } } var bol = _initialHelper.RemoveVisual3D(list); if (bol) { OnRemoveChanged(list); } return bol; } //处理移除改变 private void OnRemoveChanged(List visual3ds) { if (visual3ds == null || visual3ds.Count < 1) { return; } this.RemoveChangedEvent?.Invoke(visual3ds); } //附加 private void Attach() { _initialHelper.InitialCompletedEvent += OnInitialCompleted; } //分离 private void Detach() { _initialHelper.InitialCompletedEvent -= OnInitialCompleted; } /// /// 释放 /// public void Dispose() { Detach(); } } }