Набор инструментов Helix 3d, получить положение модели

У меня есть проект набора инструментов Helix в WPF, Visual Studio 2015. Используя пример RectSelection У меня есть 3D-просмотр, в котором я могу выбирать свои объекты, которые BoxVisual3D. Что мне нужно сделать, это вернуть 3D-позицию выбранный объект. У меня есть:

  foreach (var model in models)
            {
                var geometryModel = model as GeometryModel3D;
                if (geometryModel != null)
                {
                    geometryModel.Material = geometryModel.BackMaterial = material;


                    //do stuff 
                    UserControl1.Point1Position = model.Transform; 

                    UserControl1.returnPoint.X = model.Transform.Value.M14;
                    UserControl1.returnPoint.Y = geometryModel.Transform.Value.M24;
                    UserControl1.returnPoint.Z = geometryModel.Transform.Value.M34;
                }
            }

Но значения всегда возвращаются как 0. (Я сам создаю коробку, поэтому знаю, что они не 0). Когда я прохожу, есть выбранный объект, но преобразование читается как все нули. Как я могу получить позицию BoxVisual3D? Спасибо.


person anti    schedule 11.03.2017    source источник


Ответы (2)


Чтобы получить положение Matrix3D, вы должны использовать свойства смещения:

public static Point3D GetPosition(this Matrix3D m)
{
    return new Point3D
    {
        X = m.OffsetX,
        Y = m.OffsetY,
        Z = m.OffsetZ
    };
}
person egse    schedule 14.03.2017

Спустя почти 3 года, возможно, не вы, а кто-то другой может столкнуться с этой проблемой. Вот мое объяснение.

Если вы создали Model3D с атрибутом преобразования, вы можете использовать OffsetX, OffsetY, OffsetZ. Но если вы только что создали свой BoxVisual3D с центральными атрибутами, в нем не будет преобразования. Следовательно, вы просто не можете добраться до него. Создайте свои объекты с атрибутом преобразования. И еще вопрос создания объекта в указанном Point3D. Вот мой код:

my_point = new Point3D(-15,7,5);  
            var myTransform = new Transform3DGroup();
            
            TranslateTransform3D myTranslate = new TranslateTransform3D(my_point.X, my_point.Y, my_point.Z);


            myTransform.Children.Add(myTranslate);
            kontrol.Transform = myTransform; //ez
           
            myModel.Children.Add(kontrol); 

А вот и возвращение Transform:

Transform3D mytransform = sourceobject.Transform;
                        Console.WriteLine(mytransform.Value.OffsetX + "," + mytransform.Value.OffsetY+"," + mytransform.Value.OffsetZ);
person B.Voldi    schedule 10.08.2020