Как создать балочную систему посредством Python_а
Главная › Форумы › Задать вопрос › Как создать балочную систему посредством Python_а
- В этой теме 9 ответов, 5 участников, последнее обновление 4 года, 5 месяцев назад сделано Иван Волощенко.
-
АвторСообщения
-
Добрый день, друзья! Обращаюсь к профессионалам. Попытался поискать возможность создания балочной ситемы в ревите посредством динамо, но, увы, подходящего нода не нашел, единственный вариант – создать балочную систему с помощью питона, в ревит апи нашел четыре метода, но знаний для правильной прописи (синтаксиса) всех необходимых вводных даных, к сожалению, не хватает. Понимаю, что прошу, возможно, немало, потому, если у кого будет возможность и желание поделиться мыслями, большая благодарность! Спасибо также Хасану Мамаеву за урок по созданию развертки крыши, из которого использовал некоторые коды питона.
Файлик динамо https://drive.google.com/open?id=1ynaEvYXzQjQG1PDLh2ab4Qg-j27zgUkL
Возник вопрос по Revit API. При создании балочной системы используется четыре метода Create, но по умолчанию питон подхватывает первый, в котором надо вводить третье по счету данное Sketch Plane, это понял из того, что пытался подавать на вход данные третьего метода, в котором указывается level. Выдает ошибку и запрашивает SketchPlane. Где здесь подводный камень, что надо уточнять питону, чтобы он понял что мне нужно?
1. Методы из АПИ выбрать напрямую нельзя. “Выбор” по нормальному, называется “перезагрузка метода”. работает так: в метод по очереди запихивается объект. Если первый метод отработал с ошибкой – объект запихивается во второй метод. И так до тех пор, пока что-то не отработает. Если ни один метод не отработал правильно – выдается ошибка.
2. Из п.1 следует, что для начала нужно привести в порядок объекты, которые подаем в метод. В приведенном на скрине скрипте я сразу вижу ошибки в типах данных, которые подаются в метод. Каждую из ошибок надо рассматривать отдельно и очень внимательно.
2.1 список polycurve должен быть не списком, а коллекцией из .Net Я тут недавно писал о том, как преобразовать список в коллекцию.
2.2 Level – прошу не забывать, что на входе в нод залетает “Динамовский” объект. Его надо развернуть. Для получения “чистого” объекта применяем UnwrapElement
2.3 direct – а вот тут не знаю, что на вводе (надо смотреть скрипт). Скорее всего на вводе объект Point, а метод кушает объект ХYZ (оказывается они разные точка и этот ХУЗ не одно и то же.) . Используем банальное преобразование ХYZ(Point.X, Point.Y, Point.Z).Вывод. Надо привести в порядок объекты, которые подаем в метод. Скорее всего, и дальше будут какие-то ошибки, но прежде всего надо решить очевидные проблемы.
Огромная благодарность, Серж! Натолкнули на нужные мысли, частично желаемое получилось, то есть создать балочную систему, не хватает только времени посидеть, разобраться полностью и написать ответ как все получилось, был загружен работой. Ошибка моя была в п. 2.2, когда анвропнул уровень, все заработало, на вводе direct можно подавать как в примере RevitAPI “0”, только тогда балочная система создается на отметке 0 данного уровня, а так вся загвоздка остается в этом пункте.
МаксимУчастникА можете поделиться успехами? а то я, наверное, не до конца понял суть преобразования списка в коллекцию… использую как писали в теме по синтаксису “Для создания таковых и используется List [ElementId].”.. .. получаю такую ошибку “SystemError: MakeGenericType on non-generic type”
Накидал тут, начало взял у Анатолия, а он взял у Хасана ))
Скрипт можно скачать в соответствующем разделе.
Ниже привожу фрагмент кода из последнего блока (без подключения необходимых библиотек, полную версию см. в разделе скачать)
Должен корректно работать с линиями крыш расположенными в ортогональной сетке, тобишь по осям X и Y !! для ориентации балочной системы вставил проверку StartPoint и EndPoint у линий скатов (блок в центре).
Антон, молодец! Спасибо за скрипт и возможность покопаться в “высшей математике”. Функции как-то с трудом сейчас даются.. В 2018-й версии получил ошибку, что делать – пока что не знаю)).
Была ошибка Traceback (most recent call last):
File “<string>”, line 67, in <module>
File “<string>”, line 58, in BeamSystemByCurves
Exception: The input points do not define a unique plane.
Parameter name: point2.Как оказалось, причина заключалась в том, что две противоположные стороны выбранной крыши (ранее с этим файлом работал) имели подъем линий эскиза на 20 мм.
Огромная благодарность!
Иван ВолощенкоУчастниктекст поправил, работает. Недочет что рабочие плоскости не грани крыши.
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.