| | |
| | | set { _vmo = value; } |
| | | } |
| | | |
| | | //更新材质 |
| | | protected override void UpdateMaterial() |
| | | /// <summary> |
| | | /// 更新材质 |
| | | /// </summary> |
| | | public override void UpdateMaterial() |
| | | { |
| | | var htmlColor = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Link.Normal.HtmlColor; |
| | | var opacity = 1.0d; |
| | |
| | | { |
| | | htmlColor = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Link.Highlight.HtmlColor; |
| | | } |
| | | if (state.HasFlag(eLogicalState.Adding)) |
| | | { |
| | | htmlColor = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Adding.HtmlColor; |
| | | } |
| | | if (state.HasFlag(eLogicalState.Editing)) |
| | | { |
| | | htmlColor = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Editing.HtmlColor; |
| | | } |
| | | var material = _materialHelper.GetMaterial(htmlColor, opacity); |
| | | this.Material = material; |
| | | } |
| | | |
| | | //更新可见性 |
| | | protected override void UpdateVisibility() |
| | | { |
| | | bool visible = true; |
| | | var state = _stateHelper.GetState(this.Vmo); |
| | | if (state.HasFlag(eLogicalState.Visible)) |
| | | { |
| | | visible = _overrideVisibleHelper.GetVisible(this.Vmo); |
| | | } |
| | | this.Visible = visible; |
| | | } |
| | | |
| | | //更新几何图形 |
| | | protected override void UpdateGeometry() |
| | | /// <summary> |
| | | /// 更新几何图形 |
| | | /// </summary> |
| | | public override void UpdateGeometry() |
| | | { |
| | | var diameter = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Link.Normal.Diameter; |
| | | var state = _stateHelper.GetState(this.Vmo); |
| | |
| | | diameter = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Link.Highlight.Diameter; |
| | | } |
| | | |
| | | var sv = this.Vmo.StartPosition.ToVector3D(); |
| | | var ev = this.Vmo.EndPosition.ToVector3D(); |
| | | var sv = this.StartPosition.ToVector3D(); |
| | | var ev = this.EndPosition.ToVector3D(); |
| | | var center = (sv + ev) * 0.5d; |
| | | var direction = (ev - sv); |
| | | var length = direction.Length; |
| | |
| | | //水泵管道 |
| | | MeshBuilder builder = new MeshBuilder(); |
| | | builder.AddTube( |
| | | path: new[] { this.Vmo.StartPosition.ToPoint3D(), this.Vmo.EndPosition.ToPoint3D() }, |
| | | path: new[] { this.StartPosition, this.EndPosition }, |
| | | diameter: diameter, // 线直径(3D空间单位) |
| | | thetaDiv: 8, // 横截面细分度 |
| | | false |
| | |
| | | diameter: diameter * 1.5d, |
| | | thetaDiv: 16); |
| | | |
| | | double bladeWidth = diameter * 2d; |
| | | double bladeLength = length * 0.6d; |
| | | |
| | | // 创建两个交叉的叶片 |
| | | for (int i = 0; i < 2; i++) |
| | | { |
| | | var rotation = new RotateTransform3D( |
| | | new AxisAngleRotation3D(direction, i * 90)); |
| | | |
| | | // 叶片1 |
| | | var p1 = center + rotation.Transform(new Vector3D(-bladeLength / 2, -bladeWidth / 2, 0)); |
| | | var p2 = center + rotation.Transform(new Vector3D(bladeLength / 2, -bladeWidth / 2, 0)); |
| | | var p3 = center + rotation.Transform(new Vector3D(bladeLength / 2, bladeWidth / 2, 0)); |
| | | var p4 = center + rotation.Transform(new Vector3D(-bladeLength / 2, bladeWidth / 2, 0)); |
| | | |
| | | builder.AddQuad(p1.ToPoint3D(), p2.ToPoint3D(), p3.ToPoint3D(), p4.ToPoint3D()); |
| | | } |
| | | |
| | | var geometry = builder.ToMesh(); |
| | | this.MeshGeometry = geometry; |
| | | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 更新变换矩阵 |
| | | /// </summary> |
| | | public override void UpdateTransform() |
| | | { |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | } |