วันเสาร์ที่ 20 ธันวาคม พ.ศ. 2557

สร้าง พื้น FLOOR ใน Revit

การสร้างพื้น จะซับซ้อน นิดหนึ่ง เนื่องจาก Floor เป็น System Family โดยที่ต้องมี Boundary จึงจะสร้าง ได้
ใน Code เป็นตัวอย่างการสร้าง พื้น8เหลี่ยม จะมีการสร้าง profile ก่อน  แล้วจึงเลือก พื้น

 public static void BatchCreateFloor(XYZ pt, Autodesk.Revit.DB.Document doc, Level level)
        { // ค้นเฉพาะพื้น
            List<FloorType> fl = listFloor(doc);
            int floorsides=8;// แปดเหลี่ยม
             CurveArray profile = new CurveArray();
            XYZ location=pt;
            double floorradius=m2f(5);// รัศมี 5 เมตร
        for (int i = 0; i < floorsides; i++)
        {
            double curAngle = i * Math.PI / floorsides * 2;
            double nextAngle = (i < floorsides - 1 ? i + 1 : 0) * Math.PI / floorsides * 2;

            XYZ curVertex = new XYZ(location.X + floorradius * Math.Cos(curAngle), location.Y + floorradius * Math.Sin(curAngle), location.Z);
            XYZ nextVertex = new XYZ(location.X + floorradius * Math.Cos(nextAngle), location.Y + floorradius * Math.Sin(nextAngle), location.Z);
            Line line =  Line.CreateBound(curVertex,nextVertex);
              
            profile.Append(line);
        }
            // เลือก
            Autodesk.Revit.Creation.Document creation_doc = doc.Create;
            // เอาตัวแรกมาวาด         
            creation_doc.NewFloor(profile, fl[0],level,true);
        }
        static List<FloorType> listFloor(Autodesk.Revit.DB.Document doc)
        {
            List<FloorType> m_FlTypeCollection = new List<FloorType>();

            FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
            filteredElementCollector.OfClass(typeof(FloorType));// กรองเฉพาะ พื้น
            m_FlTypeCollection = filteredElementCollector.Cast<FloorType>().ToList<FloorType>();

            return m_FlTypeCollection;
        }

        


ไม่มีความคิดเห็น:

แสดงความคิดเห็น