如何通过 API 将类别/图形样式“<Invisible lines>”分配到标题栏的边缘

问题描述 投票:0回答:1

我正在以编程方式定义标题栏系列,并且尝试使标题栏系列模板中包含的图纸边缘不可见。我希望当图纸导出为 DWG 格式时边缘保持不可见。

我发现可以通过手动编辑标题栏系列并将类别“”分配到图纸边缘来实现此目的,但我无法以编程方式执行此操作。

我正在从标题块系列模板创建一个 Document 对象,并检索其第一个 ViewSheet 对象,如下所示:

Document = Application.uiApplication.Application.NewFamilyDocument(TITLEBLOCK_FAMILY_TEMPLATE);
ViewSheet = new FilteredElementCollector(tbFamilyDoc)
    .OfClass(typeof(ViewSheet))
    .Cast<ViewSheet>()
    .First();

我认为我需要设置相关线条的“LineStyle”属性,我打算使用以下代码来完成此操作,但它需要一个我无法获取的 GraphicsStyle 对象。

var lines = new FilteredElementCollector(Document, ViewSheet.Id)
    .WhereElementIsNotElementType()
    .OfClass(typeof(CurveElement))
    .Cast<CurveElement>()
    .ToList()
    .ForEach(line => line.LineStyle = graphicsStyleInvisibleLines)

我认为这个对象应该使用类别类别的“GetGraphicsStyle”方法来检索。我使用了插件“RevitLookup”来查看相应类别的数据,该类别似乎也称为“”并且 ID 为 -2000064。

BuiltInCategory 集合包含值“OST_InvisibleLines”,该值的整数值等于上面的 ID,但是当我运行以下命令时,它返回 null。

Category invisibleLinesCat = Document.Settings.Categories.get_Item(BuiltInCategory.OST_InvisibleLines);

RevitLookup 还向我显示,父类别的名称为“内部对象样式”,ID 为 -2000059。我再次找到了一个具有匹配名称和整数值的BuiltInCategory值:“OST_IOS”。我尝试获取此父类别,然后使用下面的行导航到所需的子类别,但它也返回 null。

Category internalCat = Document.Settings.Categories.get_Item(BuiltInCategory.OST_IOS);

有人知道如何获取对此类别或其 GraphicsStyle 对象的引用吗?

提前感谢您的宝贵时间。

c# .net revit-api
1个回答
0
投票

您应该能够像查询线条一样查询这些线条样式。以下对我有用:

var graphicsStyles = new FilteredElementCollector(Document)
    .WhereElementIsNotElementType()
    .OfClass(typeof(GraphicsStyle))
    .Cast<GraphicsStyle>()
    .ToList();

var lineStyle = graphicsStyles.FirstOrDefault(x => x.Name == "<Invisible lines>");

if (lineStyle != null)
{
    using (var t = new Transaction(Document, "update line type"))
    {
        t.Start();
        lines.ForEach(line => line.LineStyle = lineStyle);
        t.Commit();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.