找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1507|回复: 4

[ARX函数]:请教各位高手:非模态对话框为何不能修改acad中的实体?

[复制链接]
发表于 2002-3-11 05:59:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
小弟初学arx,因为对话框在非模态时,它的成员函数打开acad中的实体时总是错
误退出,搞得昏头昏脑,一筹莫展,哪位高手能指点一下,小弟将感激不尽!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-3-11 06:57:46 | 显示全部楼层

Re: [ARX函数]:请教各位高手:非模态对话框为何不能修改acad中的实体?

最初由 useruser 发布
[B]小弟初学arx,因为对话框在非模态时,它的成员函数打开acad中的实体时总是错
误退出,搞得昏头昏脑,一筹莫展,哪位高手能指点一下,小弟将感激不尽! [/B]


给你贴篇ADN的技术资料,“如何在非模态对话框中删除实体”,你参考下代码,问题若解决,希望把你的代码贴到论坛告诉下大家的原因,大家共同提高。

问题:
I'm having problems erasing entities from a modeless dialog.

Problem #1 - I know I need to iterate the Model Space Block Table Record, open
each entity for write and call erase() on it. The code is execuated without
errors but the entities are still displayed on the screen.

Problem #2 - When I select the entities for modifications, AutoCAD shows an
unhandled exception dialog.

How do I solve these problems?

解答:
Because the dialog is modeless, explicit document locking is needed. Also
because its a modeless dialog, graphics display update is not performed (unlike,
for example, working from a modal dialog), so you'll need to do that explicitly
as well.

The following code snippet solves both the above mentioned problems.

  1. #include <dbobjptr.h>
  2. #include <dbents.h>
  3. //
  4. // minimal error checking for code brevity
  5. //
  6. void CSampDialog::OnButton1()
  7. {
  8.         // has to do document locking explicitly
  9.         acDocManager->lockDocument(curDoc());
  10.         AcDbBlockTableRecordPointer pBtr(ACDB_MODEL_SPACE, curDoc()->database(),
  11. AcDb::kForWrite);
  12.         if(pBtr.openStatus() != Acad::eOk)
  13.                 return;
  14.         AcDbBlockTableRecordIterator* pIter = NULL;
  15.         pBtr->newIterator(pIter);
  16.         for(; !pIter->done(); pIter->step())
  17.         {
  18.                 AcDbEntity* pEnt = NULL;
  19.                 pIter->getEntity(pEnt, AcDb::kForRead);
  20.                 AcDbLine* pLine = AcDbLine::cast(pEnt);
  21.                 if(pLine)
  22.                 {
  23.                         pLine->upgradeOpen();
  24.                         pLine->erase();
  25.                         pLine->draw(); // force display update
  26.                         pLine->close();
  27.                 }
  28.                 else
  29.                         pEnt->close();
  30.         }
  31.         delete pIter;
  32.         acDocManager->unlockDocument(curDoc());
  33. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-3-11 11:40:33 | 显示全部楼层
加入以下代码:
acDocManager->lockDocument(curDoc());
(中间为自已的代码)
acDocManager->unlockDocument(curDoc());
即大功告成!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-3-11 11:45:19 | 显示全部楼层
最初由 useruser 发布
[B]加入以下代码:
acDocManager->lockDocument(curDoc());
(中间为自已的代码)
acDocManager->unlockDocument(curDoc());
即大功告成! [/B]


能跟大家介绍下你的程序吗?方便贴出完整工程包吗?谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-3-11 12:12:43 | 显示全部楼层
我的程序是一个层管理对话框,把所有常用层手工编辑成文本形式调入此非模态对话框内,操作时通过单击或
双击列表框中列出的层名进行设置当前层、转换实体所在层等等,当然才开始就出了点问题,呵呵,多谢晓东
相助,其实你的网站上已有此程序,我只不过模仿了一下而已!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-16 04:26 , Processed in 0.321502 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表