[在此处输入图像描述]在我的模型中有一个框架元素,我正在计算该元素的边缘,但元素被旋转并且具有不同的面部方向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;
}
我希望边缘在相对坐标中以及仅在二维空间中。防爆。 <(0,0);(0,4);(4,4)(4,0)>一个大小为4 * 4的框架方形元素
This is the picture of the framing element Which has cuts not openings.
我对你的要求知之甚少。然而,最重要的方面似乎是你在3D空间中有一个形状,实际上希望对它进行2D分析。为此,如果您可以先摆脱多余的维度,分析和解决问题显然要简单得多。使用适当的投影可以很容易地实现这一点。我很久以前在analysing 3D Polygon Areas时遇到过类似的任务。由于我已经有一个确定2D Polygon Areas and Outer Loops的解决方案,我将3D问题投影到2D中,参见在GetPolygonPlane
的module CmdWallProfileArea.cs中的方法The Building Coder samples。