RevitAPI: 如何在族裏面創建一條帶顏色的二維線?

我們知道,手工創建一條帶顏色的線過程如下:

  1. 新建族,例如,使用模板“Generic Annotation.rft”
  2. 點擊菜單“創建” > “直線”,畫一條線
  3. 選中該線,“管理” > ”對象樣式",可以看見裏面有多個類別
  4. 選中“常規註釋”,修改子類別的“新建”按鈕高亮,點擊“新建”,新建一個子類別,並設置顏色和線寬
  5. 關閉窗口,再次選擇該線
  6. 在“修改|線”,子類別下面的多選框中就出現了我們新建的子類別,可以選擇它。至此帶顏色的線創建完成。

那麼這個過程在API中應該怎麼實現呢?

  1. 首先,我們畫的線是DetailLine,所以,應該使用Document.FamilyCreate.NewDetailCurve方法來創建。
  2. 而設置線形可以使用DetailLine.LineStyle屬性。
  3. 創建子類別使用Categories.NewSubcategory(Category parentCategory, string name)方法。
  4. 目前唯一的問題就剩下NewSubcategory裏面的參數parentCategory是什麼了。
這裏可以藉助RevitLookup工具,既然該線有LineSylte屬性,我們就不妨看看它自己的Category是什麼,選中線,執行RevitLookup > Snoop Current Selection...:



這裏OST_GenericAnnotation對應的就是上一張圖中的“常規註釋”了,所以,通過Categories.get_Item(BuiltInCategory.OST_GenericAnnotation)就能獲得該類別了。

綜上,代碼如下,注意把它放到Transaction裏面執行:
public void CreateSubCategoryAndDetailLine(Document doc)
{
    var categories = doc.Settings.Categories;
    var subCategoryName = "MySubCategory";
    Category category = doc.Settings.Categories.
        get_Item(BuiltInCategory.OST_GenericAnnotation);
    Category subCategory = null;
    if (!category.SubCategories.Contains(subCategoryName))
    {
        subCategory = categories.NewSubcategory(category, 
            subCategoryName);
        var newcolor = new Color(250, 10, 0);
        subCategory.LineColor = newcolor;
        subCategory.SetLineWeight(10, GraphicsStyleType.Projection);
    }
    else
        subCategory = category.SubCategories.get_Item(subCategoryName);

    Line newLine = Line.CreateBound(
        new XYZ(0, 1, 0), new XYZ(-1, 0, 0));
    var detailLine = doc.FamilyCreate.NewDetailCurve(
        doc.ActiveView, newLine);
    detailLine.LineStyle = subCategory.GetGraphicsStyle(
        GraphicsStyleType.Projection);
}

執行的結果:

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