结合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);
}

 

posted on 2025-03-30 13:07  张彦山  阅读(58)  评论(0)    收藏  举报