создание Parts в Python
Главная › Форумы › Задать вопрос › создание Parts в Python
- В этой теме 22 ответа, 4 участника, последнее обновление 7 лет, 3 месяца назад сделано Ром.
-
АвторСообщения
-
РомУчастник
Товарищи Привет!! Хочу создать на стенах 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 TransactionManagerimport System.Collections.Generic.ICollection
doc = DocumentManager.Instance.CurrentDBDocument
collection = System.Collections.GenericelemUW = UnwrapElement(IN[0])
elemId = elemUW.IdTransactionManager.Instance.EnsureInTransaction(doc)
elemPatr = PartUtils.CreateParts(doc, ICollection(elemId))
TransactionManager.Instance.TransactionTaskDone()OUT = [elemPatr]
Где ты нашел скрипт?
Что такое 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 от этой команды можно и не ждатьРомУчастникспасибо за ответ.
<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 TransactionManagerimport 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'”если 25-ая строка эта
Ids.Add(ElementId(IN[0].Id))
то покажи что приходит на IN[0]ну так у тебя код для одного элемента, а ты на вход подаешь несколько !?
для этого нужен уже цикл..
p.s. Хасан опередил на секунду ))РомУчастникСпасибо большое товарищи, но чёт не хочет(((
такая ошибка может может появляться из-за повторного применения к одной и той же стене
попробуй выбрать другую стенуРомУчастникда, точно. Рассматриваемая стена была уже разбита на PARTS. При вы выборе другой стены – скрипт сработал. Спасибо большое!)
покажи потом скриншоты, что это или что дает..
РомУчастникМне нужно разбить все стены, потолки и полы на Parts для дальнейшего подсчёта отделки. По регламенту, заказчик хочет вести подсчёт именно так (к каждой категории Parts они будут цеплять свой IDшник). Хочу сократить время и рассчитываю, что этот скрипт будет началом этого автоматического процесса. Иначе велик “человеческий фактор” и при ручном разбиении на Parts начинается путаница; в результате что-то остаётся не разбито на Parts.
По хорошему мне нужно сделать Parts из xRefs модели в файле модели Интерьера. Надеюсь по такой-же схеме это сделать.
Следующий шаг – я должен скриптом объединить Parts по материалам.
РомУчастникТоварищи помогите разобраться почему 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 TransactionManagerimport 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).
РомУчастникТоварищи, неужели ни у кого нет мыслей как объединить Parts созданные на 2-х сопряжённых стенах??(((((((((((((
Вам нужно строчку ” ids=List[ElementId]()” вытащить из цикла, т.е попробуйте так:
ids=List[ElementId]() for ip in IN[0]: ids.Add(ElementId(ip.Id))
РомУчастникСпасибо Олег за попытку помочь, но не получилось((( результат – тот-же.
Может быть я использую не тот метод, который может объединить части. В API слишком “обще” об этом написано.
У вас теперь транзакция в цикле, вытащите её оттуда)
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>
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.