You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何通过PyRevit扩展的Python脚本启动Revit Dynamo .dyn文件?求示例

当然可以!用PyRevit调用Dynamo .dyn脚本完全可行

把现成的Dynamo脚本集成到PyRevit功能区按钮里是非常实用的需求,下面我会给你一个基础示例,以及需要注意的关键细节。

核心原理

PyRevit基于Revit API运行,而Dynamo本身也提供了可通过Revit API调用的交互接口——我们可以通过Dynamo.Applications命名空间下的类来加载、运行指定的.dyn文件,实现PyRevit按钮触发Dynamo工作流的效果。

基础示例代码

下面是一个可直接用于PyRevit的Python脚本,它会加载并运行指定路径的Dynamo脚本:

import clr
import os

# 导入Revit和Dynamo相关程序集
clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *

clr.AddReference('DynamoRevitDS')
clr.AddReference('DynamoRevit')
from Dynamo.Applications import DynamoRevit, HostApplication

# 获取当前Revit应用实例
uidoc = __revit__.ActiveUIDocument
doc = uidoc.Document

def execute_dynamo_script(dyn_file_path):
    # 初始化Dynamo应用对象
    dynamo_app = DynamoRevit()
    
    try:
        # 加载指定的Dynamo脚本
        dynamo_app.OpenScript(dyn_file_path)
        # 运行脚本
        dynamo_app.Run()
        print("✅ Dynamo脚本运行完成!")
    except Exception as ex:
        print(f"❌ 运行Dynamo脚本时出错: {str(ex)}")

# --------------------------
# 配置你的Dynamo脚本路径
# --------------------------
# 方式1:绝对路径(适合测试)
# dyn_script_path = r"C:\Projects\YourScript.dyn"

# 方式2:相对路径(适合集成到PyRevit扩展,脚本和.dyn文件同目录)
current_script_folder = os.path.dirname(__file__)
dyn_script_path = os.path.join(current_script_folder, "YourScript.dyn")

# 执行脚本
execute_dynamo_script(dyn_script_path)

关键注意事项

  • 路径处理:推荐用相对路径(方式2),这样把PyRevit扩展打包分享时,不需要修改路径,只要.py.dyn文件放在同一文件夹即可。
  • 版本兼容性:不同Revit/Dynamo版本的API可能有细微差异,比如Dynamo 1.x和2.x的命名空间变化,如果你遇到加载程序集的错误,检查对应版本的Dynamo程序集名称。
  • 事务管理:多数Dynamo脚本会自己处理Revit事务,但如果你的PyRevit脚本需要额外操作,记得用Transaction包裹相关代码,避免冲突。
  • 运行状态:确保运行时没有其他Dynamo实例在执行脚本,否则可能出现冲突。

集成到PyRevit按钮

把上面的脚本保存为.py文件,放到你的PyRevit扩展的scripts目录下,然后在扩展的pushbutton配置(比如.pushbutton文件)里指向这个脚本,重启PyRevit后就能在功能区看到对应的按钮,点击即可运行你的Dynamo脚本。

内容的提问来源于stack exchange,提问作者user3808752

火山引擎 最新活动