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,并可当作新对象继续使用
完