使用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 = 1024 * 1024;
            byte[] bytes = new byte[size];

            
            while (stream.Read(bytes, 0, size) > 0)
            {
                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 - 4, 4);

                    //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安裝目錄下的文件全部復制到指定位置)

 

如果上面沒有寫清楚,請留言!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM