首页 > 解决方案 > Revit Python Shell - 遍历每个元素,查找视图名称并按图纸编号分组

问题描述

我想按关联的图纸编号、视图名称和位置中心创建所有视口的列表。像这样:

vPorts = [('A0.01, View Name 01',[Center of ViewPort location]),('A0.02, View Name 01',[Centre of ViewPort location]),('A0.02, View Name 02',[Center of ViewPort location]),('A0.04, View Name 01',[Centre of ViewPort location]), etc.]

这样用户就可以在 WPF 中的列表框(此处未显示)中将多个视口相互对齐。我有以下内容:

import clr
clr.AddReferenceByPartialName('PresentationCore')
clr.AddReferenceByPartialName("PresentationFramework")
clr.AddReferenceByPartialName('System')
clr.AddReferenceByPartialName('System.Windows.Forms')

from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Architecture import *
from Autodesk.Revit.DB.Analysis import *
from Autodesk.Revit.UI import *

doc = __revit__.ActiveUIDocument.Document

#List of ViewPort Elements
vPorts = []

#List for ViewPorts by sheet number, view name and location
vPortsloc = []

col_sheets = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Sheets).WhereElementIsNotElementType().ToElements()
for sheet in col_sheets:
    
    vPorts.append(sheet.GetAllViewports())

for vp in vPorts:
    print(vp)

这让我将所有工作表上的所有视口作为列表对象。但我现在想按上述方式格式化此列表。我尝试了以下方法:

for vp in vPorts:
    v = doc.GetElement(vp.ViewId)
    vPortsloc.append(v.SheetNumber + v.Name + (v.GetBoxCenter().ToPoint()))

我相信我没有遍历整个列表列表。更不用说我是python的新手了。任何帮助都将不胜感激。谢谢!

标签: python-2.7revit-apirevitpythonshell

解决方案


感谢 Callum 帮了大忙!我只需要修正一两个拼写错误,使用 append () 而不是 add,并获取 View Name 而不是 Sheet Name。如下

viewPorts = list(FilteredElementCollector(doc).OfClass(Viewport))
viewPortTriples = []

for vp in viewPorts:
    sheet = doc.GetElement(vp.SheetId)
    view = doc.GetElement(vp.ViewId)
    viewPortTriples.append([sheet.SheetNumber, view.ViewName, vp.GetBoxCenter()])

print(viewPortTriples)

推荐阅读