Graphic Style

Помечено: ,

Просмотр 2 сообщений - с 1 по 2 (из 2 всего)
  • Автор
    Сообщения
  • #6370 Score: 2
    Legantmar
    Хранитель
    474 pts

    Обмен опытом.
    Сегодня расскажу как работать в 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

    #7603 Score: 0
    Дмитрий
    Участник

    Есть несколько вопросов:

    1. При рисовании линии детализации (DetailCurve.ByCurve) возможно ли выбирать стиль линии, так как при рисовании этим методом стиль линии задается по умолчанию.
    2. Если сразу при рисовании невозможно указать стиль линии, то как возможно изменить стиль в уже созданных линиях детализации. В примере объясняется как создавать и видоизменять стили линий, а здесь задача указать нужный стиль для конкретной линии.
Просмотр 2 сообщений - с 1 по 2 (из 2 всего)
  • Для ответа в этой теме необходимо авторизоваться.