一、草圖編輯
草圖編輯在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等方法)也需要使用到草圖平面和輪廊。
=========【更多高級應用請關注公衆號】========
==================================