namespace Yw.WpfUI.Hydro { /// /// 虚拟管道抽象绘制器 /// internal class VipeLogicalDrawer : VipeDrawer { /// /// /// public VipeLogicalDrawer(VipeL3d vipe) : base(vipe) { } //初始化 protected override void Initialize() { var htmlColor = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Link.HtmlColor; if (!string.IsNullOrEmpty(htmlColor)) { this.HtmlColor = htmlColor; } var opacity = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Link.Opacity; if (opacity.HasValue) { this.Opacity = opacity.Value; } var scale = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Link.Scale; if (scale.HasValue) { this.Scale = scale.Value; } var visible = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Link.Visible; if (visible.HasValue) { this.Visible = visible.Value; } var diameter = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Link.Diameter; this.Diameter = diameter; } //绘制模型 protected override Model3D DrawModel() { var model = new GeometryModel3D(); model.Material = DrawMaterialHelper.GetMaterial(this.HtmlColor, this.Opacity); if (this.StartPosition.HasValue && this.EndPosition.HasValue) { double diameter = this.Diameter * this.Scale; MeshBuilder builder = new MeshBuilder(); builder.AddTube( path: new[] { this.StartPosition.Value, this.EndPosition.Value }, diameter: diameter, // 线直径(3D空间单位) thetaDiv: 8, // 横截面细分度 false ); model.Geometry = builder.ToMesh(); } return model; } } }