static Dictionary<string, LayerInfo> TryGetLayerStateInfo(Database db, string name)
{
using (var tr
= new OpenCloseTransaction
()) {
var layerTable = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead);
var xDictId = layerTable.ExtensionDictionary;
if (xDictId.IsNull)
return null;
var xDict = (DBDictionary)tr.GetObject(xDictId, OpenMode.ForRead);
if (!xDict.Contains("ACAD_LAYERSTATES"))
return null;
var dict = (DBDictionary)tr.GetObject(xDict.GetAt("ACAD_LAYERSTATES"), OpenMode.ForRead);
if (!dict.Contains(name))
return null;
var xrec = (Xrecord)tr.GetObject(dict.GetAt(name), OpenMode.ForRead);
var data = xrec.Data;
return null;
var values = data.AsArray();
var result
= new Dictionary
<string, LayerInfo
>(); for (int i = 0; i < values.Length; i++)
{
var val = values[i];
if (val.TypeCode == 330)
{
var layer = (LayerTableRecord)tr.GetObject((ObjectId)val.Value, OpenMode.ForRead);
result
[layer
.Name] = new LayerInfo
((int)values
[i
+ 1].Value); }
}
return result;
}
}
struct LayerInfo
{
public bool IsOff { get; }
public bool IsFrozen { get; }
public bool IsLocked { get; }
public bool IsPrintable { get; }
public LayerInfo(int flags)
{
IsOff = (flags & 1) == 1;
IsFrozen = (flags & 2) == 2;
IsLocked = (flags & 4) == 4;
IsPrintable = (flags & 8) == 8;
}
}