namespace Yw.WpfUI.Hydro
|
{
|
/// <summary>
|
/// 抽象3D水流方向
|
/// </summary>
|
internal class LogicalFlowDirection3D : MeshGeometryVisual3D, IDisposable
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public LogicalFlowDirection3D
|
(
|
LogicalLink3D link,
|
LogicalMaterialHelper materialHelper,
|
bool positive = true
|
)
|
{
|
_link = link;
|
_link.VisualChangedEvent += OnVisualChanged;
|
_materialHelper = materialHelper;
|
_positive = positive;
|
UpdateVisual();
|
}
|
|
private readonly LogicalLink3D _link;//管段
|
private readonly LogicalMaterialHelper _materialHelper;//材质辅助类
|
|
/// <summary>
|
/// 正向
|
/// </summary>
|
public bool Positive
|
{
|
get { return _positive; }
|
set { _positive = value; }
|
}
|
private bool _positive = true;
|
|
/// <summary>
|
/// 更新材质
|
/// </summary>
|
public void UpdateMaterial()
|
{
|
var htmlColor = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Flow.Direction.HtmlColor;
|
var color = htmlColor.ToMediaColor();
|
this.Material = _materialHelper.GetMaterial(color);
|
}
|
|
/// <summary>
|
/// 更新几何图形
|
/// </summary>
|
public void UpdateGeometry()
|
{
|
var diameter = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Link.Normal.Diameter;
|
var center = _link.StartPosition + (_link.EndPosition - _link.StartPosition) / 2d;
|
var start = _link.StartPosition + (center - _link.StartPosition) / 2d;
|
var end = center + (_link.EndPosition - center) / 2d;
|
var builder = new MeshBuilder();
|
if (this.Positive)
|
{
|
builder.AddArrow(start, end, diameter);
|
}
|
else
|
{
|
builder.AddArrow(end, start, diameter);
|
}
|
var geometry = builder.ToMesh();
|
this.MeshGeometry = geometry;
|
}
|
|
/// <summary>
|
/// 更新可见性
|
/// </summary>
|
public void UpdateVisibility()
|
{
|
this.Visible = _link.Visible;
|
}
|
|
/// <summary>
|
/// 更新可见元素
|
/// </summary>
|
public void UpdateVisual()
|
{
|
this.UpdateMaterial();
|
this.UpdateGeometry();
|
this.UpdateVisibility();
|
}
|
|
//处理可见事件
|
private void OnVisualChanged()
|
{
|
this.UpdateVisual();
|
}
|
|
/// <summary>
|
/// 释放
|
/// </summary>
|
public void Dispose()
|
{
|
_link.VisualChangedEvent -= OnVisualChanged;
|
}
|
|
}
|
}
|