????1????????:???CAD ??objectArx???????????cad2012??objectArx2010 ??vs??2010
????2????????????????????objectArx???????inc??????μ?AcDbMgd.dll??AcMgd.dll?????????X86??X64????????
????3?????????????????IExtensionApplication??????????dll??????cad?????????????????Щ???????????????????????д???????Щcad????
????cad???????
????using Autodesk.AutoCAD.Runtime;
????using Autodesk.AutoCAD.ApplicationServices;
????using Autodesk.AutoCAD.DatabaseServices;
????using Autodesk.AutoCAD.EditorInput;
????using Autodesk.AutoCAD.Geometry;
????using Autodesk.AutoCAD.Windows;
????using Autodesk.AutoCAD.Interop;
????using Autodesk.AutoCAD.Interop.Common;
??????????????????????????????????????????????????????IExtensionApplication??????????????????????
????[assembly: ExtensionApplication(typeof(cadObjArx.CADExetensionCls))]
????[assembly: CommandClass(typeof(cadObjArx.CADCommandS))]
????????:
??????????????????????????????????????cad????????????????
namespace cadObjArx
{
public class CADExetensionCls : IExtensionApplication
{
public void Initialize()
{//????dll?????????????????
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
ed.WriteMessage(" ????cadObjArx ");
load();
}
public void Terminate()
{//????????????
Document doc = Application.DocumentManager.MdiActiveDocument;
doc.LockDocument(DocumentLockMode.NotLocked?? ""?? ""?? false);
}
private void load()
{   //??????????????????????????????????InitT????
//????????????cad??com???????????????cad??Autodesk.AutoCAD.Interop??Autodesk.AutoCAD.Interop.Common????com?????
AcadMenuGroups menugroups = (AcadMenuGroups)Application.MenuGroups;
AcadToolbar toolbar = menugroups.Item(0).Toolbars.Add("Test");
AcadToolbarItem item = toolbar.AddToolbarButton(toolbar.Count?? "InitT"?? "????"?? "InitT ");
item.SetBitmaps("????16x16.bmp"?? "????32x32.bmp");
toolbar.Dock(AcToolbarDockStatus.acToolbarDockTop);
}
}
public class CADCommandS
{
[CommandMethod("InitT"??CommandFlags.Modal)]//????????????????cad????
public void Init()
{//??????????????????????????仰??????????????????????????????????????????
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
ed.WriteMessage("????init ");
}
[CommandMethod("ListEntities")]
public  void ListEntities()
{//???????????cad????????е????//??????????д?????????
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
BlockTable acBlkTbl;
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId?? OpenMode.ForRead) as BlockTable;
BlockTableRecord acBlkTblRec;
acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace]?? OpenMode.ForRead) as BlockTableRecord;
int nCnt = 0;
acDoc.Editor.WriteMessage(" Model space objects: ");
foreach (ObjectId acObjId in acBlkTblRec)
{
acDoc.Editor.WriteMessage(" " + acObjId.ObjectClass.DxfName +":"+ acObjId.Handle.Value.ToString());
nCnt = nCnt + 1;
}
if (nCnt == 0)
{
acDoc.Editor.WriteMessage(" No objects found.");
}
else
{
acDoc.Editor.WriteMessage(" Total {0} objects."?? nCnt);
}
}
}
}
}