Создайте новую подкатегорию LineStyle в Revit

#c# #revit-api

#c# #revit-api

Вопрос:

Я создал код, который собирает список существующих «стилей линий» в 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));
}
 

Это возвращает список стилей строк, но когда я пытаюсь:
Категория New_Line_Style = Line_Category.NewSubCategory….
Visual Studio сообщает мне, что для NewSubCategory нет определения

Может кто-нибудь сказать мне, как создать новую подкатегорию «Строк» или что я делаю неправильно в приведенном выше коде?

ПРИМЕЧАНИЕ: я обнаружил основную проблему. Я пытался добавить подкатегорию в мою переменную Line_Category (которая сама по себе является категорией, которая должна быть родительской). Я также попытался добавить подкатегорию во All_Categories (которая была представлена в виде списка, а не CategoryNameMap).

Когда я добавил переменную, которая не была приведена, NewSubCategory стала доступной. Однако теперь я не могу понять, как установить шаблон строки, связанный с моим новым стилем — единственный пример, который я нашел в Интернете, предлагает использовать New_Line_Style .LinePatternId, но этого нет в списке доступных опций в моей новой подкатегории. Есть ли какой-нибудь способ установить шаблон по умолчанию, который будет использоваться при создании новой подкатегории?

Ответ №1:

Джереми Таммик написал сообщение о получении всех стилей строк здесь: 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 . Вот версия кода VB на C #, которая работала для нового linestyle:

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

Комментарии:

1. Спасибо за ответ ….. однако я должен был уточнить, что последний абзац моего вопроса на самом деле был частичным ответом. Я смог создавать стили строк. Однако все мои стили строк, с каким бы именем они ни были, отображаются в виде сплошного шаблона. Я смог изменить как цвет, так и вес линии, но все это бесполезно, если я не могу также изменить шаблон линии. Конечно, я могу изменить их «вручную» постфактум, но это сводит на нет большую часть цели создания программы, способной автоматически создавать серию стилей линий в зависимости от ситуации (бетон против стали) или клиента.