Standard layer functions C#
public static void setCurrentLayer(string sLayer)
{//Kerry Brown http://www.theswamp.org/index.php?topic=7766.msg98575#msg98575
if (sLayer == "") return;
Database db=HostApplicationServices.WorkingDatabase;
ObjectId layerId=ObjectId.Null;
using(Transaction tr=db.TransactionManager.StartTransaction())
{
LayerTable pLayerTable = (LayerTable)tr.GetObject
(db.LayerTableId, OpenMode.ForRead);
if (pLayerTable.Has(sLayer))
{
layerId = pLayerTable[sLayer];
if (layerId.IsErased)
{
LayerTableRecord pExLtr = (LayerTableRecord)tr.GetObject
(layerId, OpenMode.ForWrite, true);
pExLtr.Erase(false);
}
}
else // create it...
{
LayerTableRecord pNewLTR = new LayerTableRecord();
pNewLTR.Name = sLayer;
pLayerTable.UpgradeOpen();
layerId = pLayerTable.Add(pNewLTR);
tr.AddNewlyCreatedDBObject(pNewLTR, true);
}
db.Clayer = layerId;
db.Cecolor = Color.FromColorIndex(ColorMethod.ByLayer, 256);//Added
db.Celtype = db.ByLayerLinetype; //Added
}
}
public static void setCurrentLayer(ObjectId layerId)
{
if (layerId == ObjectId.Null) return;
Database db = HostApplicationServices.WorkingDatabase;
db.Clayer = layerId;
db.Cecolor = Color.FromColorIndex(ColorMethod.ByLayer, 256);
db.Celtype = db.ByLayerLinetype;
}
[CommandMethod("SetObjLayerCurrent")]
public void SetObjLayerCurrent()
{
string sLayer = GetSubEntityLayer("Pick an object on the layer you want to make current:");
if( sLayer.Contains("|"))
{
MessageBox.Show("You can not make the x-ref layer " + sLayer +" current");
return;
}
setCurrentLayer(sLayer);
Print (sLayer + " is now the current layer. ");
}
[CommandMethod("IsolateLayer")]
public void IsolateLayer()
{
Print("Select object(s) on the layer(s) to be isolated:");
string Msg = "Select objects", sLayer;
StringCollection layerset = new StringCollection();
do
{
sLayer = GetSubEntityLayer(Msg);
if (sLayer != "")
layerset.Add(sLayer);
} while (sLayer != "");
for (int i = 0; i < layerset.Count; i++)
{
if (!layerset[i].Contains("|"))
{
setCurrentLayer(layerset[i]);
break;
}
}
Database db = HostApplicationServices.WorkingDatabase;
LayerTableRecord layer;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
LayerTable lt = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;
foreach (ObjectId layerId in lt)
{
layer = tr.GetObject
(layerId, OpenMode.ForWrite) as LayerTableRecord;
layer.IsOff = true;
}
for (int i = 0; i < layerset.Count; i++)
{
sLayer = layerset[i];
layer = tr.GetObject
(lt[sLayer], OpenMode.ForWrite) as LayerTableRecord;
layer.IsOff = false;
if (i == 0) Msg = sLayer;
else Msg = Msg + " and " + sLayer;
}
tr.Commit();
acadApp.DocumentManager.MdiActiveDocument.Editor.Regen();
Print("The isolated layer names are " + Msg);
}
}
[CommandMethod("Layerson")]
public void Layerson()
{
Database db = HostApplicationServices.WorkingDatabase;
LayerTableRecord layer;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
LayerTable lt = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;
foreach (ObjectId layerId in lt)
{
layer = tr.GetObject
(layerId, OpenMode.ForWrite) as LayerTableRecord;
layer.IsOff = false;
}
tr.Commit();
}
}
[CommandMethod("Layeroff")]
public void LayerOff()
{
Database db=HostApplicationServices.WorkingDatabase;
string msg, sLayer;
do
{
sLayer = GetSubEntityLayer("Pick an object on the layer you want to turn off:");
if (sLayer == "") return;
if(sLayer ==(string) acadApp.GetSystemVariable("CLayer"))
{
msg="\nDo you really want to turn the current layer off?";
MessageBox.Show(msg,"Layer off",MessageBoxButtons.YesNo);
}
using (Transaction tr = db.TransactionManager.StartTransaction())
{
LayerTable lt = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;
LayerTableRecord ltr = tr.GetObject
(lt[sLayer], OpenMode.ForWrite) as LayerTableRecord;
ltr.IsOff = true;
Print(sLayer + " is turned off. ");
tr.Commit();
}
} while (sLayer != "");
}
[CommandMethod("Layerfreeze")]
public void Layerfreeze()
{
Database db = HostApplicationServices.WorkingDatabase;
string msg, sLayer, curLayer = (string)acadApp.GetSystemVariable("CLayer");
do
{
sLayer = GetSubEntityLayer("Pick an object on the layer you want to freeze:");
if (sLayer == "") return;
if (sLayer ==curLayer)
{
msg = "\nDo can not freeze the current layer?";
MessageBox.Show(msg, "Freeze");
}
else
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
LayerTable lt = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;
LayerTableRecord ltr = tr.GetObject
(lt[sLayer], OpenMode.ForWrite) as LayerTableRecord;
ltr.IsFrozen = true;
Print(sLayer + " is frozen. ");
tr.Commit();
}
}
} while (sLayer != "");
}
[CommandMethod("Thaw")]
public void ThawAll()
{
Database db = HostApplicationServices.WorkingDatabase;
LayerTableRecord layer;
string curLayer = (string)acadApp.GetSystemVariable("CLayer");
using (Transaction tr = db.TransactionManager.StartTransaction())
{
LayerTable lt = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;
foreach (ObjectId layerId in lt)
{
layer = tr.GetObject
(layerId, OpenMode.ForWrite) as LayerTableRecord;
if(layer.Name!=curLayer)
layer.IsFrozen = false;
}
tr.Commit();
acadApp.DocumentManager.MdiActiveDocument.Editor.Regen();
}
}
static public void Print(string sMsg)
{
Document Doc = acadApp.DocumentManager.MdiActiveDocument;
Editor ed = Doc.Editor;
ed.WriteMessage("\n" + sMsg );
}