Шаблон (python)
Главная › Форумы › Python › Dynamo Libraries › Шаблон (python)
Помечено: библиотеки, шаблон
- В этой теме 6 ответов, 4 участника, последнее обновление 4 года, 4 месяца назад сделано
Александр.
-
АвторСообщения
-
Кто как создает новые скрипты?
Я, до недавнего времени, создавал с чистого листа.
Если нужны были какие-то библиотеки или фрагменты кода, копировал их из других наработок.
И тут пришла мысль о создании универсальной заготовки, аля шаблона.
Предлагаю в этой теме обсудить его концепцию.Мое предложение (скачать):
прошло много времени с создания первой “версии” шаблончика и пора представить шаблончик v.0.2
внутри можно найти несколько полезных, часто используемых команд и почти исчерпывающий список подключаемых библиотек
можно использовать как есть, но для конкретных задач лучше удалять неиспользуемые библиотеки
DimonRevit
УчастникСпасибо!
Для новичков несколько пояснений по библиотекам в шаблоне.
# Подключение библиотеки 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. Вам не обязательно записывать все библиотеки в вашем скрипте, используйте только те, что вы используете для вашего скрипта.
Ниже состав некоторых часто используемых библиотек:
ProtogeometryDSCoreNodes
RevitNodesRevit Nodes продолжение
Совет:
из-за использования записи вида:
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
и др.
С одной стороны вы упрощаете дальнейшее использование элементов (не таская длинные полные пути), но с другой нужно помнить о том, что имя вашего элемента может быть одновременно в нескольких библиотеках.Dasko100500
УчастникО, даа! спасибо огромное! Очень полезно и внятно!!! Расцеловала бы.
Спасибо за подробности!
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.