在cad.net中有這樣一個函式 DBObject.HandOverTo();
我曾經嘗試使用此函式,但是一直報錯
在經過我的一番查詢資料和嘗試之後,我發現,此函式無法在StartTransaction()開啟事務的上下文中使用
我嘗試使用OpenCloseTransaction,最終成功完成了替換,程式碼如下
var doc = Acap.DocumentManager.MdiActiveDocument;
var r1 = doc.Editor.GetEntity("\n選擇要被替換的物件");
if (r1.Status != PromptStatus.OK)
return;
using var tr = doc.Database.TransactionManager.StartOpenCloseTransaction();
var selectEntity = (Entity)tr.GetObject(r1.ObjectId, OpenMode.ForWrite);
var newEntity = new Line(Point3d.Origin, new Point3d(100, 100, 0));
selectEntity.HandOverTo(newEntity, true, true);
tr.AddNewlyCreatedDBObject(newEntity, true);
tr.Commit();
實現效果如下圖
可以看到,圓成功的被替換成了直線,並且id、控制代碼都保持原樣(擴充套件資料和擴充套件字典也可以保留)
其實此函式從用法上來看,命名為HandOverBy會更符合直覺
替換完成後,原來的物件會變成一個類似新建的物件,IsNewObject屬性為true,並可當作新物件繼續使用
完