gpt4 book ai didi

python - 带有 ISelectionFilter 的 PickObjects 不允许我选择任何内容,为什么?

转载 作者:行者123 更新时间:2023-12-01 07:28:32 28 4
gpt4 key购买 nike

我正在尝试使用 GUI 来选择一个用于 Revit MEP 2019 的单个空间,并存储该选择以供在脚本中进一步使用。代码是用 pyRevit 编写的。该脚本从 shell 和插件按钮运行,但是当进入选择模式(PickObject 方法)时,我根本不允许选择任何内容。我没有收到任何错误,只是在 GUI 中输入选择工具时无法选择任何内容。

我在代码中评论了我尝试过但不起作用的内容。

from Autodesk.Revit              import DB,UI
from Autodesk.Revit.DB import BuiltInCategory
from Autodesk.Revit.UI.Selection import ISelectionFilter,ObjectType

# Definitions:

# Define a space selection filter so that only spaces are selectable
class 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 PythonRevitShell
def 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 filter
spaceFilter = 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)")

我不明白问题出在哪里,我最好的猜测是在过滤器定义中。帮助字符串“选择空间(房间)”在左下角正确显示,除了视口(viewport)之外的所有内容都变成灰色,就像我应该在 View 中选择某些内容时一样。鼠标变成了某种“禁止”的符号。

我非常感谢对此的帮助。预先感谢任何愿意提供帮助的人!

最佳答案

您可以在 pyRevitMEP source code 中找到示例。我也做了an article解释如何使用 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

关于python - 带有 ISelectionFilter 的 PickObjects 不允许我选择任何内容,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57325993/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com