如何通过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




