在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安装目录下的文件全部复制到指定位置)

如果上面没有写清楚,请留言!

最新文章

  1. Web性能优化:What? Why? How?
  2. React Native APP结构探索
  3. Android手机如何通过USB共享网络给Mac?
  4. 用minidwep-gtk研究wifi
  5. iOS开发备忘录:自定义UINavigationBar背景图片和Back按钮
  6. 命令模式坚决svn树冲突(local unversioned, incoming add upon update)
  7. Useful for Android the development engineer from Github
  8. HDU 1317 XYZZY【Bellman_Ford判断正环】
  9. 1054: [HAOI2008]移动玩具 - BZOJ
  10. python学习之路-3 初始python数据类型以及文件操作
  11. DbModel
  12. c#位运算基本概念与计算过程
  13. word图片自动编号,前面加章节号
  14. LeetCode(12. 整数转罗马数字)
  15. Linux环境C程序设计
  16. 如何模拟一个http请求并把response的内容保存下载下来,导出到excel中(结尾福利)
  17. Codeforces Round #481 (Div. 3) D. Almost Arithmetic Progression
  18. MySQL优化 ----开篇
  19. [USACO5.2]蜗牛的旅行Snail Trails(有条件的dfs)
  20. 处理WebService asmx的经验

热门文章

  1. PAT 甲级 1048 Find Coins (25 分)(较简单,开个数组记录一下即可)
  2. Lombok子类与父类的@Builder注解冲突
  3. oracle数据库死锁原因及分析
  4. Delphi下Treeview控件基于节点编号的访问
  5. 【用户体验度量】用户费力度评分(CES)
  6. python迭代器、生成器、装饰器之迭代器
  7. Flutter 踩坑之build函数返回了null
  8. 【长期更新】Python使用随想笔记
  9. IBM.WMQ订阅主题,连续获取消息解决办法
  10. 当后端返回的数据是以属性做开头,怎么用length取值