Я пробовал несколько вариантов, но не мог понять это правильно. 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);
}