我设法使用这个脚本来分割元素但是我还想在我的OUT中收集分开的元素“parts”,不知何故我无法正确使用它:
我已跳过标准导入,因为我认为我的参数和语法与API方法之间存在混淆。
我试图通过
使用预先存在的代码#proposed by Julien Benoit @jbenoit44
#http://aecuandme.wordpress.com/
我想要实现的是从输入列表中获取元素并确定这些元素是否有资格创建零件,然后从返回true的所有元素创建零件。
之后我想仅收集部分(结果)作为IDS列表。
此外,我期待扩展这一点,以便我也可以给出一个曲线或行列表,它可以用来划分部件列表。
# Make Parts
#feed IN[0] with elements
elts = []
Ids = []
Parts=[]
for i in IN[0]:
elts.append(UnwrapElement(i))
for e in elts:
Ids.append(e.Id)
IDS = List[ElementId](Ids)
# Start transaction of Making Parts
TransactionManager.Instance.EnsureInTransaction(doc)
if PartUtils.AreElementsValidForCreateParts(doc, IDS):
a=PartUtils.CreateParts(doc, IDS)
b=PartUtils.GetAssociatedParts(doc,IDS,True,True)
Parts=[]
for i in b:
Parts.append(doc.GetElement(i).ToDSType(True))
List.append(Parts)
doc.Regenerate()
# End Transaction
TransactionManager.Instance.TransactionTaskDone()
OUT = Parts
我确信它与这部分有关:
b=PartUtils.GetAssociatedParts(doc,IDS,True,True)
Parts=[]
for i in b:
Parts.append(doc.GetElement(i).ToDSType(True))
List.append(Parts)
doc.Regenerate()
答案 0 :(得分:1)
我相信我刚刚在how to get a merged part after merging with some parts上的Revit API论坛帖子中回答了一个非常类似的问题:
您可以在调用CreateParts之前订阅the DocumentChanged event,然后再取消订阅。
这将告诉您在通话期间添加到数据库的所有元素ID。
在retrieving newly placed family instances的讨论中证明了这一点。