Helix 3d工具包,获取模型的位置

时间:2017-03-11 16:05:34

标签: c# wpf helix-3d-toolkit

我有一个螺旋工具包项目,在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的位置? 感谢。

2 个答案:

答案 0 :(得分:0)

要获取Matrix3D的位置,您必须使用偏移属性:

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

答案 1 :(得分:0)

将近3年后,也许不是您,但是其他人可能会遇到此问题。这是我的解释。

如果使用转换属性创建了Model3D,则可以使用OffsetX,OffsetY,OffsetZ。但是,如果您仅使用中心属性创建BoxVisual3D,则其中不会包含任何变换。因此,您无法达到目标。使用transform属性创建对象。另一个问题是在指定的Point3D中创建对象。这是我的代码:

library(data.table)
df <- fread("
      Customer    Product
   1           A
   1           B
   1           C
   2           D
   2           E
   2           F
   3           A
   3           B
   3           D
   4           A
   4           B")

这是找回转换:

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