簡體   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