【问题标题】:Helix 3d toolkit, get the position of a modelHelix 3d 工具包,获取模型的位置
【发布时间】:2020-08-10 14:54:59
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-26
        • 2013-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多