#region System using declarations
using System;
using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
using System.ComponentModel;
using System.Text.RegularExpressions;
#endregion
#region AutoCAD COM Interop using declarations
//// COM Interop References
//// AutoCAD 2006 Type Library
using Autodesk.AutoCAD.Interop;
//// AXDBLib AutoCAD/ObjectDBX Common 16.0 Type Library
using Autodesk.AutoCAD.Interop.Common;
#endregion
#region AutoCAD Managed Wrappers using declarations
//// Assembly acdbmgd .. ObjectDBX.NET Managed Wrapper
//// Assembly acmgd .. Autocad.NET Managed Wrapper
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Colors;
#endregion
#region Alias using declarations
using AcadApp = Autodesk.AutoCAD.ApplicationServices.Application;
#endregion
[assembly
: ExtensionApplication
(typeof(ClassLibraryLab03
.kwbLab03StartApp))] [assembly
: CommandClass
(typeof(ClassLibraryLab03
.Commands))]
namespace ClassLibraryLab03
{
#region CommandClass
//-------------------------------------------------------------------------------
public class
Commands
{
[CommandMethod("Lab03Help", CommandFlags.Modal)]
static public void
Lab03Help()
{
Editor ed = AcadApp.DocumentManager.MdiActiveDocument.Editor;
ed.WriteMessage("\n Testing Assembly kwbLab03 [kwb v:20051204]");
ed.WriteMessage("\n Commands : LX1, LX2, LX3, LX4, LX5");
}
//----------------------------
[CommandMethod("LX1", CommandFlags.Modal)]
public static void AssertLayerLX1()
{
Editor ed = AcadApp.DocumentManager.MdiActiveDocument.Editor;
try
{
ObjectId layerId = LibTools.CreateLayer("TestX1", 3, "HIDDEN");
ed.WriteMessage("\n layerId : " + layerId.ToString());
}
catch (Autodesk.AutoCAD.Runtime.Exception acEx)
{
ed.WriteMessage("\nError: " + acEx.Message);
return;
}
}
//----------------------------
[CommandMethod("LX2", CommandFlags.Modal)]
public static void AssertLayerLX2()
{
Editor ed = AcadApp.DocumentManager.MdiActiveDocument.Editor;
try
{
ObjectId layerId = LibTools.CreateLayer(" ", 113, "CONTINUOUS");
ed.WriteMessage("\n layerId : " + layerId.ToString());
}
catch (Autodesk.AutoCAD.Runtime.Exception acEx)
{
ed.WriteMessage("\nError: " + acEx.Message);
return;
}
}
//----------------------------
[CommandMethod("LX3", CommandFlags.Modal)]
public static void AssertLayerLX3()
{
Editor ed = AcadApp.DocumentManager.MdiActiveDocument.Editor;
try
{
ObjectId layerId = LibTools.CreateLayer("TestX3", 13, "NONE");
ed.WriteMessage("\n layerId : " + layerId.ToString());
}
catch (Autodesk.AutoCAD.Runtime.Exception acEx)
{
ed.WriteMessage("\nError: " + acEx.Message);
return;
}
}
//----------------------------
[CommandMethod("LX4", CommandFlags.Modal)]
public static void AssertLayerLX4()
{
Editor ed = AcadApp.DocumentManager.MdiActiveDocument.Editor;
try
{
ObjectId layerId = LibTools.CreateLayer("Test X4", 230, "DOT");
ed.WriteMessage("\n layerId : " + layerId.ToString());
}
catch (Autodesk.AutoCAD.Runtime.Exception acEx)
{
ed.WriteMessage("\nError: " + acEx.Message);
return;
}
}
//----------------------------
[CommandMethod("LX5", CommandFlags.Modal)]
public static void AssertLayerLX5()
{
Editor ed = AcadApp.DocumentManager.MdiActiveDocument.Editor;
try
{
ObjectId layerId = LibTools.CreateLayer("TestX5", 30000, "");
ed.WriteMessage("\n layerId : " + layerId.ToString());
}
catch (Autodesk.AutoCAD.Runtime.Exception acEx)
{
ed.WriteMessage("\nError: " + acEx.Message);
return;
}
}
//----------------------------
}
#endregion
#region MainApp core
//-------------------------------------------------------------------------------
//public class Class1
//{
//}
#endregion
#region LibraryTools
//-------------------------------------------------------------------------------
public class LibTools
{
//----------------------------
public static ObjectId CreateLayer(string layerName, short layerColor, string linetypeName)
{
ObjectId layerId;
Database db = HostApplicationServices.WorkingDatabase;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
LayerTable lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForWrite);
if (lt.Has(layerName))
{
layerId = lt[layerName];
if (layerId.IsErased)
{
LayerTableRecord ltr = (LayerTableRecord)tr.GetObject(layerId, OpenMode.ForWrite, true);
ltr.Erase(false);
}
}
else // create the layer here.
{
if (layerColor > 255)
{
LibTools.PrintToCmdLine(string.Format(
"\n ERROR: Could not use LayerColor \"{0}\", using O instead.", layerColor));
layerColor = 0;
}
LayerTableRecord ltr
= new LayerTableRecord
(); ltr.Name = layerName;
ltr.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(ColorMethod.ByAci, layerColor);
ltr.LinetypeObjectId = GetOrLoadLinetypeId(linetypeName, db);
layerId = lt.Add(ltr);
tr.AddNewlyCreatedDBObject(ltr, true);
}
tr.Commit();
}
return layerId;
}
//----------------------------
public static ObjectId
GetOrLoadLinetypeId(string linetypeName, Database db)
{
ObjectId ltypeId
= GetSymbolTableRecId
(typeof(LinetypeTableRecord
), linetypeName, db
); if (ltypeId.IsNull)
{
string[] ltypeFiles;
ltypeFiles
= new string[3]; if (db.Measurement == MeasurementValue.Metric)
{
LibTools.PrintToCmdLine(" \n Using Metric Linetypes");
ltypeFiles[0] = "acadiso.lin";
ltypeFiles[1] = "acad.lin";
ltypeFiles[2] = "ltypeshp.lin";
}
else
{
LibTools.PrintToCmdLine(" \n Using English Linetypes");
ltypeFiles[0] = "acad.lin";
ltypeFiles[1] = "acadiso.lin";
ltypeFiles[2] = "ltypeshp.lin";
}
//---------------
int len = ltypeFiles.Length;
for (int i = 0; i < len; i++)
{
try
{
// try to load the linetype from the external file
db.LoadLineTypeFile(linetypeName, ltypeFiles[i]);
ltypeId
= GetSymbolTableRecId
(typeof(LinetypeTableRecord
), linetypeName, db
); if (ltypeId.IsNull == false)
return ltypeId;
}
catch (Autodesk.AutoCAD.Runtime.Exception acEx)
{
if (acEx.Message == "eUndefinedLineType")
{
LibTools.PrintToCmdLine(string.Format(
"\n ERROR: Could not load linetype \"{0}\", using CONTINUOUS instead.",
linetypeName));
ltypeId = db.ContinuousLinetype;
return ltypeId;
}
else
{
LibTools.PrintToCmdLine(string.Format(
"\n ERROR: in 'LibTools.GetOrLoadLinetypeId' loading linetype \"{0}\".",
linetypeName));
throw acEx;
}
}
}
}
return ltypeId;
}
//---------------------------- awej MgdDbg rev.
public static ObjectId
GetSymbolTableRecId(System.Type classType, string symName, Database db)
{
ObjectId tblId = GetSymbolTableId(classType, db);
ObjectId recId
= new ObjectId
();
using (Transaction tr = db.TransactionManager.StartTransaction())
{
SymbolTable tbl = (SymbolTable)tr.GetObject(tblId, OpenMode.ForRead);
if (tbl.Has(symName)) // TBD: should indexer return ObjectId.null instead of throwing exception
recId = tbl[symName];
tr.Commit();
}
return recId;
}
//---------------------------- awej MgdDbg rev.
public static ObjectId
GetSymbolTableId(System.Type classType, Database db)
{
Debug.Assert(classType != null);
Debug.Assert(db != null);
if (classType
== typeof(BlockTableRecord
)) return db.BlockTableId;
else if (classType
== typeof(DimStyleTableRecord
)) return db.DimStyleTableId;
else if (classType
== typeof(LayerTableRecord
)) return db.LayerTableId;
else if (classType
== typeof(LinetypeTableRecord
)) return db.LinetypeTableId;
else if (classType
== typeof(TextStyleTableRecord
)) return db.TextStyleTableId;
else if (classType
== typeof(RegAppTableRecord
)) return db.RegAppTableId;
else if (classType
== typeof(UcsTableRecord
)) return db.UcsTableId;
else if (classType
== typeof(ViewTableRecord
)) return db.ViewTableId;
else if (classType
== typeof(ViewportTableRecord
)) return db.ViewportTableId;
else
{
Debug.Assert(false);
ObjectId nullObj
= new ObjectId
(); return nullObj;
}
}
//----------------------------
public static void
PrintToCmdLine(string str)
{
Editor ed = AcadApp.DocumentManager.MdiActiveDocument.Editor;
ed.WriteMessage(str);
}
//----------------------------
}
#endregion
#region Public class StartApp
//-------------------------------------------------------------------------------
/// <summary>
/// The entry point for AutoCAD.
/// </summary>
public class
kwbLab03StartApp : IExtensionApplication
{
public void
Initialize()
{
Editor ed = AcadApp.DocumentManager.MdiActiveDocument.Editor;
Commands.Lab03Help();
ed.WriteMessage("\n Type 'Lab03Help' at the Command Line for assistance ...");
}
public void
Terminate()
{
// Does Nothing ... can't unload NET assembly ...
}
}
#endregion
}