我有一个螺旋工具包项目,在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的位置? 感谢。
答案 0 :(得分:0)
要获取Matrix3D的位置,您必须使用偏移属性:
public static Point3D GetPosition(this Matrix3D m)
{
return new Point3D
{
X = m.OffsetX,
Y = m.OffsetY,
Z = m.OffsetZ
};
}
答案 1 :(得分:0)
将近3年后,也许不是您,但是其他人可能会遇到此问题。这是我的解释。
如果使用转换属性创建了Model3D,则可以使用OffsetX,OffsetY,OffsetZ。但是,如果您仅使用中心属性创建BoxVisual3D,则其中不会包含任何变换。因此,您无法达到目标。使用transform属性创建对象。另一个问题是在指定的Point3D中创建对象。这是我的代码:
library(data.table)
df <- fread("
Customer Product
1 A
1 B
1 C
2 D
2 E
2 F
3 A
3 B
3 D
4 A
4 B")
这是找回转换:
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);