using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
#pragma warning disable 0618
// This line is not mandatory, but improves loading performances
[assembly: CommandClass(typeof(CopyLayerState.MyCommands))]
namespace CopyLayerState
{
public class MyCommands
{
[CommandMethod("CopyLayersState")]
public void CopyLayersStateHandler()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
if (doc == null) return;
Database curDb = doc.Database;
Editor ed = doc.Editor;
using (Database newDb = new Database(true, false))
{
ObjectIdCollection idsLayers = new ObjectIdCollection();
// Копируем все слои из чертежа
using (LayerTable lt = curDb.LayerTableId.Open(OpenMode.ForRead) as LayerTable)
{
foreach (ObjectId idLayer in lt) idsLayers.Add(idLayer);
}
IdMapping maps = new IdMapping();
curDb.WblockCloneObjects(idsLayers, newDb.LayerTableId, maps, DuplicateRecordCloning.Replace, false);
// Копируем все состояния слоёв
LayerStateManager lsmanCurDb = curDb.LayerStateManager;
LayerStateManager lsmanNewDb = newDb.LayerStateManager;
object[] names = lsmanCurDb.GetLayerStateNames(false, false).ToArray();
foreach (string name in names) {
lsmanNewDb.ImportLayerStateFromDb(name, curDb);
}
newDb.SaveAs(doc.Name.Substring(0, doc.Name.Length - 4) + "-1.dwg", DwgVersion.Current);
}
}
}
}