溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Revit二次開發(fā)的解決方式

發(fā)布時間:2020-07-11 13:18:34 來源:網絡 閱讀:399 作者:wx5d779105551a6 欄目:軟件技術

根據當前的程序,有以下幾個點進行改良
1 日志每次revit生成的之后,就不會del,下次再次生成的時候,發(fā)現有日志,就不會在生成。采用將日志的名字修改為時間戳,每次運行的時候,產生獨立的日志文件。

示例代碼

string date = DateTime.Now.ToLongDateString().ToString() + DateTime.Now.ToLongTimeString();
date = date.Replace(":", "_");
roller.File = @"EventLogByrevit" + date + ".txt";

這個代碼放在log.cs中。在revit的命令中執(zhí)行。這種方法調試的時候很有用。

2 在Model類中,增加一個每次都drop原來的庫,單獨重新生成一個庫。
在Model類中的構造函數中增加

Database.SetInitializer<m構件>(new DropCreateDatabaseAlways<m構件>());

3 DB中增加一個時間字段,看是什么時間保存的數據。

4 DB中增加一個文件名的字段,這個文件名是全文件名,所以在類中設置這個屬性的時候,要保持1000個字符左右。不然個別的會很長,在保持的時候會報錯。

5 在保持的時候,因為構建比較多,從網站上下載構建
在Negut的控制臺上,執(zhí)行以下命令
Install-Package Z.EntityFramework.Extensions -Version 3.22.6
就會安裝一個Extension,它支持批量保持。

6 如果數據量還是很大,那么就將數據分為10000個為一個單位,分的方法可參考

     List<Entity.e構件實體> templist = new List<Entity.e構件實體>();
                       int separate = 10000;
            int mod整數 = count / separate;
            int mod余數 = count % separate;

            for (int j = 1; j <= mod整數; j++)
            {
                templist.AddRange(l構件實體列表.Skip((j-1) * separate).Take(separate));
                m.d構件實體數據處理.AddRange(templist);
                m.BatchSaveChanges();
                templist.Clear();
            }
            if (mod余數 != 0)
            {
                templist.AddRange(l構件實體列表.Skip(mod整數 * separate).Take(mod余數));
                m.d構件實體數據處理.AddRange(templist);
                m.BatchSaveChanges();
                                    templist.Clear();
            }
            Common.utility.WriteDebugLog("數據庫存儲結束,采用了batchsavechange的方法。");

分為10000個為一個單位進行保持。

7 為了便于發(fā)現問題,在系統(tǒng)中增加日志的記錄地方,采用
Common.utility.WriteDebugLog(string.Format("正在處理第{0}個文件,文件名是{1},一共有{2}個文件\r\n",i,filename, filenameList.Count()));
這種格式,比較好。

8 在Revit中執(zhí)行一個目錄下所有的revit文件。
打開一個revit文件,運行這個插件。
這個插件一開始采用以下的代碼
string path = @"d:\1";
string[] filenameList = Directory.GetFiles(path, "*.rvt", SearchOption.AllDirectories);

        app = commandData.Application.Application;
        Document doc;
        foreach (var x in filenameList)
        {
            Common.utility.WriteDebugLog(string.Format("個文件,文件名是{0}\r\n",x));
        }
        int i = 1;
        foreach (var filename in filenameList)
        {
            Common.utility.WriteDebugLog(string.Format("正在處理第{0}個文件,文件名是{1},一共有{2}個文件\r\n",i,filename, filenameList.Count()));
            i++;

9 ui的地方抽象一個類出來,將每個文檔的處理邏輯放入到單獨的一個類中
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI