Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 Revit Python Shell-迭代每个元素,查找视图名称并按图纸编号分组_Python 2.7_Revit Api_Revitpythonshell - Fatal编程技术网

Python 2.7 Revit Python Shell-迭代每个元素,查找视图名称并按图纸编号分组

Python 2.7 Revit Python Shell-迭代每个元素,查找视图名称并按图纸编号分组,python-2.7,revit-api,revitpythonshell,Python 2.7,Revit Api,Revitpythonshell,我想按关联的图纸编号、视图名称和位置中心创建所有视口的列表。像这样: 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

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

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新手。。任何帮助都将不胜感激。谢谢

它可以帮助可视化多维度
列表
,如下所示:

vPortTriples  = [
    [Sheet Number, Sheet Name, ViewPort Center], 
    [Sheet Number, Sheet Name, ViewPort Center], 
    [Sheet Number, Sheet Name, ViewPort Center]
]
看起来您在
列表中添加了三个独立的项目。是否应该像这样将它们添加为新列表

vPortTriples.append([v.SheetNumber, v.Name, v.GetBoxCenter().ToPoint()])
如果您确实希望捕获项目中的每个
视口
,则可以按类获取所有
视口
,因此在您的代码中看起来如下所示:

# I find it easiest to convert FilteredElementCollector to a list
viewPorts = list(FilteredElementCollector(doc).OfClass(Viewport))
viewPortTriples = []

for vp in viewPorts:

    # need to fetch the ViewPorts Sheet 
    sheet = doc.GetElement(vp.SheetId)
    
    # add a new List to the 'viewPortTriples' List
    viewPorts.Add([sheet.SheetNumber, sheet.Name, vp.GetBoxCenter()]
但是,这是一种非常昂贵的方法,最好只为相关的工作表获取它们——比如,通过特定的工作表编号(这可能是您在示例中尝试的!):


谢谢你的帮助!我只需要修改一两个输入错误,使用append()而不是add,并获得视图名而不是图纸名。如下

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)
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)