Ренат Я.
Ответы в темах
-
АвторСообщения
-
получилось сделать такую последовательность
проверить можно так, выбрать какой либо элемент, выполнить скрипт.. и смотреть на значение параметра “Комментарии”. для того чтобоы узнать последовательность действий нужно нажимать кнопку шаг назад, для отмены последнего изменения, каждая транзакция создает шаг отката
видимо ревит как-то конвертирует входящий параметр, если несколько раз изменить, то можно вычислить зависимость
если входящее число из комментария умножить на 10,764262648008611410118406889128 то в параметре мощности будет ~ то число которое было в комментарии отличие на несколько сотых
PS понял, все дело в размерности.. Вт = кг*м2/с2 т.к. в БД Ревит все хранит в футах, то и этот параметр он конвертирует в футы, в 1 метре 3,28084 фута, т.е. если возвести в квадрат это число то и получим 10,7639111056 , примерно тоже что и получил эмпирическим путем) но сейчас с доказательной базой))
Столкнулся с еще одной проблемой: при размещении экземпляра семейства с помощью динамо (нод FamilyInstance.ByPoint) отсутствует привязка к уровню. А она очень нужна для работы скрипта.
Для этого надо просто глянуть чуть ниже нода FamilyInstance.ByPoint, там будет находиться нод FamilyInstance.ByPointAndLevel, который позволяет указать уровень на котором будет располагаться семейство
Revit 2017, Dynamo 1.3
тут библиотеки для разных случаев, стандартный наборimport clr #подключение библиотек ревита clr.AddReference(“RevitAPI”) clr.AddReference(“RevitAPIUI”) from Autodesk.Revit.DB import * # библиотека динамо для работы с ревитом clr.AddReference(“RevitServices”) import RevitServices #разворчиваем текущий проект в ревите from RevitServices.Persistence import DocumentManager #разворчиваем доступ к трнзакциям from RevitServices.Transactions import TransactionManager #загружаем динамовскую библиотеку нодов для работы с ревитом clr.AddReference(“RevitNodes”) import Revit #функция для заворачивания объектов clr.ImportExtensions(Revit.Elements) #превращение геометрии взаимное clr.ImportExtensions(Revit.GeometryConversion) #БД на текущий проект doc = DocumentManager.Instance.CurrentDBDocument #функции и свойство для работы с внешней оболочкой uiapp = DocumentManager.Instance.CurrentUIApplication #функции для работы с ревитом как с программой app = uiapp.Application TransactionManager.Instance.EnsureInTransaction(doc) pipeID=ElementId(IN[0]) ptBreak=IN[1].ToXyz() OUT=Plumbing.PlumbingUtils.BreakCurve(doc, pipeID, ptBreak) TransactionManager.Instance.TransactionTaskDone()
Через RevitLookup я нашел откуда можно вытащить эти длины, точнее массив линий из которых состоит армирование, а вот как это сделать тямы не хватает))) нужна помощь опытных питонщиков
upd
скачал пакет нодов BIM4Struct Rebar там есть нод (см. скрин)
если нужен скрипт
import clr clr.AddReference('RevitAPI') from Autodesk.Revit.DB import * from Autodesk.Revit.DB.Structure import * clr.AddReference('RevitNodes') import Revit clr.ImportExtensions(Revit.GeometryConversion) clr.ImportExtensions(Revit.Elements) clr.AddReference('RevitServices') import RevitServices from RevitServices.Persistence import DocumentManager doc = DocumentManager.Instance.CurrentDBDocument element = UnwrapElement(IN[0]) view = UnwrapElement(IN[1]) OUT = [e.ToProtoType(True) for e in element.GetFullGeometryForView(view)]
да, действительно такая проблема была, если отделочная стена стояла отдельно.
добавил проверку
- проверка на все то что в списке все false, т.е. пересечения не нашлись
- добавил фильтр, чтобы отсеить эти стены для определения индекса
- добавил фильтр, чтобы отсеить эти стены для группировки
Сделал вот такой скриптик, возможно можно и проще)
сам скрипт , если нужен файл ревита
конструктивная критика приветствуется) -
АвторСообщения