cad.net 切換圖層鎖定狀態后,圖元無暗顯的問題
autocad.net 切換圖層鎖定狀態后,圖元無暗顯的問題
在cad二次開發中,我發現使用.net切換圖層的鎖定狀態后,命令結束,圖元并不會亮顯(或暗顯),失去了原有命令的效果
使用以下api可以解決
ObjectId[] layerIds;
LayerUtilities.RegenLayers(layerIds,LayerUtilities.RegenPending);
其中layerIds是你要刷新顯示的圖層表記錄的id列表
但是我發現,此api在cad2015和cad2018上是有差異的,在cad2018上使用此函數會報錯,因為cad2015到cad2024的api都是大概相同的,一般編譯一個版本即可通用。
但此api在在cad2017版本修改到了CoreLayerUtilities類中,導致無法在低版本中使用,大家可以在使用的時候使用條件編譯即可。
如果不想為了這一個地方添加復雜的條件編譯,可以采用反射的方式
public static void RegenLayers(IEnumerable<ObjectId> objectIds)
{
var type = Acaop.Version.Major >= 21
? Assembly.Load("accoremgd")?.GetType("Autodesk.AutoCAD.Internal.CoreLayerUtilities")
: Assembly.Load("acmgd")?.GetType("Autodesk.AutoCAD.Internal.LayerUtilities");
var mi = type?.GetMethods().FirstOrDefault(e => e.Name == "RegenLayers");
var pi = type?.GetProperties().FirstOrDefault(e => e.Name == "RegenPending");
var regenPending = (int)(pi?.GetValue(null) ?? 0);
mi?.Invoke(null, new object[] { objectIds.ToArray(), regenPending });
}
通過判斷版本號,反射調用不同的程序集,以達到目的。

浙公網安備 33010602011771號