CrockettScience 发表于 2019-3-13 20:32:17

需要禁用撤销记录

我们的。NET plugin for AutoCAD 2018有某些调用编辑器的事件处理程序。CommandAsync()在我们制作的某些其他隐藏命令上。除了如果用户在这样的事件触发后点击撤销,被调用的命令在撤销堆栈中被捕获之外,这个系统工作得很好。
我们的事件处理程序已经订阅了某些撤消事件,所以我想禁用记录这些调用的外部命令。
数据库。DisableUndoRecording(true)一定是坏了什么的。实际上那里什么也没发生。我试过CommandFlags。NoUndoMarker,但没什么区别。这可能是因为我们在这些调用中打开了一个事务并修改了数据库。
有人有任何建议或见解吗?
**** Hidden Message *****

CrockettScience 发表于 2019-3-13 22:01:38

嗨,
欢迎来到沼泽
尝试使用OpenCloseTransaction

CrockettScience 发表于 2019-3-14 13:24:06

我也试过了。无更改。
这在其他地方对其他人有用,但在我的特定实例中似乎没有改变任何东西。在这种交易的表面之下,有没有可能破坏它的东西?撤消和事务的意义究竟是什么?

CrockettScience 发表于 2019-3-15 05:53:39

这在bricscad中是可行的。您不必使用事务,只需确保dbobjects被处置,使用using语句即可轻松完成

公共void CreateTableFormul()
{
Document doc=Application.DocumentManager.MdiActiveDocument
数据库db=doc.Database
编辑器ed=doc.Editor
ObjectId ModelSpaceId=SymbolUtilityServices.GetBlockModelSpaceId(db)
使用(BlockTableRecord btr=ModelSpaceId.Open(OpenMode.ForRead)作为BlockTableRecord)
{
db.DisableUndoRecording(真)
foreach(btr中的var id)
{
使用(实体ent=id.Open(OpenMode.ForWrite)作为实体)
{
ent。层=“0”
}
}
db.DisableUndoRecording(假)
}
}
编辑kdub:代码类型已更改。

CrockettScience 发表于 2019-3-18 16:58:51

好主意,让我试试。无论这是否解决了问题,现在实现它是很有用的,因为它具有灵活性,
我唯一关心的是事务。AddNewlyCreatedBobObject(),我们有几个创建简单块的例子。有没有一种方法可以在没有事务的情况下将对象添加到数据库中,或者有必要使用事务
编辑:请注意,AddNewlyCreatedDBObject()似乎只是将新创建的数据库对象添加到事务中,而不是数据库中
将重新讨论这是否解决了撤消录制问题。

CrockettScience 发表于 2019-3-18 21:15:57


Right AddNewlyCreatedDBObject() 應該被命名為 RegisterForDisposal()
页: [1]
查看完整版本: 需要禁用撤销记录