我尝试了一些可能性,但我无法做到正确。在 上,我从选定的面SelectionChanged
创建一个。plane
这很好,我可以plane
正确获得。
var item = e.AddedItems[0];
if (item is Model.SelectedFace)
{
var faceItem = ((Model.SelectedFace)item);
var ent = faceItem.Item;
if (ent is Brep)
{
var sol = (Brep)ent;
if (faceItem.ShellIndex == 0)
{
var mesh = sol.Faces[faceItem.Index].ConvertToMesh();
var plane = new Plane(mesh.Vertices[0], mesh.Vertices[1], mesh.Vertices[2]);
}
}
}
xyTheta, xzTheta, and yzTheta
所选面之间的和plane
被Plane.XY, Plane.XZ, & Plane.YZ
正确计算。出于这个问题的目的,我只显示xyTheta
如下(我已经尝试过使用它,Transformation Matrix
但它也不能很好地工作。因此它的目的只是让我检查两个平面之间的角度是否正确。
var x0 = plane.Equation.X; var y0 = plane.Equation.Y; var z0 = plane.Equation.Z;
var x1 = Plane.XY.Equation.X; var y1 = Plane.XY.Equation.Y; var z1 = Plane.XY.Equation.Z;
xyTheta = Math.Acos(Math.Abs(x0 * x1 + y0 * y1 + z0 * z1)
/ (Math.Sqrt(x0 * x0 + y0 * y0 + z0 * z0)
* Math.Sqrt(x1 * x1 + y1 * y1 + z1 * z1)));
我的转型transXY
只能做Translation
正确的,但不能正确的Rotation
。例如,转换后,我的对象在 和 之间仍然有 10 度的差异plane
,Plane.XY
尽管它被移动了。
transXY = new Transformation();
transXY.Rotation(plane, Plane.XY);
// transXZ = new Align3D(plane, Plane.XZ);
foreach (Entity ent in theModel.Entities)
{
ent.TransformBy(transXY);
}