[英]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.