Ренат Я.

Ответы в темах

Просмотр 15 сообщений - с 1 по 15 (из 48 всего)
  • Автор
    Сообщения
  • #5863 Score: 6
    Ренат Я.
    Модератор
    79 pts

    получилось сделать такую последовательность

    проверить можно так, выбрать какой либо элемент, выполнить скрипт.. и смотреть на значение параметра “Комментарии”. для того чтобоы узнать последовательность действий нужно нажимать кнопку шаг назад, для отмены последнего изменения, каждая транзакция создает шаг отката

    #8232 Score: 4
    Ренат Я.
    Модератор
    79 pts

    правильно ли я понял, что нужны полные сочетания от а1 со всеми b до a4 со всеми b?

    #8055 Score: 4
    Ренат Я.
    Модератор
    79 pts

    тоже, но нодами (данные взял из поста Legantmar’а для наглядности)

    #6016 Score: 3
    Ренат Я.
    Модератор
    79 pts

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

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

    PS понял, все дело в размерности..  Вт = кг*м2/с2  т.к. в БД Ревит все хранит в футах, то и этот параметр он конвертирует в футы, в 1 метре 3,28084 фута, т.е. если возвести в квадрат это число то и получим 10,7639111056  , примерно тоже что и получил эмпирическим путем) но сейчас с доказательной базой))

    #8259 Score: 3
    Ренат Я.
    Модератор
    79 pts

    одноуровневый список можно и нодами разбить, тока надо будет потом удалить символы { и }

    двухуровневый можно так разбить

    #8729 Score: 3
    Ренат Я.
    Модератор
    79 pts

    Столкнулся с еще одной проблемой: при размещении экземпляра семейства с помощью динамо (нод FamilyInstance.ByPoint) отсутствует привязка к уровню. А она очень нужна для работы скрипта.

    Для этого надо просто глянуть чуть ниже нода FamilyInstance.ByPoint, там будет находиться нод FamilyInstance.ByPointAndLevel, который позволяет указать уровень на котором будет располагаться семейство

    #5708 Score: 3
    Ренат Я.
    Модератор
    79 pts

    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()
    
    #5982 Score: 2
    Ренат Я.
    Модератор
    79 pts

    Через 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)]
    #6705 Score: 2
    Ренат Я.
    Модератор
    79 pts

    можно так еще, чуть проще

    #8238 Score: 2
    Ренат Я.
    Модератор
    79 pts

    да, действительно такая проблема была, если отделочная стена стояла отдельно.

    добавил проверку

    1. проверка на все то что в списке все false, т.е. пересечения не нашлись
    2. добавил фильтр, чтобы отсеить эти стены для определения индекса
    3. добавил фильтр, чтобы отсеить эти стены для группировки

    Файлики dyn и rvt

    #6939 Score: 2
    Ренат Я.
    Модератор
    79 pts

    если нодами решать, то можно так (питоном конечно проще решение)

    #8249 Score: 2
    Ренат Я.
    Модератор
    79 pts

    что приходит на ум, если стены параллельны то расстояние между ними определяется по центрам, если не параллельны то при пересечении выдает 0

    #5996 Score: 2
    Ренат Я.
    Модератор
    79 pts

     

    results = []
    
    for i in range (0, IN[0].Count):
      results.append(Autodesk.Revit.DB.JoinGeometryUtils.SwitchJoinOrder(doc,IN[0][i],IN[1][i]))
    
    OUT = results

    списки должны быть одноуровневыми

    #5610 Score: 2
    Ренат Я.
    Модератор
    79 pts

    Сделал вот такой скриптик, возможно можно и проще)

    сам скрипт ,  если нужен  файл ревита
    конструктивная критика приветствуется)

    #5760 Score: 2
    Ренат Я.
    Модератор
    79 pts

    то что ты написал это для одной переменной, для списка надо цикл делать
    а лучше сделать, так чтобы не важно было что подавать в питон)))

    import clr
    x = IN[0]
    if isinstance(x, list) == True:
    list = [i.ToString() for i in x]
    else:
    list = x.ToString()
    OUT = list

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