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