Тема: Не работает вставка
Всем доброго времени суток. Не работает вставка в текущий чертеж из другого чертежа. Код был найден на просторах инета (с отрисовкой на курсоре):
public static void InsertFromDwgFile(string fileName) { try { SetFocus(Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Window.Handle); Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; Editor ed = doc.Editor; Point3d ptNew = Point3d.Origin; using (doc.LockDocument()) { Database currentDb = doc.Database; ObjectIdCollection ids = new ObjectIdCollection(); IdMapping idMap = new IdMapping(); using (Transaction tr = doc.TransactionManager.StartTransaction()) { BlockTable currBt = (BlockTable)tr.GetObject(currentDb.BlockTableId, OpenMode.ForRead); BlockTableRecord currBtr = (BlockTableRecord)tr.GetObject(currBt[BlockTableRecord.ModelSpace], OpenMode.ForRead); using (Database sourceDb = new Database(false, false)) { sourceDb.ReadDwgFile(fileName, System.IO.FileShare.ReadWrite, false, ""); using (Transaction sourcetr = sourceDb.TransactionManager.StartTransaction()) { ObjectIdCollection sourceIds = new ObjectIdCollection(); using ( BlockTableRecord sourceBtr = (BlockTableRecord)sourcetr.GetObject(sourceDb.CurrentSpaceId, OpenMode.ForRead) ) { if (sourceBtr != null) { sourceIds = new ObjectIdCollection(); foreach (ObjectId id in sourceBtr) { if (!id.IsNull && id.IsValid) //optional sourceIds.Add(id); } sourcetr.Commit(); } if (sourceIds.Count != 0) idMap = new IdMapping(); sourceDb.WblockCloneObjects(sourceIds, currBtr.ObjectId, idMap, DuplicateRecordCloning.Ignore, false); } } } foreach (IdPair ip in idMap) { if (ip.IsPrimary) ids.Add(ip.Value); } var copied = new ObjectId[ids.Count]; ids.CopyTo(copied, 0); ed.SetImpliedSelection(copied); PromptSelectionResult psr = ed.SelectImplied(); if (psr.Status == PromptStatus.OK) { var ppr = ed.Drag( psr.Value, "\nУкажите точку вставки: ", delegate(Point3d pt, ref Matrix3d mtx) { if (ptNew == pt) { return SamplerStatus.NoChange; } mtx = Matrix3d.Displacement( ptNew.GetVectorTo(pt) ); return SamplerStatus.OK; } ); if (ppr.Status == PromptStatus.OK) { var mtx = Matrix3d.Displacement( ptNew.GetVectorTo(ppr.Value) ); foreach (SelectedObject sobj in psr.Value) { var en = tr.GetObject(sobj.ObjectId, OpenMode.ForRead, false) as Entity; if (en != null) { en.UpgradeOpen(); en.TransformBy(mtx); en.DowngradeOpen(); } } } else { foreach (SelectedObject sobj in psr.Value) { var en = tr.GetObject(sobj.ObjectId, OpenMode.ForWrite, false) as Entity; if (en != null) { en.Erase(true); } } } ed.SetImpliedSelection(new ObjectId[] { }); tr.Commit(); } } } } catch (Autodesk.AutoCAD.Runtime.Exception ex) { Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(ex.Message + "\n" + ex.StackTrace + "\n" + ex.TargetSite); } }
Вся фишка в том, что у меня работает, а у человека в другом городе - нет. И я не могу понять почему.
Скрин ошибки прилагаю. Надеюсь на свежие идеи)