找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 407|回复: 2

[求助]:大家帮帮忙,看看这样的东西怎么做呀?

[复制链接]
发表于 2003-3-23 02:29:43 | 显示全部楼层 |阅读模式

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

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

×
希望实现这样一个功能,在一个非模式对话框中,点击一个按钮,用户回到CAD界面点选一条线段,然后程序自动在该线段上每隔一段距离插入一个已有的图块(该图块为文件fileName中的一个名为blockname的块),并返回这些图块的Id。我插入块的程序部分如下:
Adesk::Boolean AddBlockToDwg1(const char* fileName, const char* blockname,
                                                         const char* SLayerName, AcGePoint3d basePoint,
                                                         double rAngle, double Scalex,double Scaley,
                                                         AcDbObjectId &ChairId, const int shmode = _SH_DENYWR)
{       
        ads_printf("进入函数 AddBlockToDwg\n");
        AcDbDatabase *pDb = new AcDbDatabase(Adesk::kFalse);
    pDb->readDwgFile(fileName,shmode);
    AcDbObjectId blockId;     
    AcDbBlockTable *pBlkTbl;
    pDb->getSymbolTable(pBlkTbl, AcDb::kForRead);
    pBlkTbl->getAt(blockname,blockId ,false);
    pBlkTbl->close();
        AcDbDatabase * pOutputDb = new AcDbDatabase(Adesk::kTrue);
    pDb->wblock(pOutputDb, blockId);
    delete pDb;
        AcDbObjectId  inblockId;
        Acad::ErrorStatus retSta;
        AcDbDatabase *pCurDb=acdbHostApplicationServices()->workingDatabase();
        retSta=pCurDb->insert(inblockId,  blockname,  pOutputDb,true);  
        delete pOutputDb;
        int acedCommandRt;
        CString strCommand,tmpstr1;       
        strCommand="(command \"-INSERT\" ";
        tmpstr1.Format("\"%s\" ",blockname);
        strCommand=strCommand+tmpstr1;
        tmpstr1.Format("\"%f,%f,%f\" ",basePoint.x,basePoint.y,basePoint.z);
        strCommand+=tmpstr1;
        tmpstr1.Format("\"%f\" \"%f\" \"%f\" )",Scalex,Scaley,rAngle);
        strCommand+=tmpstr1;
        AfxMessageBox(strCommand);
        ads_printf("%s",strCommand);
        acedCommandRt=acDocManager->sendStringToExecute(curDoc(),strCommand);
        ads_name adsblkname;
        if(acdbEntLast(adsblkname)==RTNORM)
        {
                ads_printf("插入块正确\n");
                acdbGetObjectId( ChairId, adsblkname );
        }       
        ads_printf("退出函数 AddBlockToDwg1\n");
        return Adesk::kTrue;
}
其中变量ChairId返回新插入块的Id,现在的问题是我发现sendStringToExecute()函数不是立刻执行,这样我想通过acdbEntLast()函数得到新插入块Id的方法无法实现,而且当插入块个数较多时,sendStringToExecute()函数会出错,帮助上所命令长度被限制在296个字节,大家有什么好的方法吗,能不能给个实例呀。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-3-25 21:11:49 | 显示全部楼层
?看不懂?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-3-26 17:05:24 | 显示全部楼层
为何要用命令的方式实现插块呢?直接操作图形数据库不就行了嘛!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 20:34 , Processed in 0.187769 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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