1

我创建了收集 Revit 中现有“线型”列表的代码。

List<Category> All_Categories = doc.Settings.Categories.Cast<Category>().ToList();
Category Line_Category = All_Categories[1];
foreach (Category one_cat in All_Categories) { if (one_cat.Name == "Lines") { Line_Category = one_cat;} }
if (Line_Category.CanAddSubcategory)
{
      CategoryNameMap All_Styles = Line_Category.SubCategories; List<string> Line_Styles = new List<string>();
      foreach (Category one_category in All_Styles) { if (one_category.Name.Contains("CO_NAME")) {Line_Styles.Add(one_category.Name); } }
                TaskDialog.Show(Line_Styles.Count.ToString() + " Current Line Styles", List_To_Dialog(Line_Styles));
}

这将获取线条样式列表,但是当我尝试时: Category New_Line_Style = Line_Category.NewSubCategory.... Visual Studio 告诉我没有 NewSubCategory 的定义

谁能告诉我如何创建一个新的“线条”子类别,或者我在上面的代码中做错了什么?

注意:我发现了主要问题。我试图将子类别添加到我的变量 Line_Category (它本身就是一个类别,应该是一个父类别)。我还尝试将子类别添加到 All_Categories(它已被转换为列表而不是 CategoryNameMap)。

当我添加一个未强制转换的变量时,NewSubCategory 变得可用。但是,现在我无法看到如何设置与我的新样式关联的线条模式——我在网上找到的唯一示例建议使用 New_Line_Style.LinePatternId,但这不在我的新子类别的可用选项列表中。有没有办法设置创建新子类别时使用的默认模式?

4

1 回答 1

1

Jeremy Tammik 在这里写了一篇关于检索所有线条样式的文章:http: //thebuildingcoder.typepad.com/blog/2013/08/retrieving-all-available-line-styles.html。这可能有助于更详细地解释一些线型类别的东西。

这是另一个很好的链接,询问相同的问题以及如何使用 VB 解决它:http: //thebuildingcoder.typepad.com/blog/2013/08/retrieving-all-available-line-styles.html。这是适用于新线条样式的 C# 版本的 VB 代码:

UIApplication app = commandData.Application;
UIDocument uidoc = app.ActiveUIDocument;
Document ptr2Doc = uidoc.Document;

Category lineCat = ptr2Doc.Settings.Categories.get_Item(BuiltInCategory.OST_Lines);
Category lineSubCat;
string newSubCatName = "NewLineStyle";
Color newSubCatColor = new Color(255, 0, 0);  //Red

try
{
  using (Transaction docTransaction = new Transaction(ptr2Doc, "hatch22 - Create SubCategory"))
  {
    docTransaction.Start();
    lineSubCat = ptr2Doc.Settings.Categories.NewSubcategory(lineCat, newSubCatName);
    lineSubCat.LineColor = newSubCatColor;
    docTransaction.Commit();
  }
}
catch (Exception ex)
{
  MessageBox.Show(ex.ToString());
}
于 2014-06-21T17:21:16.857 回答