namespace Yw.WinFrmUI.Hydro
|
{
|
/// <summary>
|
/// 包围盒缓存辅助类
|
/// </summary>
|
internal class BoundingBox3CacheHelper
|
{
|
|
/// <summary>
|
///
|
/// </summary>
|
public BoundingBox3CacheHelper(NetworkL3d nw, Vector3CacheHelper vc)
|
{
|
_nw = nw;
|
_vc = vc;
|
Initial();
|
}
|
|
private NetworkL3d _nw = null;
|
private Vector3CacheHelper _vc = null;
|
private Dictionary<string, BoundingBox3> _dict = new();
|
|
/// <summary>
|
/// 是否初始化
|
/// </summary>
|
public bool Initialized
|
{
|
get
|
{
|
if (_nw == null)
|
{
|
return false;
|
}
|
if (_vc == null)
|
{
|
return false;
|
}
|
if (_dict.Count < 1)
|
{
|
return false;
|
}
|
return true;
|
}
|
}
|
|
//初始化
|
private void Initial()
|
{
|
if (_nw == null)
|
{
|
return;
|
}
|
if (_vc == null)
|
{
|
return;
|
}
|
_dict.Clear();
|
_nw.Nodes.ForEach(x =>
|
{
|
var pts = _vc.GetById(x.Id);
|
if (pts != null && pts.Count > 0)
|
{
|
var bx = BoundingBox3Helper.CalcuPointBoundingBox(pts[0], x.Style2d.Normal.Radiu);
|
_dict.Add(x.Id, bx);
|
}
|
});
|
_nw.Links.ForEach((Action<LinkL3d>)(x =>
|
{
|
var pts = _vc.GetById(x.Id);
|
if (pts != null && pts.Count > 1)
|
{
|
var bx = BoundingBox3Helper.CalcuLineBoundingBox(pts[0], pts[1], x.Style2d.Normal.Width);
|
_dict.Add(x.Id, bx);
|
}
|
}));
|
}
|
|
/// <summary>
|
/// 通过 Id 获取
|
/// </summary>
|
public BoundingBox3 GetById(string Id)
|
{
|
if (!Initialized)
|
{
|
return default;
|
}
|
if (_dict.ContainsKey(Id))
|
{
|
return _dict[Id];
|
}
|
return default;
|
}
|
|
|
}
|
}
|