繁体   English   中英

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

[英]Helix 3d toolkit, get the position of a model

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

要获得 Matrix3D 的位置,您必须使用 Offset 属性:

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

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

这是让转换回来:

Transform3D mytransform = sourceobject.Transform;
                        Console.WriteLine(mytransform.Value.OffsetX + "," + mytransform.Value.OffsetY+"," + mytransform.Value.OffsetZ);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM