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);
}

执行的结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值