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