nobody 发表于 2020-3-21 01:47:11

图层状态图层状态关闭/打开/冻结

谁知道如果有一种方法来检查开/关/ f
**** Hidden Message *****

gile 发表于 2020-3-21 14:12:08

嗨,你可以得到ACAD _层状态字典,它是层表扩展字典的一个条目。它包含每个图层状态的Xrecord,在Xrecord的数据中,有一个类型值(代码90 ),该值是一个整数,是使用以下值之和的位代码: 1 = IsOff2 = is frozen4 = is locked8 = is printable。   静态字典 TryGetLayerStateInfo(数据库数据库,字符串名称)。
{。
使用(var tr = new OpenCloseTransaction())。
{。
var layerTable = (LayerTable)tr,GetObject(db,LayerTableId,OpenMode。for read);。
var xDictId = layerTable,extension字典;。
if (xDictId,IsNull)。
返回null。
var xDict = (DBDictionary)tr,GetObject(xdictd,OpenMode。for read);。
如果(!xDict,包含(" ACAD _图层状态")。
返回null。
var dict = (DBDictionary)tr,GetObject(xDict,GetAt(" ACAD _图层状态"),OpenMode。for read);。
如果(!迪克特,包含(名称))。
返回null。
var xrec = (Xrecord)tr,GetObject(dict,GetAt(名称),OpenMode。for read);。
var data = xrec,数据;。
如果(数据为空)。
返回null。
变量值=数据,as array();。
var result = new Dictionary ();。
for(int I = 0;我。
{。
var val = values;。
if (val,TypeCode == 330)。
{。
var layer = (LayerTableRecord)tr,GetObject((ObjectId)val,值,OpenMode。for read);。
结果[图层,name]= new layer info((int)values,值);。
}。
}。
返回结果;。
}。
}。

结构层信息。
{。
public bool IsOff { get}。
public bool IsFrozen { get}。
公共布尔值被锁定{ get}。
public bool IsPrintable { get}。
public layer info(int flags)。
{。
IsOff =(flags & 1)= = 1;。
is frozen =(flags & 2)= = 2;。
is locked =(flags & 4)= = 4;。
is printable =(flags & 8)= = 8;。
}。
}使用示例:   。
公共静态void测试()。
{。
var doc =应用,document manager . MdiActiveDocument;。
var db = doc,数据库;。
var ed = doc,编辑;。
var pr = ed,GetString(" \ n输入图层状态名称:");。
如果(pr,地位!=提示状态,好)。
返回;。
string name = pr,StringResult。
var layerStateInfo = TryGetLayerStateInfo(db,name);。
if(layerStateInfo = = null)。
{。
ed,write message($ " \ n找不到层状态“{ name }”);。
返回;。
}。
{。
foreach(layerStateInfo中的变量条目)。
{。
变量信息=条目,价值;。
ed,WriteMessage($"\n{entry,Key} IsOff: {info。IsOff} IsFrozen: {info,IsFrozen} " +。
$ "被锁定:{info,IsLocked} IsPrintable: {info,IsPrintable }”);。
}。
}。
}。

nobody 发表于 2020-3-25 02:31:36

谢谢吉尔斯
页: [1]
查看完整版本: 图层状态图层状态关闭/打开/冻结