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