ИваСерж
Ответы в темах
-
АвторСообщения
-
Вот прямо сегодня столкнулся с такой проблемой. Подробней рассказал Лобанов в своих уроках
https://youtu.be/XIGpuP23k9k?list=PLVCDzVIlOckHsZcqkq3DmzdGcq2503l1G&t=1175
Решение: создавать элементы не средствами Динамо, с через питон.
Я использовал команду doc.Create.NewFamilyinstance. Тогда семейства создаются без привязки к Динамо. Если нужно, могу подсказать как работать с NewFamilyinstance.p.s.
import Revit
clr.ImportExtensions(Revit.Elements)Element.ToDSType(False) – если мы создали элемент в Dynamo (и его не было в Revit) – Dynamo будет отслеживать. Т.е. при очередном запуске старый элемент будет удаляться и создаваться новый!
Element.ToDSType(True) – Dynamo не будет отслеживать и при каждом запуске будут создаваться новые элементы, старые удаляться не будут.
Закончил обещаный скрипт по расчёту электрики. Тест-проект прикладываю. Записывать видео лень. Кому надо – спрашивайте. Скрипт написан под мой собственный БИМ стандарт. Прошел тесты на небольших проектах, но глобально не проверялся.
Пример с динамо скриптом
Видео как работает. Правда, до конца так и не записал из-за отсутсвтия интереса.
https://www.youtube.com/watch?v=-OgdSa-tMO0&list=PLXoMzi7DFVEZ9LfSdxDtba6bFMjA2d7vqНа данный момент переработана рассчётная часть скрипта. Добавлены контакторы и т.п.
Не доделанными остаются 2Д – пока размещаю схемы в модели, а не в чертежном виде. Но, как дойдут руки, доделаю.Суть вопроса как понимаю я:
Для программирования в Ревит мы используем АПИ. Динамо это “обертка” (красивая оболочка) над этим АПИ. Питон, встроенный в Динамо – это очередная “обёртка”, но уже для Динамо. Получаем, как лук, завернутые друг в друга программные элементы. По сути, Ревит это “обертка” надо операционной системой. Операционная система – “обертка” над драйверами, драйверы – “обертка” для железа.Работая в Питоне мы можем пользоваться:
1. Методами Питона 2.7 (причем урезанными), если встречаем элемент из Динамо, то его надо “развернуть” – Unwrap
2. Методами самого Динамо (т.е. из кода Питона мы можем обращаться к нодам Динамо.В Питоне 2.7 нет метода IndexOf, зато есть нод с таким именем в Динамо. Можете вытащить этот нод и посмотреть как он работает. В коде вы обращаетесь именно к ноду!
Из-за приведенных особенностей часто возникают проблемы с пространствами имен. Я часто путаю Point из Динамо и Point, которую создал в коде посредством АПИ. Как по мне, то Питон в Динамо не достаточно “инкапсулирован” от самого Динамо. Проблемы с пространствами имен встречаются постоянно. Я бы хотел, чтоб работая в Питоне, мы пользовались только методами Питона, а на методы Динамо ссылались как-то по другому. Хотя, думаю, это тоже большой вопрос для программистов.Задача моего скрипта – делить существующие лотки на лотки стандартной длинны 1.5 м.
Для этого я отфильтровываю все лотки, которые короче 1.5 м
Затем вычисляю точки для новых лотков.
Удаляю старые лотки.
По точкам черчу новые лотки.
Новые лотки соединяю. При этом автоматически воссоздаются коннекторы.
Скрипт полностью рабочий.
https://www.dropbox.com/s/f4vdwdur1b18abs/CableTrayDivide.zip?dl=0П.С. код, конечно, не очень удачный… Скрипт 16 года) Читаю код и хочу его теперь полностью переписать)
Параметры удаляются через FamilyManager. Метод RemoveParameter
http://www.revitapidocs.com/2015/cb266197-b76e-66db-ea15-2cf14bcb4f85.htm
- Основная идея такая:
1.1. Открыть семейство по пути на диске
1.2. Найти параметр
1.3. Удалить параметр
1.4. Сохранить семейство.
2. Если надо удалить параметры из семейств, которые уже подгружены в проект:
2.1. Найти семейство в проекте и сохранить его на диск по какому-то временному пути.
2.2. Сделать действия из п.1
2.3 Загрузить семейство по указанному пути в проект.
Пункт 2 однако, требует больших затрат. Поэтому мы решили отказаться от удаления параметров в уже текущих проектах
Ну и пример (как есть) – работал на Ревите 2015.https://www.dropbox.com/s/2jnrm112zc8dkxx/DeleteParamFromRFA.dyn?dl=0
У меня все получилось и работает.
Прошу применять.
https://pastebin.com/yYgsaaZFНу вот как пример.
Решения могут быть более элегантными.
Разберись хотябы с кодом, который я написал, потом будешь его дорабатывать со временем.Библиотека насколько я понял, самая обычная – ревит АПИ.
А вот метод лежит в классе BooleanOperationsUtils
Сначала обращаемся к классу, а потом через точку уже и к самому методу
BooleanOperationsUtils.ExecuteBooleanOperationModifyingOriginalSolid – должно отработать.можно попробовать сократить эту ерунду и вначале экспортнуть метод сокращенно воспользовавшись
import … as …Мой вариант. Автор я )) Очень простой скрипт, как по мне.
Как всегда, питоновский.
https://www.dropbox.com/s/1nfo9ncyje47plg/ElSys.dyn?dl=0Мы говорим о марках или о самих трубах?
Труба это не семейство (не Фемели инстанс).
Очевидно, нет у трубы FamilyInstance.TypeЗато у трубы есть PypeType
В динамо есть даже нод GetPypeTypeВозможно, подтолкнет на какие-то идеи по замене трубы.
А вот и пример скрипта который соединяет 2 любые трубы и вставляет фитинги по умолчанию.
Проверил. У меня скрипт работает в 2019.АвтоСоединение
Скрипт лежит у меня на дропбоксе пока мне не надоест.
Если удалю и кому-то нужно будет – пишите в личку. - Основная идея такая:
-
АвторСообщения