Скрипт PyRevit, размещающий элементы более одного раза ⇐ Python

Программы на Python
Anonymous
Скрипт PyRevit, размещающий элементы более одного раза

Сообщение Anonymous »

Я пытаюсь написать скрипт Python в Dynamo для Revit, который размещает экземпляры FamilyInstances с учетом символа семейства, точки вставки, угла поворота и рабочей плоскости.
Пока что Скрипт работает так, как и ожидалось, за исключением того, что он помещает каждый экземпляр FamilyInstance несколько раз в одно и то же место, и я не могу понять, почему. Символ и базовая плоскость представляют собой отдельные объекты (они остаются одинаковыми для каждого размещенного экземпляра), а точки вставки и углы поворота изменяются для каждого нового экземпляра. Я использую zip, чтобы вернуть их кортежи, а затем перебираю их, чтобы разместить новые экземпляры семейства:

Код: Выделить всё

import clr
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
from Revit.Elements import *
clr.AddReference('System')
from System.Collections.Generic import *
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application

#The inputs to this node will be stored as a list in the IN variables.
dataEnteringNode = IN
symbol = UnwrapElement(IN[0])
refPlane = UnwrapElement(IN[1])
locations = []
for i in IN[2]:
locations.append(UnwrapElement(i).ToXyz())
referenceDirections = []
for i in IN[3]:
referenceDirections.append(UnwrapElement(i).ToXyz())
out = []

symbol.Activate()
reference = Reference(refPlane)

TransactionManager.Instance.EnsureInTransaction(doc)

for location, direction in zip(locations, referenceDirections):
new = doc.Create.NewFamilyInstance(reference,location,direction,symbol)
out.append(new)

TransactionManager.Instance.TransactionTaskDone()

#Assign your output to the OUT variable.
OUT = out
После запуска сценария переменная out возвращает правильное количество идентификаторов элементов (такое же, как и входные), тогда как фактические элементы, созданные в Revit, кратны этому числу. . Что мне не хватает?

Подробнее здесь: https://stackoverflow.com/questions/790 ... -than-once

Вернуться в «Python»