我试图通过使用GUI来选择一个单个空间供Revit MEP 2019使用,并将选择存储在脚本中以供将来使用。该代码是用pyRevit编写的。该脚本既可以从外壳程序也可以从外接程序按钮运行,但是进入选择模式(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)")
我不明白问题出在哪里,我的最佳猜测是在过滤器定义内。帮助字符串“选择一个空间(房间)”正确显示在左下角,并且除了视口外,其他所有东西都会变成灰色,就像我应该在视图中选择某些东西时一样。鼠标变成某种“禁止”符号。
我非常感谢您的帮助。预先感谢任何希望提供帮助的人!
答案 0 :(得分:1)
您可以在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