从Rhino/Grasshopper调用MDriven Eco类时创建EcoSpace报错“Model not Ecoified”
解决MDriven EcoSpace在Rhino/Grasshopper中实例化报错的问题
核心问题分析
“Model not Ecoified”报错本质是MDriven无法定位到已完成Ecoify处理的模型元数据,或是外部调用场景下的初始化流程不符合要求。
分步解决方案
1. 确认Eco包的Ecoify状态
- 确保你的“EcoClasses”包已完成Ecoify构建:在MDriven Designer中右键包选择「Ecoify」,生成对应的EcoSpace类和元数据文件。
- 检查输出目录是否生成了
EcoClasses.mdrivenmodel文件,这是模型元数据的核心载体,必须与EcoClasses.dll一同被GH组件引用。
2. 修正EcoSpace初始化代码
外部应用(如GH)中实例化EcoSpace需显式指定元数据路径,不能直接使用默认构造函数,修改代码如下:
// 拼接元数据文件路径(确保文件与GH组件DLL同目录,或使用绝对路径) var modelPath = Path.Combine(Assembly.GetExecutingAssembly().Location, "EcoClasses.mdrivenmodel"); // 用带元数据路径的构造函数实例化EcoSpace EcoSpace ecoSpace = new EcoClassesEcoSpace(modelPath); // 激活EcoSpace ecoSpace.Active = true;
3. 检查GH组件的引用配置
- 在GH组件项目中,确保引用以下MDriven核心DLL:
MDriven.Eco.dllMDriven.Framework.dll- 你的
EcoClasses.dll及对应的EcoClasses.mdrivenmodel文件
- 设置
EcoClasses.mdrivenmodel的属性:将「复制到输出目录」设为「始终复制」,确保文件能被GH正常加载。
4. 修正Eco对象创建代码
原代码存在变量名不匹配的错误,同时建议使用类型而非字符串类名提升安全性,修正后:
public EcoAppKernel CreateAppKernel() { var objWrapper = ecoSpace.ObjectFactory.CreateNewObject(typeof(EcoAppKernel)); return objWrapper.AsObject as EcoAppKernel; } // 调用创建逻辑 EcoAppKernel _kernel = CreateAppKernel();
5. 适配GH的沙箱环境限制
Rhino/Grasshopper的运行沙箱可能限制文件读取,需注意:
- 将GH组件DLL和元数据文件放在Rhino可访问的目录(如默认插件目录),避免放在系统权限保护路径(如
C:\Program Files)。 - 测试阶段可先将所有文件放在桌面,验证功能正常后再迁移至正式目录。
内容的提问来源于stack exchange,提问作者RIL
相关产品推荐
相关产品推荐

