RevitAPI之草圖及草圖平面

一、草圖編輯

草圖編輯在Revit中被廣泛用於創建各種元素,包括繪製和修改模型的形狀。

沒有用於創建元素的繪製形狀的繪畫也屬於草圖編輯,例如,用鼠標移動的操作畫一根曲線,在已經創建好的樓板上繪製褶皺來修改樓板的幾何形狀等。

草圖編輯在用戶界面上有專門的窗口區域,不同的元素提供不同的繪製草圖的工具集,標準的工具集一•般有兩種:

①、繪製形狀的工具:直線,曲線,圓,多邊形,橢圓,樣條曲線。 
②、拾取已有幾何圖形來創建形狀的工具——線,面拾取等。
 
草圖編輯需要在一個表面上繪製形狀,當這個表面爲平面時稱之爲草圖平面(SketchPlane)。草圖平面也可以理解成以下幾種情形:
•用戶界面的工作平面或者詳圖元素的視圖平面。
•標高或者其他的由草圖編輯工具所決定的平面。
•元素約束條件所決定的表面。
•鼠標光標所在區域的一個幾何面。

草圖平面在API中被用於創建草圖相關的元素,如模型線;或者用於創建擁有草圖屬性的元素,如構建的實體。草圖平面可以從已存在的元素或者從幾何面、平面創建。 

注意:
創建元素時傳入的草圖平面未必就是這個元素的實際草圖平面,如果傳入的草圖平面已經被其他用途使用了,Revit就會尋找或者創建一個新的在幾何上對等的草圖平面。
一些草圖平面只適合於用在創建詳圖元素上,比如那些從詳圖曲線獲取到的草圖平面,當被用在其他類型的元素上時,將會導致創建失敗。

創建草圖平面的方法在Autodesk.Revit.DB.SketchPlane類裏,三個重載方法如表所示。

方法

描述

public static SketchPlane Create(Document document, ElementId datumId);

從網格、引用平面或者標高等元素創建一個草圖平面

public static SketchPlane Create(Document document, Reference planarFaceReference);

從一個幾何平面創建一個草圖平面

public static SketchPlane Create(Document document, Plane plane);

從一個幾何平面的引用創建一個草圖平面


例子1:要從文檔中找到名字爲“Ref.Level”的標高,以此創建了一個新的草圖平面,然後用幾何點爲(0, 0, 0)到點(10, 10, 0)的直線創建了一條模型曲線,可以使用以下代碼:

 public void CreateModelCurve(Autodesk.Revit.DB.Document doc)
        {
            // 在族文檔中找到名字爲"Ref. Level"的標高 
            FilteredElementCollector collector = new FilteredElementCollector(doc);
            collector = collector.OfCategory(BuiltInCategory.OST_Levels);
            var levelElements = from element in collector
                                where element.Name == "Ref.Level"
                                select element;
            List<Autodesk.Revit.DB.Element> levels = levelElements.ToList<Autodesk.Revit.DB.Element>();
            if (levels.Count <= 0)
                return;

            Level refLevel = levels[0] as Level;

            // 創建一條几何直線,一個基於標高的草圖平面,然後在這個草圖平面上創建一條模型線.
            using (Transaction trans = new Transaction(doc, "Create model line."))
            {
                trans.Start();
                Line line = Line.CreateBound(XYZ.Zero, new XYZ(10, 10, 0));
                SketchPlane sketchPlane = SketchPlane.Create(doc, refLevel.Id);
                ModelCurve modelLine = doc.FamilyCreate.NewModelCurve(line, sketchPlane);
                trans.Commit();
            }
        }

例子2:創建一個原點爲座標原點(0, 0,0),法向量爲(0, 0, 1)的幾何平面,然後用這個幾何平面創建了對應的草圖平面,再在這個草圖平面上創建了一個圓心爲(0,0,0),半徑爲5的圓形的模型線。可以參考以下代碼:
public void CreateSketchPlaneByPlane(Autodesk.Revit.ApplicationServices.Application app, Autodesk.Revit.DB.Document doc)
        {
            using (Transaction trans = new Transaction(doc, "Create model arc."))
            {
                trans.Start();
                Plane plane = app.Create.NewPlane(XYZ.BasisZ, XYZ.Zero);
                SketchPlane sketchPlane = SketchPlane.Create(doc, plane);

                Arc arc = Arc.Create(plane, 5, 0, Math.PI * 2);
                ModelCurve modelCircle = doc.FamilyCreate.NewModelCurve(arc, sketchPlane);
                trans.Commit();
            }
        }

從一個幾何平面的引用來創建草圖平面的方法和上面兩個示例類似,需要在文檔中找到一個幾何平面,例如,一個幾何實體的平面(PlanarFace. Reference),然後將該平面的引用傳入即可。

二、草圖
草圖(Sketch)是個抽象的概念,由兩個最基本的屬性構成:草圖平面(SketchPlane)和輪廓(Profile)。

在UI用戶界面上,進人草圖編輯的繪圖區域後,草圖平面就默認設置好了,用戶只需要使用草圖編輯工具繪製輪廊就可以;
API中則需要用戶創建或者確定草圖平面,再提供相應的輪廊。上面的兩個示例中的端點爲(0,0,0)和(10,10,0)的直線;圓心爲(0,0,0)和半徑爲5的圓形(arc)就可以理解爲對應的輪廓。

下圖左邊部分是族文檔中的一個拉伸體(Extrusion),右邊部分是這個拉伸體的輪廊,爲四根首尾相連的直線構成的線組。
 

API從文檔中取到拉伸體及其草圖的示例參見以下代碼:
public void GetSketchFromExtrusion(Document doc,ElementId extrusionId)
        {
            Extrusion extrusion = doc.GetElement(extrusionId) as Extrusion;
            SketchPlane sketchPlane = extrusion.Sketch.SketchPlane;
            CurveArrArray sketchProfile = extrusion.Sketch.Profile;
        }

Revit中的三維模型,如拉伸(Extrusion)、融合(Blend )、旋轉(Revolution )、放樣 (Sweep)、放樣融合(SweepBlend),都使用到了草圖。不但在創建好的模型中可以獲取到它的草圖(Sketch屬性),而且在創建過程中(比如NewExtunsion等方法)也需要使用到草圖平面和輪廊。


=========【更多高級應用請關注公衆號】========


==================================


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章