Шаблон (python)

Главная Форумы Python Dynamo Libraries Шаблон (python)

Помечено: 

В этой теме 5 ответов, 3 участника, последнее обновление  Dasko100500 5 мес., 1 неделя назад.

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)
  • Автор
    Сообщения
  • #2309 Score: 0

    Legantmar
    Хранитель
    440 pts

    Кто как создает новые скрипты?
    Я, до недавнего времени, создавал с чистого листа.
    Если нужны были какие-то библиотеки или фрагменты кода, копировал их из других наработок.
    И тут пришла мысль о создании универсальной заготовки, аля шаблона.
    Предлагаю в этой теме обсудить его концепцию.

    Мое предложение (скачать):

    #4003 Score: 4

    Legantmar
    Хранитель
    440 pts

    прошло много времени с создания первой “версии” шаблончика и пора представить шаблончик v.0.2

    внутри можно найти несколько полезных, часто используемых команд и почти исчерпывающий список подключаемых библиотек

    можно использовать как есть, но для конкретных задач лучше удалять неиспользуемые библиотеки

    #4529 Score: 0

    DimonRevit
    Участник

    Спасибо!

     

    #5658 Score: 5

    Legantmar
    Хранитель
    440 pts

    Для новичков несколько пояснений по библиотекам в шаблоне.

    # Подключение библиотеки Revit API для работы с элементами Revit'a
    clr.AddReference('RevitAPI') # RevitAPI.dll лежит как правило здесь C:\Program Files\Autodesk\Revit 2017
    import Autodesk
    from Autodesk.Revit.DB import * # импорт всех элементов, если к примеру нужны только стены, то * заменяется на Wall
    import sys
    pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib' # добавление пути к директории IronPython для использования его библиотек
    sys.path.append(pyt_path)
    # Использование библиотеки ProtoGeometry для геометрических фигур (точки, линии, окружности, дуги, кривые и пр.)
    clr.AddReference('ProtoGeometry') # ProtoGeometry.dll лежит здесь C:\Program Files\Dynamo\Dynamo Core\1.3
    from Autodesk.DesignScript.Geometry import *
    # Использование библиотеки DSCoreNodes (основные ноды расположенные на вкладке библиотеки слева в разделе Core)
    clr.AddReference("DSCoreNodes") # DSCoreNodes.dll лежит здесь C:\Program Files\Dynamo\Dynamo Core\1.3
    import DSCore
    clr.ImportExtensions(DSCore)
    from DSCore import *
    # Упрощенные ноды для работы с объектами Revit
    clr.AddReference("RevitNodes") # RevitNodes.dll лежит здесь C:\Program Files\Dynamo\Dynamo Revit\1.3\Revit_2017
    import Revit
    clr.ImportExtensions(Revit.Elements)
    from Revit.Elements import *
    clr.ImportExtensions(Revit.GeometryConversion) # позволяет конвертировать величины
    clr.ImportExtensions(Revit.GeometryReferences)
    # Для использования транзакций и работе с документом (doc)
    clr.AddReference("RevitServices") # RevitServices.dll лежит здесь C:\Program Files\Dynamo\Dynamo Revit\1.3\Revit_2017
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager
    doc = DocumentManager.Instance.CurrentDBDocument
    uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
    uiapp=DocumentManager.Instance.CurrentUIApplication
    app = uiapp.Application
    # Для работы с Excel из питона (если вы не используете сторонние пакеты)
    clr.AddReferenceByName('Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c')
    from Microsoft.Office.Interop import Excel
    System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo("en-US")
    from System.Runtime.InteropServices import Marshal
    # в некоторых случаях, при "глубоком погружении" в Revit API, нужны системные массивы System Array
    import System
    from System import Array
    from System.Collections.Generic import *
    # Прочие библиотеки
    import math # работа с математическими функциями (cos, sin, pi и пр.)
    import random # генерация случайных чисел
    import re # работа с регулярными выражениями

    но лучше их записывать как:
    from math import *
    в этом случае не нужно будет таскать приставку math.pi, а можно сразу использовать pi

    Для того чтобы не писать постоянно UnwrapElement() рекомендую использовать в шаблоне функцию:

    Если вы не знаете сколько будете подавать на вход элементов 1 или несколько, то рекомендую использовать вот эту запись:

    p.s. Вам не обязательно записывать все библиотеки в вашем скрипте, используйте только те, что вы используете для вашего скрипта.

    Ниже состав некоторых часто используемых библиотек:
    Protogeometry

    DSCoreNodes


    RevitNodes

    Revit Nodes продолжение

    #5659 Score: 4

    Legantmar
    Хранитель
    440 pts

    Совет:
    из-за использования записи вида:
    from Autodesk.Revit.DB import *
    и
    from DSCore import *
    может возникать конфликт для элементов с одинаковыми именами, например Color (ошибка AttributeError: ‘type’ object has no attribute ‘ByARGB’)
    т.к. есть Autodesk.Revit.DB.Color – это цвет Revit
    и есть DSCore.Color – это цвет Dynamo и они не равнозначны.

    В этом случае можно использовать следующие приемы:
    1) либо в теле кода указывать элементы с полными путями, типа colorRevit = Autodesk.Revit.DB.Color(0xFF, 0x00, 0x00 )
    2) либо предварительно импортировать элемент как import Autodesk.Revit.DB.Color as rColor
    и тогда таже строчка colorRevit = rColor(0xFF, 0x00, 0x00 ) – цвет ревита

    p.s. такие же ошибки могут быть и при
    from Autodesk.Revit.DB import * # импорт из Revit API
    и
    from Revit.Elements import * # импорт из RevitNodes
    и др.
    С одной стороны вы упрощаете дальнейшее использование элементов (не таская длинные полные пути), но с другой нужно помнить о том, что имя вашего элемента может быть одновременно в нескольких библиотеках.

    #7606 Score: 0

    Dasko100500
    Участник

    О, даа! спасибо огромное! Очень полезно и внятно!!! Расцеловала бы.

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)

Для ответа в этой теме необходимо авторизоваться.