[CommandMethod("Test", CommandFlags.Session)]
public void Test()
{
DocumentCollection docMgr = AcAp.DocumentManager;
Document activeDoc = docMgr.MdiActiveDocument;
Database db = activeDoc.Database;
ObjectIdCollection idCol
= new ObjectIdCollection
(); try
{
// Create a circle in the active document
using (DocumentLock docLock = activeDoc.LockDocument())
using (Transaction tr = db.TransactionManager.StartTransaction())
{
BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
Circle circle
= new Circle
(new Point3d
(300.0,
300.0,
0.0), Vector3d
.ZAxis,
100.0); circle.SetDatabaseDefaults();
ObjectId id = btr.AppendEntity(circle);
idCol.Add(id);
tr.AddNewlyCreatedDBObject(circle, true);
tr.Commit();
}
// Create a new document, clone the circle from the active document and change its radius and color
Document newDoc = docMgr.Add("acadiso.dwt");
using (DocumentLock docLock = newDoc.LockDocument())
using (Transaction tr = newDoc.TransactionManager.StartTransaction())
{
IdMapping idMap
= new IdMapping
(); BlockTable bt = (BlockTable)tr.GetObject(newDoc.Database.BlockTableId, OpenMode.ForRead);
db.WblockCloneObjects(idCol, bt[BlockTableRecord.ModelSpace], idMap, DuplicateRecordCloning.Ignore, false);
foreach (IdPair pair in idMap)
{
Circle c = tr.GetObject(pair.Value, OpenMode.ForRead) as Circle;
if (c != null)
{
c.UpgradeOpen();
c.Radius = 200.0;
c.Color = Color.FromColorIndex(ColorMethod.ByAci, 1);
}
}
tr.Commit();
}
docMgr.MdiActiveDocument = activeDoc;
}
catch (Autodesk.AutoCAD.Runtime.Exception ex)
{
AcAp.ShowAlertDialog(string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
}
}