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 });
}
通过判断版本号,反射调用不同的程序集,以达到目的。