簡體   English   中英

用於revit的python-在活動視圖中收集視圖

[英]python for revit - collect views in active view

我正在嘗試在pyRevit腳本中使用FilteredElementCollector來收集活動視圖中的所有視圖(截面,立面,平面標注等)。

from pyrevit.framework import clr
from pyrevit import revit, DB

clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')

from Autodesk.Revit.DB import *
from pyrevit import forms

doc = __revit__.ActiveUIDocument.Document

view = doc.ActiveView
AllStuff = FilteredElementCollector(doc,doc.ActiveView.Id).WhereElementIsNotElementType().ToElements()

AllViews = []

try:
    for x in AllStuff:
        if "View" in x.Category.Name:
            AllViews.append(x)

這將返回一些視圖,但不是全部視圖。 例如,包括了一些部分,但沒有包括其他部分,我不知道為什么。

如果我添加“ .OfCategory(BuiltInCategory.OST_Views)”,我什么也收不到。 我是否需要將其細分為幾個更具體的類別? 謝謝你的幫助。

FilteredElementCollector(doc,doc.ActiveView.Id)中沒有任何視圖,您可以通過執行以下操作查看它:

for el in FilteredElementCollector(doc, doc.ActiveView.Id):
    print(el)

有一個不屬於OST_Views類別的元素,即使它與您的視圖具有相同的名稱,也不是一個視圖。 要查看此內容,可以使用RevitLookUp 抬頭

通過查看VIEW_FIXED_SKETCH_PLANE BuiltInParameter,我找到了一種檢索實際視圖的方法(目前我不知道其他任何方法),該參考指向SketchPlane,后者將實際視圖作為Element.OwnerViewId引用。 然后,您可以確保該元素屬於View類:

for el in FilteredElementCollector(doc,doc.ActiveView.Id):
    sketch_parameter = el.get_Parameter(BuiltInParameter.VIEW_FIXED_SKETCH_PLANE)
    # If parameter do not exist skip the element
    if not sketch_parameter:
        continue
    view_id = doc.GetElement(sketch_parameter.AsElementId()).OwnerViewId
    view = doc.GetElement(view_id)
    if isinstance(view, View):
        print(view)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM