首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyrevit ISelectionFilter不使用链接元素

Pyrevit ISelectionFilter不使用链接元素
EN

Stack Overflow用户
提问于 2022-09-29 19:43:50
回答 1查看 107关注 0票数 1

我对pick对象(链接元素)有问题。我的“允许元素”过滤器适用于revit模型中的元素,但是如果我对链接元素使用相同的ISelectionFilter,我就不能选择enything。我的代码:

代码语言:javascript
复制
##imports
    
doc = revit.doc
uidoc = revit.uidoc
    
###Thanks to Cyril Waechter https://pythoncvc.net/?p=116 custom ISelectionFilter
class CustomISelectionFilter(ISelectionFilter):
    def __init__(self, nom_categorie):
        self.nom_categorie = nom_categorie
    def AllowElement(self, e):
        if e.Category.Name == self.nom_categorie:
            return True
        else:
            return False
    def AllowReference(self, ref, point):
        return true
###
    
# Pick model elements
try:
    with forms.WarningBar(title="Pick elements in model"):
        wall_collector = uidoc.Selection.PickObjects(ObjectType.Element, CustomISelectionFilter("Walls"))

except:
    print("No elements")
    
# Pick linked elements
try:
    with forms.WarningBar(title="Pick elements in linked model"):
        wall_collector_link = uidoc.Selection.PickObjects(ObjectType.LinkedElement, CustomISelectionFilter("Walls"))

except:
    print("No linked elements")

## Print Ids
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-24 15:12:10

这对我来说很管用

代码语言:javascript
复制
import clr
from Autodesk.Revit.UI.Selection import *
from pyrevit import revit

doc = revit.doc
uidoc = revit.uidoc


class CustomISelectionFilter(ISelectionFilter):
    def __init__(self, category_name, document):
        self.category_name = category_name
        self.document = document

    def AllowElement(self, element):
        some_type = self.document.GetElement(element.GetTypeId())
        type_name = some_type.FamilyName

        if type_name == "Linked Revit Model":
            return True
        else:
            if element.Category.Name == self.category_name:
                return True
            else:
                return False

    def AllowReference(self, ref, point):
        element = self.document.GetElement(ref)
        some_type = revit.doc.GetElement(element.GetTypeId())
        type_name = some_type.FamilyName

        if type_name == "Linked Revit Model":
            li = clr.Convert(element, type(element))
            linked_document = li.GetLinkDocument()
            element = linked_document.GetElement(ref.LinkedElementId)

        if element.Category.Name == self.category_name:
            return True
        else:
            return False



# Pick model elements
try:
    with forms.WarningBar(title="Pick elements in model"):
        wall_collector = uidoc.Selection.PickObjects(ObjectType.Element, CustomISelectionFilter("Walls", doc))

except:
    print("No elements")

# Pick linked elements
try:
    with forms.WarningBar(title="Pick elements in linked model"):
        wall_collector_link = uidoc.Selection.PickObjects(ObjectType.LinkedElement, CustomISelectionFilter("Walls", doc))

except:
    print("No linked elements")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73900872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档