找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 912|回复: 4

[求助]:命令同步执行的问题(急)

[复制链接]
发表于 2005-12-27 17:07:34 | 显示全部楼层 |阅读模式

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

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

×
我创建了一个停靠对话框.点击按钮出现一模态的对话框.点击模态对话框上的按钮我想实现创建面域功能.函数中调用我注册的命令.但不能同步.
void CBlastRegion::OnOrerockregion()   //模态对话框按钮响应函数
{
        // TODO: Add your control notification handler code here
        CDialog::OnOK();
        SendCommandToAcad("createregion\n");
        int rc = RTNORM;
        char kw[2];
        while(rc == RTNORM)
        {
                acedInitGet(NULL, "Y N");
                rc = acedGetKword("\n指定完所有的矿岩分块吗?[Y/N]<Y>: ", kw);
                switch(rc)
                {
                        case RTERROR:
                        case RTCAN:
                                return;
                        break;

                        case RTNONE:
                                strcpy(kw, "Y");
                                rc = RTNORM;
                        break;
                }
                if(strcmp(kw, "Y") == 0)
                {
                        rc = RTNONE;
                }
                else
                {
//                        acDocManager->sendStringToExecute(pDoc,"createregion\n");
                        SendCommandToAcad("createregion\n");
                }
        }
       
        acDocManager->unlockDocument(curDoc());  
}

createregion是注册的命令.代码为:
void LLSUSTBCREATEREGION()
{
        // TODO: Implement the command
        ads_point pt;
        ads_name entname;
        AcDbObjectId entId;
        AcDbEntity * pEnt;
//        if(RTNORM != acedGetPoint(NULL, "请在爆区内任意指定一点以确定爆破等级: ", pt))
        int i = acedGetPoint(NULL, "请在爆区内任意指定一点以确定爆破等级: ", pt);
        if(i!=RTNORM)
                return;
        int nReturn  = acedCommand(RTSTR, "-boundary",RTSTR,"A",RTSTR,"O",RTSTR,"R",RTSTR,"B",RTSTR,"E",RTSTR,"", RTPOINT, pt,RTSTR,"", RTNONE);

        acdbEntLast(entname);
        acdbGetObjectId(entId,entname);
        acdbOpenAcDbEntity(pEnt,entId,AcDb::kForRead);
       
        AcDbDatabase *pCurDb;
        AcDbBlockTable *pBlkTable;
        AcDbBlockTableRecord *pBlkTableRecord;
        AcDbObjectId regionId;
        pCurDb = acdbHostApplicationServices()->workingDatabase();
        pCurDb->getBlockTable(pBlkTable, AcDb::kForRead);
        pBlkTable->getAt(ACDB_MODEL_SPACE, pBlkTableRecord, AcDb::kForWrite);
        pBlkTable->close();
        pBlkTableRecord->appendAcDbEntity(regionId,pEnt);

        pEnt->close();
        pBlkTableRecord->close();
       
}
CAD中用createregion可以.但点击按钮时执行到这里:
int i = acedGetPoint(NULL, "请在爆区内任意指定一点以确定爆破等级: ", pt);
就不往下执行了(返回了).从而执行while循环了.

论坛搜索了帖子. Hellow大哥开的帖子我试了不行
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-1-5 15:42:53 | 显示全部楼层
可以使用CEvent对象和多线程来实现
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-5 16:39:00 | 显示全部楼层
gzm008 您好:
     能给个这方面的例子吗?多线程我没整过。我的邮箱lls1980@sina.com
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-5 22:12:03 | 显示全部楼层
int i = acedGetPoint(NULL, "请在爆区内任意指定一点以确定爆破等级: ", pt);
不知道调用函数后 i == 多少了?是不是你选点有误
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-6 09:08:08 | 显示全部楼层
选点没错。Hellow大哥说用反映器。效果还不太好。您可以看看我的另一贴
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 04:34 , Processed in 0.303648 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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