结合C#创建模型
圆更复杂
每三个点拼接一个面,尽可能多的点表现
圆上的点需要公式计算,c#代码计算出规则的点位置
复杂模型的建模过程
1、使用C#代码来计算出规则的表面点位置,以及组织面域
2、利用专业建模工具,比如SolidWorks、3DMax、Blender、UE、AutoCAD等等,建模后导出特定格式,再将这特定格式的模型加载到WPF程序里
WPF不是不可以做成建模工具,
原则上是可以的,但是需要涉及到算法、处理功能比较多了
c#创建模型写法

隐藏掉窗口里面的面
<ModelUIElement3D Visibility="Collapsed">,隐藏也不占空间
父类增加Name属性,
<Viewport3D Name="viewport">
用于后台使用
this.viewport.Children.Add(modelUIElement3D);
构造函数里面调用
CreateGeometryModel3D();


利用Cos和Sin来确定半径的坐标xy

确定三个点,都利用中心点来连线

代码
public void CreateGeometryModel3D() { ModelUIElement3D modelUIElement3D = new ModelUIElement3D(); GeometryModel3D model3D = new GeometryModel3D(); modelUIElement3D.Model = model3D; MeshGeometry3D mesh = new MeshGeometry3D(); double radius = 10; int p_count = 72; int angle = 360 / p_count;// 每两个点的相隔角度 mesh.Positions.Add(new Point3D(0, 0, 0)); for (int i = 1; i <= p_count; i++) { double x = radius * Math.Cos(angle * i * Math.PI / 180); double y = radius * Math.Sin(angle * i * Math.PI / 180); mesh.Positions.Add(new Point3D(x, y, 0)); if (i > 1) { mesh.TriangleIndices.Add(0); mesh.TriangleIndices.Add(i); mesh.TriangleIndices.Add(i - 1); } } mesh.TriangleIndices.Add(0); mesh.TriangleIndices.Add(1); mesh.TriangleIndices.Add(p_count); model3D.Geometry = mesh; DiffuseMaterial diffuseMaterial = new DiffuseMaterial(); diffuseMaterial.Brush = Brushes.OrangeRed;//材质 model3D.Material = diffuseMaterial; model3D.BackMaterial = diffuseMaterial;//BackMaterial:背面材质 this.viewport.Children.Add(modelUIElement3D); }
浙公网安备 33010602011771号