为了账号安全,请及时绑定邮箱和手机立即绑定

带有 ISelectionFilter 的 PickObjects 不允许我选择任何东西,为什么?

带有 ISelectionFilter 的 PickObjects 不允许我选择任何东西,为什么?

梦里花落0921 2022-04-23 16:56:14
我正在尝试通过使用 GUI 选择一个空间以在 Revit MEP 2019 中使用,并存储选择以供在脚本中进一步使用。代码是用 pyRevit 编写的。该脚本从 shell 和 addin 按钮运行,但是当进入选择模式(PickObject 方法)时,我根本不允许选择任何东西。我没有收到任何错误,只是在 GUI 中输入选择工具时没有任何内容可供选择。我已经在代码中评论了我尝试过的没有用的代码。from Autodesk.Revit              import DB,UIfrom Autodesk.Revit.DB           import BuiltInCategoryfrom Autodesk.Revit.UI.Selection import ISelectionFilter,ObjectType# Definitions:# Define a space selection filter so that only spaces are selectableclass SpaceSelectionFilter(ISelectionFilter):    def AllowElement(element):        #if element.Category.Name == "Spaces":        #if element.ToString() == "Autodesk.Revit.DB.Mechanical.Space":        if element.Category.Id.IntegerValue== int(BuiltInCategory.OST_MEPSpaces):            return True        return False    def AllowReference(reference, point):        return False# Function that enables using PickObject from the PythonRevitShelldef shell_pickobject():    __window__.Hide()     elementReference = uidoc.Selection.PickObject(UI.Selection.ObjectType.Element,spaceFilter,"Select a space(room)")     __window__.Show()    __window__.TopMost = True    return elementReference# Procedure:    # Create a selection filterspaceFilter = SpaceSelectionFilter()# User picks a space    ref =  shell_pickobject()# The following line works also outside of the shell_pickobject() function when used from the GUI addin-button, but spaces are still not selectable.# elementReference = uidoc.Selection.PickObject(UI.Selection.ObjectType.Element,spaceFilter,"Select a space(room)") 我不明白问题出在哪里,我最好的猜测是在过滤器定义中。帮助字符串“选择空间(房间)”在左下角正确显示,当我应该在视图中选择某些内容时,除了视口之外的所有内容都会变成灰色。鼠标变成了某种“禁止”的符号。我将非常感谢一些帮助。提前感谢任何可能希望提供帮助的人!
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

您可以在pyRevitMEP 源代码中找到示例。我还写了一篇文章来解释如何使用 ISelectionFilter :[Revit] ISelectionFilter example using python。这是一个示例(使用 revitpythonshell 运行):


from Autodesk.Revit.UI.Selection import ISelectionFilter


class CustomISelectionFilter(ISelectionFilter):

    def __init__(self, category_name):

        self.category_name = category_name

    def AllowElement(self, e):

        if e.Category.Name == self.category_name:

            return True

        else:

            return False

    def AllowReference(self, ref, point):

        return true


try:

    ductsel = uidoc.Selection.PickObject(ObjectType.Element,

    CustomISelectionFilter("Ducts"),

    "Select a Duct")            

except Exceptions.OperationCanceledException:

    TaskDialog.Show("Operation canceled","Canceled by the user")


__window__.Close()

您可以在这里找到另一个在 pyRevit 下运行的示例:  [pyRevitMEP] ConnectTo : connect MEP elements


查看完整回答
反对 回复 2022-04-23
  • 1 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信