使用RevitNet操作多个版本的Revit
在Revit二次开发中,如果只是简单的从模型中提取数据或不需要界面对Revit进行修改,我们一般使用RevitNet。
如果对RevitNet不熟悉的,请参考:RevitAPI进阶之独立进程内读取、写入Revit文件.
我们接下来对使用过程中出现的问题做一下总结:
1,异常:SEHException: 外部组件发生异常。
解决方法:Revit 内核必须加 STAThread 标签
RevitCoreContext.Instance.Run();
2,在Windows应用程序提示无法加载RevitNET.dll。
可能的原因是:目标平台为Any CPU,首先32位。
- 应该取消首先32位的对勾,或者更改为X64
- 目标框架 注意与引用的项目一致(主要针对其它dll)
3,如何跨线程访问吗?
将RevitNet封装为一个控制台应用程序(Revit启动程序),然后通过命令行去启动Revit启动程序。
在启动过程可以传入参数。
Process process=new Process();//AppDomain.CurrentDomain.BaseDirectory +
process.StartInfo.FileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory ,"ExportStart.exe");//执行的exe路径
process.StartInfo.UseShellExecute = false;//不显示shell
process.StartInfo.CreateNoWindow = true;//不创建窗口
process.StartInfo.RedirectStandardInput = true;//打开流输入
process.StartInfo.RedirectStandardOutput = true;//打开流输出
process.StartInfo.RedirectStandardError = true;//打开错误流
process.StartInfo.Arguments = "" + revitCmd + " \"" + filePathList.First() + "\"";//输入参数,多个参数使用空间分割,如果一个参数包含空格,使用""包括此参数
process.Start();//执行
string msg = process.StandardOutput.ReadToEnd();//读取输出
process.WaitForExit();//等待执行完成
process.Close();//结束
4,未能加载由“RevitNET.dll”导入的过程?
解决办法:
查看环境变量,将RevitInstallPath的path放至第一位.
其它涉及到操作多个版本Revit 的问题(这里说的是Revit文件的版本可能是2018,2019):
不启动获取Revit文件的版本
/// <summary>
/// 获取Revit文件的版本
/// </summary>
/// <param name="path">文件路径</param>
/// <returns></returns>
public static string GetRevitVision(string path)
{
string revitVision = null;
FileStream stream = new FileStream(path, FileMode.Open); int size = * ;
byte[] bytes = new byte[size]; while (stream.Read(bytes, , size) > )
{
string str = Encoding.Unicode.GetString(bytes); string pattern = @"Autodesk Revit \d{4}";
var match = Regex.Match(str, pattern);
if (match.Success)
{
revitVision = match.Value.Substring(match.Length - , ); //File.WriteAllText(@"D:\abc.txt", str);
break;
}
}
return revitVision;
}
1,程序运行目录(OutputDll)能否删除RevitAPI.dll或RevitAPIUI.dll等相关dll?
可以,设置环境变量后,Revit会去Revit安装目录下查找以上dll。
注意:如果如果程序运行目录(OutputDll)存在Revit相关的dll,版本必须正确,否则会报错。(如果不能保证版本正确,不如将Revit相关dll全部删除,好办法^_^)
2,RevitNet启动程序,能否取消RevitAddInUtility.dll的引用?
可以取消,RevitAddInUtility.dll 此dll的作用是用于获取Revit的安装目录,可以手动指定Revit的安装目录。从而取消此dll的引用。(完全可以不安装Revit,只复制Revit需要的dll,但区别那些dll是Revit需要的会很麻烦。不过可以将Revit安装目录下的文件全部复制到指定位置)
如果上面没有写清楚,请留言!
最新文章
- Web性能优化:What? Why? How?
- React Native APP结构探索
- Android手机如何通过USB共享网络给Mac?
- 用minidwep-gtk研究wifi
- iOS开发备忘录:自定义UINavigationBar背景图片和Back按钮
- 命令模式坚决svn树冲突(local unversioned, incoming add upon update)
- Useful for Android the development engineer from Github
- HDU 1317 XYZZY【Bellman_Ford判断正环】
- 1054: [HAOI2008]移动玩具 - BZOJ
- python学习之路-3 初始python数据类型以及文件操作
- DbModel
- c#位运算基本概念与计算过程
- word图片自动编号,前面加章节号
- LeetCode(12. 整数转罗马数字)
- Linux环境C程序设计
- 如何模拟一个http请求并把response的内容保存下载下来,导出到excel中(结尾福利)
- Codeforces Round #481 (Div. 3) D. Almost Arithmetic Progression
- MySQL优化 ----开篇
- [USACO5.2]蜗牛的旅行Snail Trails(有条件的dfs)
- 处理WebService asmx的经验