如何在C#中将结构数组转换为Point3D对象数组?

时间:2009-05-21 20:04:59

标签: c# struct

我打算形成3D网格物体。 网格对象具有大约的3D点阵列。 50.000项。 由于3D点的数量,必须在堆上初始化数组。

不久,所需的代码如下:

class MyMesh
{
    public MeshGeometry3D Mesh3D  // Properties tanimlaniyor
    {
        get { return GetMesh3D(); }
    }

    public struct mystruct
    {
        public int m_i;
        public int m_j;
        public int m_k;

        public mystruct(int i, int j, int k)
        {
            m_i = i;
            m_j = j;
            m_i = k;
        }
    }

    private mystruct[] mypts = 
    {
        new mystruct(20 , 7 , 7),   
        .
        .
        new mystruct(23 , 5 , 7)     
    };
}

您能解释一下上面mystruct中的3D坐标是如何转换的 进入System.Windows.Media.Media3D.Point3D结构的3D坐标。

提前致谢。

ÖnerYILMAZ

3 个答案:

答案 0 :(得分:2)

如果您有50,000个mystruct个对象的实际列表,那么首先将它们创建为Point3D个结构会更好吗?

只需执行“查找和替换”:

  

新的mystruct(

并将其替换为

  

新Point3D(

然后,改变:

private mystruct[] mypts = 

为:

private Point3D[] mypts =

答案 1 :(得分:0)

你在找这样的东西......

List<Point3D> points = mypts.Select<mystruct, Point3D> (x => 
                                      new Point3D(x.m_i, x.m_j, x.m_k))
                            .ToList();

或者,您可以公开一个返回IEnumerable的迭代器...

public IEnumerable<Point3D> Points()
{
    foreach(var point in mypts)
    {
        yield return new Point3D(point.m_i, point.m_j, point.m_k, );
    }
}

[根据需要添加验证/错误处理代码]

答案 2 :(得分:-1)

如果您需要保留mystruct对象以及启用Point3D功能,您可以使用以下内容:

class MyMesh {
    ...

    public Point3D[] ToPoint3D()
    {
        Point3D[] p3D = null;   // or set it to an Empty Point3D array, if necessary

        if (mpts.Length > 0)
        {
            p3D = new Point3D[mpts.Length]

            for (int x = 0; x < mypts.Length; x++)
            {
                p3D[x].X = new Point3D(mypts[x].m_i;
                p3D[x].Y = new Point3D(mypts[x].m_j;
                p3D[x].Z = new Point3D(mypts[x].m_k;
            }
        }

        return p3D;
    }

    ...
}