調用初始化賦值
初始化圖元的時候必須調用一下Entity.SetDatabaseDefaults();
尤其是初始化填充(可以看到我代碼做了一次預處理測試).
因為acad的不同版本會修改初始化賦值的順序,導致此問題,
而且它報錯的地方可能並不是提交事務到數據庫時,
而是計算圖元顯示時: hatch.EvaluateHatch(true);//計算填充並顯示
,例如通過jig觸發了.
這個操作是通用於所有圖元的,
當構造函數沒有可輸入參數時候才需要,如果是有重載參數的,最好利用含有參數來實現初始化(因為它更偏向於規范,而非必然報錯)
舉個簡單例子:
ok:
var ha = new Hatch(x,xx,xxx);
ha.其他工作
ok:
var ha = new Hatch();
ha.SetDatabaseDefaults();
ha.其他工作
不ok:
var ha = new Hatch();
ha.其他工作
誰特喵記得住啊,所以我都是把所有新建圖元封裝一次的,注意封裝內實現就行了.
可以參考李小科視頻上面的,不過就是不要抄它事務放子函數就行了(把事務傳參進去子函數).
如果你記得住,那就當我沒說.
相關閱讀
cad.net 封裝填充類
AutoCAD.NET關於Hatch填充
初始化賦值和修改
數據庫上已有的屬性塊使用ScaleFactors和Position修改並不改變圖形,這是為什么呢?
這是由於entity.屬性(字段)是用來初始化的,之后再去修改就最好不要用屬性(字段),而是通過矩陣去修改.
可以通過以下代碼實踐一下:
但是這些屬性(字段)又可以讀,又可以初始化改,加入數據庫之后的非矩陣部分又可以賦值,例如"文字內容",
所以只需要記住一個原則就行:新建時通過屬性或者字段,修改時通過矩陣
(完)