Как преобразовать массив структур в массив объектов Point3D в C #? - PullRequest
0 голосов
/ 22 мая 2009

Я намерен сформировать трехмерный объект-сетку. Сетчатый объект имеет трехмерный точечный массив ок. 50.000 наименований Из-за количества трехмерных точек массив должен быть инициализирован в куче.

Требуемый код вкратце выглядит следующим образом:

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 выше? в трехмерные координаты System.Windows.Media.Media3D.Point3D структуры.

Заранее спасибо.

Öner YILMAZ

Ответы [ 3 ]

2 голосов
/ 22 мая 2009

Если у вас есть фактический список из 50 000 mystruct объектов, было бы лучше просто создать их как Point3D структуры в первую очередь?

Просто выполните «Найти и заменить»:

новый mystruct (

и замените его на

новый Point3D (

Затем измените:

private mystruct[] mypts = 

до:

private Point3D[] mypts =
0 голосов
/ 22 мая 2009

Вы ищете что-то подобное ...

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, );
    }
}

[добавить соответствующий код проверки / обработки ошибок]

0 голосов
/ 22 мая 2009

Если вам нужно сохранить объекты 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;
    }

    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...