在Revit中创建一个新的SubCategory LineStyle

时间:2014-06-20 14:06:43

标签: c# revit-api

我创建了一些代码,用于收集Revit中现有“Line Styles”的列表。

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

杰里米·塔姆米克(Jeremy Tammik)写了一篇关于在这里检索所有线条的帖子:http://thebuildingcoder.typepad.com/blog/2013/08/retrieving-all-available-line-styles.html。这可能有助于更详细地解释一些linestyle类别的东西。

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

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