[введите описание изображения здесь] В моей модели есть элемент кадрирования, и я рассчитываю края этого элемента, но элемент поворачивается и имеет разную ориентацию лица для ex (0,4, 0,6, 0,2).Мне нужна координата ребер элемента только в формате (x, y), но я получаю координаты в виде (x, y, z), где x может быть высотой, длиной или шириной.Как я могу получить координаты.
Я преобразовываю координаты ребер в относительную координату, вычитая точку расположения элемента
Я думал, что если я могу изменить лицоориентация элемента к (0, 0, 1), т.е. разместить его в плоскости Z, тогда все, что мне нужно сделать, это прочитать (X, y) ребер и сохранить его в списке.Если это правильный подход, подскажите, пожалуйста, как?Или, пожалуйста, предложите любой другой метод
private List<XYZ> GetFacesAndEdges(Element sheet)
{
//Location p1 = sheet.Location;
//FamilyInstance ins = sheet as FamilyInstance;
//Transform tra = ins.GetTransform();
//tra.BasisX = new XYZ(1, 0, 0);
//tra.BasisY = new XYZ(0, 1, 0);
//tra.BasisZ = new XYZ(0, 0, 1);
//Location p2 = ins.Location;
String faceInfo = "";
List<XYZ> points = new List<XYZ>();
Location p = sheet.Location;
XYZ point = new XYZ();
if (sheet?.Location is LocationPoint location)
{
point = location.Point;
}
Autodesk.Revit.DB.Options opt = new Options();
Autodesk.Revit.DB.GeometryElement geomElem = sheet.get_Geometry(opt);
foreach (GeometryObject geomObj in geomElem)
{
Solid geomSolid = geomObj as Solid;
if (null != geomSolid)
{
int faces = 0;
double totalArea = 0;
foreach(Edge e in geomSolid.Edges)
{
IList<XYZ> pointd = e.Tessellate();
foreach(XYZ ptr in pointd)
{
XYZ ptrXYZ = new XYZ(ptr.X - point.X , ptr.Y - point.Y, ptr.Z - point.Z);
points.Add(ptrXYZ);
}
}
}
}
return points;
}
Я хочу, чтобы края были в относительных координатах, а также только в двумерном измерении.Ex.<(0,0); (0,4); (4,4) (4,0)> A Квадратный элемент кадрирования размером 4 * 4
Это изображение элемента кадрированияКоторый имеет порезы, а не отверстия.