python - 使用 RevitPythonShell 覆盖事件 View 中的图形设置

标签 python revit revitpythonshell

我正在尝试使用 RevitPythonshell 在 Revit 的 3D View 中覆盖墙的图形。我设法使用 Python 节点在 Dynamo 中完成这项工作。

到目前为止我有以下代码;

import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager 

from System.Collections.Generic import List


doc = DocumentManager.Instance.CurrentDBDocument

TransactionManager.Instance.EnsureInTransaction(doc)

walls = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls)
elements = walls.OfCategory(BuiltInCategory.OST_Walls).WhereElementIsNotElementType()


color = Autodesk.Revit.DB.Color(255,50,50)
ogs = OverrideGraphicSettings().SetProjectionFillColor(color)


for i in elements:
    doc.ActiveView.SetElementOverrides((i.Id), ogs)


TransactionManager.Instance.TransactionTaskDone()

当我在 RevitPythonShell 中运行它时,它什么也不做。我没有得到任何错误或任何东西。当我打印 doc.ActiveView.SetElementOverrides((i.Id), ogs) 时,它返回 None 。

我在这里缺少什么?我处于 Revit 的 3D View 中,这是事件 View 。我正在开始和结束交易。

Here与 Dynamo 节点中的 Python 节点中的代码有些相同。

最佳答案

经过一些调整,您的代码就可以工作了:

import clr

clr.AddReference('RevitAPI') 
clr.AddReference('RevitAPIUI') 
from Autodesk.Revit.DB import * 
from Autodesk.Revit.UI import *

app = __revit__.Application
doc = __revit__.ActiveUIDocument.Document

elements = list(FilteredElementCollector(doc, doc.ActiveView.Id))

color = Color(255,50,50)
ogs = OverrideGraphicSettings().SetProjectionFillColor(color)

t = Transaction(doc, 'Color Walls')
t.Start()
try:
    for i in elements:
        if i.Category.Name == 'Walls':
            doc.ActiveView.SetElementOverrides((i.Id), ogs)
            print 'element overridden'
except Exception as e:
    print '- Failed to override -'
    print '- ' + str(e) + ' -'
t.Commit()
  • 当您将 View.Id 传递给 FilteredElementCollector 时,您会收集 该 View 中可见的所有内容
  • RevitPythonShell 中的事务处理方式与 Dynamo 略有不同,您可以围绕实际修改数据库的代码打开和关闭它们
  • 当您处于事务中时,将代码包装在 try/except block 中是值得的,因为即使存在错误,您也需要事务完成

关于python - 使用 RevitPythonShell 覆盖事件 View 中的图形设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47921606/

相关文章:

revit-api - 如何在Python(Revit Dynamo)中自动处理DialogBoxShowing事件?

python - FFMPEG 错误代码 : "Cannot find a matching stream for unlabeled input pad 0 on filter Parsed_scale_10"; [complex_filter], [-loop 1],[覆盖]

python - 如何按计划在后台运行我的 python 脚本?

c# - 使用 c# api 读取和导出计划多个 revit 文件

c# - 从包含此类信息的元素中获取有关楼梯运行和楼梯的信息

python - Revit Python 宏和 RevitPythonShell 模块,或加载的包

python - Revit Python 拾取对象/选择对象

python - 如何在任何给定时间点从给定字符串中找到前 10 个单词。 Python

python - 返回一个实值的、相位加扰的时间序列

c# - 同步或重新加载后更改的 Revit API 2013 文档看不到新添加或更改的元素