создание Parts в Python

Главная Форумы Задать вопрос создание Parts в Python

В этой теме 22 ответа, 4 участника, последнее обновление  Ром 1 год, 8 мес. назад.

Просмотр 15 сообщений - с 1 по 15 (из 23 всего)
  • Автор
    Сообщения
  • #6154 Score: 0

    Ром
    Участник

    Товарищи Привет!! Хочу создать на стенах Parts….но не получается(( что не так подскажите пожалуйста:

    import clr
    clr.AddReference(‘RevitAPI’)
    from Autodesk.Revit.DB import *
    clr.AddReference(‘RevitNodes’)
    import Revit
    clr.ImportExtensions(Revit.GeometryConversion)
    clr.AddReference(“RevitServices”)
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager

    import System.Collections.Generic.ICollection

    doc = DocumentManager.Instance.CurrentDBDocument
    collection = System.Collections.Generic

    elemUW = UnwrapElement(IN[0])
    elemId = elemUW.Id

    TransactionManager.Instance.EnsureInTransaction(doc)
    elemPatr = PartUtils.CreateParts(doc, ICollection(elemId))
    TransactionManager.Instance.TransactionTaskDone()

    OUT = [elemPatr]

    #6158 Score: 0

    Legantmar
    Хранитель
    459 pts

    Где ты нашел скрипт?
    Что такое parts на стенах ?

    если нижнюю чать (после doc =.. ) заменить вот на это:

    import System
    from System import Array
    from System.Collections.Generic import *
    Ids=List[ElementId]() 
    Ids.Add(ElementId(IN[0].Id))
    TransactionManager.Instance.EnsureInTransaction(doc)
    elemPatr = PartUtils.CreateParts(doc, Ids)
    TransactionManager.Instance.TransactionTaskDone()

    то ошибок не выдает.
    Кстати метод PartUtils.CreateParts(doc, Ids) ничего не возвращает, так что elemPatr от этой команды можно и не ждать

    #6159 Score: 0

    Ром
    Участник

    спасибо за ответ.

    <hr />

    import clr

    clr.AddReference(‘RevitAPI’)
    from Autodesk.Revit.DB import *

    clr.AddReference(‘ProtoGeometry’)
    from Autodesk.DesignScript.Geometry import *

    clr.AddReference(‘RevitNodes’)
    import Revit
    clr.ImportExtensions(Revit.GeometryConversion)

    clr.AddReference(“RevitServices”)
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager

    import System
    from System import Array
    from System.Collections.Generic import *

    doc = DocumentManager.Instance.CurrentDBDocument

    Ids=List[ElementId]()
    Ids.Add(ElementId(IN[0].Id))

    TransactionManager.Instance.EnsureInTransaction(doc)
    elemPatr = PartUtils.CreateParts(doc, Ids)
    TransactionManager.Instance.TransactionTaskDone()

    ——————————————————————–

    “Что такое parts на стенах ?” имеется ввиду вот что: “Parts can be generated from elements with layered structures, such as: Walls (excluding stacked walls and curtain walls)”.

    Не работает((( вот что пишет нод: “Предупреждение:IronPythonEvaluator.EvaluateIronPythonScript операция не выполнена.
    Traceback (most recent call last):
    File “<string>”, line 25, in <module>
    AttributeError: ‘list’ object has no attribute ‘Id'”

    #6160 Score: 0

    Khasan Mamaev
    Хранитель
    181 pts

    если 25-ая строка эта Ids.Add(ElementId(IN[0].Id)) то покажи что приходит на IN[0]

    #6161 Score: 0

    Legantmar
    Хранитель
    459 pts

    ну так у тебя код для одного элемента, а ты на вход подаешь несколько !?
    для этого нужен уже цикл..
    p.s. Хасан опередил на секунду ))

    #6162 Score: 0

    Ром
    Участник

    Спасибо большое товарищи, но чёт не хочет(((

    #6163 Score: 0

    Legantmar
    Хранитель
    459 pts

    такая ошибка может может появляться из-за повторного применения к одной и той же стене
    попробуй выбрать другую стену

    #6164 Score: 0

    Ром
    Участник

    да, точно. Рассматриваемая стена была уже разбита на PARTS. При вы выборе другой стены – скрипт сработал. Спасибо большое!)

    #6165 Score: 0

    Legantmar
    Хранитель
    459 pts

    покажи потом скриншоты, что это или что дает..

    #6166 Score: 0

    Ром
    Участник

    Мне нужно разбить все стены, потолки и полы на Parts для дальнейшего подсчёта отделки. По регламенту, заказчик хочет вести подсчёт именно так (к каждой категории Parts они будут цеплять свой IDшник). Хочу сократить время и рассчитываю, что этот скрипт будет началом этого автоматического процесса. Иначе велик “человеческий фактор” и при ручном разбиении на Parts начинается путаница; в результате что-то остаётся не разбито на Parts.

    По хорошему мне нужно сделать Parts из xRefs модели в файле модели Интерьера. Надеюсь по такой-же схеме это сделать.

    Следующий шаг – я должен скриптом объединить Parts по материалам.

    #6279 Score: 0

    Ром
    Участник

    Товарищи помогите разобраться почему Dynamo пишет это?:

    Предупреждение:IronPythonEvaluator.EvaluateIronPythonScript операция не выполнена.
    Traceback (most recent call last):
    File “<string>”, line 32, in <module>
    Exception: One or more element ids was not suitable for merging with the others. Specified elements should all be Parts, report the same material, creation and demolition phases, and have contiguous geometry.
    Parameter name: partIds

     

    вот скрипт:

    import clr

    clr.AddReference(‘RevitAPI’)
    from Autodesk.Revit.DB import *

    clr.AddReference(‘ProtoGeometry’)
    from Autodesk.DesignScript.Geometry import *

    clr.AddReference(‘RevitNodes’)
    import Revit
    clr.ImportExtensions(Revit.GeometryConversion)

    clr.AddReference(“RevitServices”)
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager

    import System
    from System import Array
    from System.Collections.Generic import *

    doc = DocumentManager.Instance.CurrentDBDocument

    #OUT = dir(List)

    for ip in IN[0]:
    Ids=List[ElementId]()
    Ids.Add(ElementId(ip.Id))

    TransactionManager.Instance.EnsureInTransaction(doc)
    elemMpatr = PartUtils.CreateMergedPart(doc, Ids)
    TransactionManager.Instance.TransactionTaskDone()

    это стены в плане:

    как видим у Parts – параметры одинаковы. По условиям всё соблюдено (Specified elements should all be Parts, report the same material, creation and demolition phases, and have contiguous geometry).

    #6296 Score: 0

    Ром
    Участник

    Товарищи, неужели ни у кого нет мыслей как объединить Parts созданные на 2-х сопряжённых стенах??(((((((((((((

    #6297 Score: 0

    Oleg
    Участник
    30 pts

    Вам нужно строчку ” ids=List[ElementId]()” вытащить из цикла, т.е попробуйте так:

     

    
    ids=List[ElementId]()
    for ip in IN[0]:
    ids.Add(ElementId(ip.Id))
    
    #6305 Score: 0

    Ром
    Участник

    Спасибо Олег за попытку помочь, но не получилось((( результат – тот-же.

    Может быть я использую не тот метод, который может объединить части. В API слишком “обще” об этом написано.

    #6307 Score: 0

    Oleg
    Участник
    30 pts

    У вас теперь транзакция в цикле, вытащите её оттуда)

    Ids=List[ElementId]()

    for ip in IN[0]:
    Ids.Add(ElementId(ip.Id))

    TransactionManager.Instance.EnsureInTransaction(doc)
    elemMpatr = PartUtils.CreateMergedPart(doc, Ids)
    TransactionManager.Instance.TransactionTaskDone()

    <iframe src=”https://pastebin.com/embed_iframe/es0maCy6″ style=”border:none;width:100%”></iframe>

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

Для ответа в этой теме необходимо авторизоваться.