乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 91|回复: 6

命令在命令结束事件中不起作用

[复制链接]

3

主题

16

帖子

1

银币

初来乍到

Rank: 1

铜币
28
发表于 2017-9-20 00:06:32 | 显示全部楼层 |阅读模式

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2017-9-20 03:54:10 | 显示全部楼层
嗨,据我所知
,您不能从事件处理程序调用命令(使用SendStringToExecute,SendCommand或Command)。
回复

使用道具 举报

3

主题

16

帖子

1

银币

初来乍到

Rank: 1

铜币
28
发表于 2017-9-27 01:23:53 | 显示全部楼层
在这种情况下,空闲事件可以是你的朋友,确保你的代码从正确的状态运行,只需将你的回调函数添加到列表中,然后在它被调用后删除它。    。
{。
//代码没有在应用程序上下文中运行。
欧特克,AutoCAD . Application services . Application . Idle+= Application _ Idle;。
}。

静态void Application_Idle(对象发送方,EventArgs e)。
{。
欧特克,AutoCAD . Application services . Application . Idle-= Application _ Idle;。
//从应用程序上下文中执行操作。
}。
回复

使用道具 举报

3

主题

16

帖子

1

银币

初来乍到

Rank: 1

铜币
28
发表于 2017-11-1 17:15:12 | 显示全部楼层

因此,当用户执行qsave或单击保存工具栏按钮(似乎也发出qsave命令)时,我的命令成功执行。但是,当用户在对话框中提示您退出时是否要保存时,我该如何反应呢?这似乎不会触发命令事件..我该如何解决这个问题?
回复

使用道具 举报

3

主题

16

帖子

1

银币

初来乍到

Rank: 1

铜币
28
发表于 2017-11-1 18:23:03 | 显示全部楼层
...实际上,我想我通过连接到e.Document.Database.SaveComplete命令来解决这个问题...所以现在任何保存方法都会触发我的导出,(我排除自动保存)
回复

使用道具 举报

4

主题

219

帖子

4

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2018-1-16 23:51:24 | 显示全部楼层
我确实在 SaveComplete 事件期间触发了我的导出:
  1. public void Initialize()
  2. {
  3.         Application.DocumentManager.DocumentCreated += DocumentManager_DocumentCreated;
  4.         foreach (Document doc in Application.DocumentManager)
  5.         {
  6.                 doc.Database.SaveComplete += OnDatabaseSaveComplete;
  7.         }
  8. }


和我的事件处理程序:
  1. private void OnDatabaseSaveComplete(object sender, DatabaseIOEventArgs e)
  2. {
  3.         // ignore when the document is being auto saved
  4.         if (e.FileName.Contains(".sv$"))
  5.                 return;
  6.         Document doc = Application.DocumentManager.MdiActiveDocument;
  7.         var currentFilename = doc.Name;
  8.         if ((currentFilename.Contains("-CSA-")) ||
  9.                 (currentFilename.Contains("-S-")) ||
  10.                 (currentFilename.Contains("-B-")) ||
  11.                 (currentFilename.Contains("-F-")))
  12.         {
  13.                 ExportTo3dDwf();
  14.         }
  15. }

和 ExportTo3dDwf 分离所有外部参照并解冻所有层...但我的意图是不修改数据库。我想在分离外部参照和解冻图层之前保持 DWG 不变,以准备导出到 dwf。
所以我正在使用这里找到的一些漂亮的例程..这就是我解冻所有层的方式:
  1. [CommandMethod("Thawall")]
  2. public static void ThawAll()
  3. {
  4.         Database db = HostApplicationServices.WorkingDatabase;
  5.         LayerTableRecord layer;
  6.         string curLayer = (string)Application.GetSystemVariable("CLayer");
  7.         using (Transaction tr = db.TransactionManager.StartTransaction())
  8.         {
  9.                 LayerTable lt = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;
  10.                 foreach (ObjectId layerId in lt)
  11.                 {
  12.                         layer = tr.GetObject
  13.                                 (layerId, OpenMode.ForWrite) as LayerTableRecord;
  14.                         if (layer.Name != curLayer)
  15.                                 layer.IsFrozen = false;
  16.                 }
  17.                 tr.Commit();
  18.                 Application.DocumentManager.MdiActiveDocument.Editor.Regen();
  19.         }
  20. }

那么我怎么能做到这一点,而不是保存/修改DWG?我尝试过删除提交,但它仍然修改了DWG。
在一些旧的LISP中,我看到
  1. (acad-push-dbmod)

以防止保存对图形的更改。如何在 C# 中执行此操作?
回复

使用道具 举报

3

主题

16

帖子

1

银币

初来乍到

Rank: 1

铜币
28
发表于 2018-1-17 09:37:30 | 显示全部楼层
看看这个:
Autodesk.AutoCAD.ApplicationServices.Document.PopDbMod()/PushDbMod()。
这是ObjectARX参考指南中的引用:
此方法将DBMOD系统变量的当前值复制到堆栈上。这允许您保存DBMOD只读系统变量的当前值,以便通过popDbmod()方法进行后续恢复。
pushDbmod()及其对应物popDbmod()允许您的应用程序修改数据库而无需将其标记为已修改,这是应用程序在编辑会话初始化期间通常所做的。这包括修改数据库头变量或添加和修改正在编辑的数据库中的对象,这都会导致文档系统变量DBMOD中的标志被设置。当DBMOD非零时,当用户尝试退出绘图时,会发布“保存您的绘图?”提示。要避免在应用程序中出现此提示,请在开始以不会导致此查询的方式修改数据库之前,使用pushDbmod()堆叠当前DBMOD值,在此类修改完成后使用popDbmod()恢复DBMOD。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 10:34 , Processed in 0.154468 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表