python-2.7 - 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的新手了。任何帮助都将不胜感激。谢谢!
解决方案
感谢 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)
推荐阅读
- javascript - 如何为所有:悬停样式添加悬停类
- php - 如何使用 php 和 angular 下载文件
- java - Spring Data JPA:DataIntegrityViolationException
- jquery - 数据表按钮未在 Laravel 中显示
- selenium - Zalenium 是否有计划支持其他浏览器,如 IE、Edge?据我了解,目前它只支持 Chrome 和 Firefox
- julia - Julia OrdinaryDiffEq:progress_message 默认值不是他们声称的那样
- android - Buck 使用了错误的 Android SDK 工具链
- c - 使用重复加法的乘法
- python - 如何在redis中存储独立的键值对?
- sql-server - MSSQL 错误:“数据库 'master' 的脚本级别升级失败...升级步骤 'msdb110_upgrade.sql' 遇到错误 200,状态 7,严重性 25。”