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();
}
}
}