我打算形成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
答案 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;
}
...
}