如何在Revit中旋转家庭实例

时间:2019-04-03 12:48:05

标签: c# revit-api

[在此处输入图像描述]在我的模型中,有一个框架元素,并且我正在计算该元素的边缘,但该元素已旋转,并且具有不同的面朝向,例如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.

1 个答案:

答案 0 :(得分:0)

我几乎听不懂你的要求。但是,最重要的方面似乎是您在3D空间中具有形状,并且实际上希望对其执行2D分析。为此,如果您首先可以摆脱多余的维度,那么分析和解决问题显然要简单得多。使用适当的投影可以轻松实现。我早在analysing 3D Polygon Areas时就面临过类似的任务。由于我已经有了确定2D Polygon Areas and Outer Loops的解决方案,因此我将3D问题投影到2D中,请参见。 module CmdWallProfileArea.csThe Building Coder samples中的方法GetPolygonPlane