lixiaojun
6 天以前 059775ffcf3daa5bbb97725cfbdac3ead03fcb70
Yw.WpfUI.Hydro.L3d.Core/03-logical/01-visual/02-link/02-pump/LogicalPump3D.cs
@@ -35,8 +35,10 @@
            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;
@@ -57,24 +59,22 @@
            {
                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);
@@ -87,8 +87,8 @@
                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;
@@ -97,7 +97,7 @@
            //水泵管道
            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
@@ -111,28 +111,21 @@
                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()
        {
        }
    }
}