namespace Yw.WpfUI.Hydro
{
///
/// 抽象3D水源
///
internal class LogicalSource3D : LogicalNode3D
{
///
///
///
public LogicalSource3D() { }
///
///
///
public LogicalSource3D
(
SourceL3d vmo,
LogicalStateHelper stateHelper,
LogicalMaterialHelper materialHelper,
LogicalOverrideColorHelper overrideColorHelper,
LogicalOverrideOpacityHelper overrideOpacityHelper,
LogicalOverrideVisibleHelper overrideVisibleHelper
) : base(vmo, stateHelper, materialHelper, overrideColorHelper, overrideOpacityHelper, overrideVisibleHelper)
{
}
///
/// Vmo
///
public new SourceL3d Vmo
{
get { return _vmo as SourceL3d; }
set { _vmo = value; }
}
///
/// 更新材质
///
public override void UpdateMaterial()
{
var htmlColor = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Normal.HtmlColor;
var opacity = 1.0d;
var state = _stateHelper.GetState(this.Vmo);
if (state.HasFlag(eLogicalState.Color))
{
htmlColor = _overrideColorHelper.GetColor(this.Vmo);
}
if (state.HasFlag(eLogicalState.Opacity))
{
opacity = _overrideOpacityHelper.GetOpacity(this.Vmo);
}
if (state.HasFlag(eLogicalState.Selection))
{
htmlColor = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Selection.HtmlColor;
}
if (state.HasFlag(eLogicalState.Highlight))
{
htmlColor = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Highlight.HtmlColor;
}
var material = _materialHelper.GetMaterial(htmlColor, opacity);
this.Material = material;
}
///
/// 更新几何图形
///
public override void UpdateGeometry()
{
var radius = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Normal.Radius;
var state = _stateHelper.GetState(this.Vmo);
if (state.HasFlag(eLogicalState.Selection))
{
radius = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Selection.Radius;
}
if (state.HasFlag(eLogicalState.Highlight))
{
radius = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Highlight.Radius;
}
var pt = this.Vmo.Position.ToPoint3D();
var x = radius * 4d;
var y = radius * 4d;
var z = radius * 2d;
var builder = new MeshBuilder();
builder.AddBox(pt, x, y, z);
var geometry = builder.ToMesh();
this.MeshGeometry = geometry;
}
///
/// 更新变换矩阵
///
public override void UpdateTransform()
{
}
}
}