cad.net HandOverTo替換對象
在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,并可當作新對象繼續使用
完

浙公網安備 33010602011771號