Graphic Style
Главная › Форумы › Python › Revit Library (API) › Graphic Style
- В этой теме 1 ответ, 2 участника, последнее обновление 6 лет, 8 месяцев назад сделано Дмитрий.
-
АвторСообщения
-
Обмен опытом.
Сегодня расскажу как работать в python с Graphic style (revit API). Создадим новый стиль линии или заменим параметры у готового стиля.
Для начала нам нужно получить категорию Линии (именно саму категорию):
categories = doc.Settings.Categories # получаем все категории
lineCat = categories.get_Item(BuiltInCategory.OST_Lines ) # из всех категорий выбираем категорию линий (о чем свидетельствует OST_Lines)
Все стили линий лежат в так называемой субкатегории:
lineStyleSubTypes = lineCat.SubCategories
можно убедиться и вывести их имена OUT = [i.Name for i in lineStyleSubTypes]Теперь рассмотрим 2 ситуации, когда нужно создать новый стиль линии или изменить свойства уже существующего стиля.
Создадим новый стиль:
newLineStyleCat = categories.NewSubcategory(lineCat, name ) # где name любое произвольное имя (например, “Новая линия”)Далее меняем свойства, например толщину:
newLineStyleCat.SetLineWeight( weight, GraphicsStyleType.Projection ) # где weigth – целочисленное значение в пределах от 1 до 12 (верхний предел не проверял))или цвет:
color1 = [125, 0 ,25] # R, G, B
DSColor = DSCore.Color.ByARGB(255,color1[0], color1[1], color1[2]) # Создается Dynamo Color ! для этого нужна библиотека DSCoreNodes
newLineStyleCat.LineColor = Autodesk.Revit.DB.Color(DSColor.Red, DSColor.Green, DSColor.Blue )
не уверен, что это правильное решение, но оно работает. (также можно посмотреть тему color в Tips and Tricks, где создается сразу ревит цвет)или паттерн:
паттерны линий можно выбрать различными способами
1) с помощью нода Line Patterns (можно увидеть в скрипте, ссылка внизу)
2) c помощью перебора всех паттернов в проекте и сравнения с нужным именем
3) или получения паттерна по имени с помощью команды, например:
patternLine = Autodesk.Revit.DB.LinePatternElement.GetLinePatternElementByName(doc, “Штрих”) # будьте внимательны, если используете англ. версию ревитаЕсли стиль линии уже существует, то сперва нам нужно получить его, например по имени:
for s, p in zip(lineStyleSubTypes, namesLineStyle):
TAB__ if name == p: # Если линия с таким именем уже есть , то
TAB__TAB__s.SetLineWeight( weight, GraphicsStyleType.Projection ) # изменим толщину
остальные команды (приведенные выше) работают также.
ОБРАЩАЮ ВНИМАНИЕ!! Если линии уже были нарисованы в проекте, то после изменения свойств стиля, они сразу не изменяются!!
Для перерисовки экрана достаточно два раза нажать лампочку “Показать скрытые элементы”
Скрипт можно скачать сами знаете где ))
Всем удачи!!P.S. К сожалению я не знаю как “сбросить” паттерн, чтобы линия была сплошная. И паттерна с таким именем “Сплошная” тоже нет.
У кого есть какие идеи подсказывайте.P.S.2 Переименовать существующий стиль из revit API нельзя (гуру не нашли способов).
Тут выход следующий:
– найти все линии в проекте с заданным стилем 1 (собрать)
– создать новый стиль 2 с параметрами как у стиля 1, но новым именем
– применить стиль 2 ко всем собранным элементам
– удалить стиль 1ДмитрийУчастникЕсть несколько вопросов:
- При рисовании линии детализации (DetailCurve.ByCurve) возможно ли выбирать стиль линии, так как при рисовании этим методом стиль линии задается по умолчанию.
- Если сразу при рисовании невозможно указать стиль линии, то как возможно изменить стиль в уже созданных линиях детализации. В примере объясняется как создавать и видоизменять стили линий, а здесь задача указать нужный стиль для конкретной линии.
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.