public static void CopyMove(ObjectId[] objectIds, Vector3d disp)
{
Document doc = AcApSrvApp.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
foreach (ObjectId Id in objectIds)
{
Entity ent = (Entity)tr.GetObject(Id, OpenMode.ForRead);
//ObjectId ownerId = ent.OwnerId;
IdMapping IdMap = new IdMapping();
ObjectIdCollection idsColl = new ObjectIdCollection(new ObjectId[] { Id });
//db.DeepCloneObjects(idsColl, ownerId, IdMap, false);
db.DeepCloneObjects(idsColl, db.CurrentSpaceId, IdMap, false);
foreach (IdPair pair in IdMap)
{
if (pair.IsPrimary)
{
Entity en = tr.GetObject(pair.Value, OpenMode.ForWrite, false, true) as Entity;
//Get current layer
LayerTable LayerTbl = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;
LayerTableRecord LayerTblRec = tr.GetObject(LayerTbl[en.Layer], OpenMode.ForWrite) as LayerTableRecord;
//If block on locked layer, don't copy it
if (!LayerTblRec.IsLocked)
{
if (en != null)
{
en.TransformBy(Matrix3d.Displacement(disp));
newobjectIds.Add(en.Id);
}
}
}
}
}
tr.Commit();
}
}