namespace Yw.WpfUI.Hydro
|
{
|
/// <summary>
|
/// 绘制移除辅助类
|
/// </summary>
|
internal class DrawRemoveHelper : IDisposable
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public DrawRemoveHelper
|
(
|
HelixViewport3D viewport,
|
DrawInitialHelper initialHelper
|
)
|
{
|
_viewport = viewport;
|
_initialHelper = initialHelper;
|
Attach();
|
}
|
|
#region 事件集合
|
|
/// <summary>
|
/// 移除改变事件
|
/// </summary>
|
public event Action<List<VisualDraw3D>> RemoveChangedEvent;
|
|
#endregion
|
|
private readonly HelixViewport3D _viewport = null;//三维组件
|
private readonly DrawInitialHelper _initialHelper = null;//初始化辅助类
|
|
/// <summary>
|
/// 是否初始化
|
/// </summary>
|
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();
|
}
|
|
/// <summary>
|
/// 移除
|
/// </summary>
|
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<VisualDraw3D>();
|
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;
|
}
|
|
/// <summary>
|
/// 移除
|
/// </summary>
|
public bool Remove(List<string> Ids)
|
{
|
if (!Initialized)
|
{
|
return false;
|
}
|
if (Ids == null || Ids.Count < 1)
|
{
|
return false;
|
}
|
var list = new List<VisualDraw3D>();
|
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<VisualDraw3D> visual3ds)
|
{
|
if (visual3ds == null || visual3ds.Count < 1)
|
{
|
return;
|
}
|
this.RemoveChangedEvent?.Invoke(visual3ds);
|
}
|
|
//附加
|
private void Attach()
|
{
|
_initialHelper.InitialCompletedEvent += OnInitialCompleted;
|
}
|
|
//分离
|
private void Detach()
|
{
|
_initialHelper.InitialCompletedEvent -= OnInitialCompleted;
|
}
|
|
/// <summary>
|
/// 释放
|
/// </summary>
|
public void Dispose()
|
{
|
Detach();
|
}
|
|
|
}
|
}
|