找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 524|回复: 4

[求助]:如何在arx程序中反回CArray类?

[复制链接]
发表于 2003-1-18 00:02:28 | 显示全部楼层 |阅读模式

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

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

×
假如已经建立了选择集CArray的类,如何在程序的return语句中返回?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-1-18 02:27:58 | 显示全部楼层

Re: [求助]:如何在arx程序中反回CArray类?

最初由 于松荣 发布
[B]假如已经建立了选择集CArray的类,如何在程序的return语句中返回? [/B]


具体说清楚些,要返回到哪里?什么调用它?你可以使用很多方法,比如最灵活的是传递给函数的参数用引用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-18 15:00:18 | 显示全部楼层
我定义了一个类Select中的成员函数:
void Select::SelectObject(CArray <AcDbEntity*,AcDbEntity*&> ObjectCArray)
{
    long nNewSize = 0,nGrowBy = -1;
    char *fname = NULL;
    struct resbuf *rb;
   //请选择要打开的文件名
  rb = acutNewRb(RTSTR);
    int stat = acedGetFileD("请选择要打开的文件名", NULL,"dwg", 0, rb);
    fname = (char*)acad_malloc(strlen(rb->resval.rstring) + 1);   
    strcpy(fname, rb->resval.rstring);
    acutRelRb(rb);
    AcDbDatabase *pDb = new AcDbDatabase(Adesk::kFalse);
    pDb->readDwgFile(fname);
    //建立存储选择体数组               
  ObjectCArray.SetSize(nNewSize,nGrowBy);
   //寻找选择体
  AcDbBlockTable *pBlkTbl;
    pDb->getSymbolTable(pBlkTbl, AcDb::kForRead);
    AcDbBlockTableRecord *pBlkTblRcd;
    pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd,AcDb::kForRead);
    pBlkTbl->close();
    AcDbBlockTableRecordIterator *pBlkTblRcdItr;
    pBlkTblRcd->newIterator(pBlkTblRcdItr);
    AcDbEntity *pEnt;
    for (pBlkTblRcdItr->start(); !pBlkTblRcdItr->done();
        pBlkTblRcdItr->step())//寻找AcDbEntity从Table头一步一步地查到Table尾
    {
        pBlkTblRcdItr->getEntity(pEnt,
            AcDb::kForRead);
        //存储选择体入数组
    ObjectCArray.Add(pEnt);        
        pEnt->close();
    }
    pBlkTblRcd->close();
    delete pBlkTblRcdItr;
    delete pDb;       
}
然后再在conmmand文件中调用:
{
long nNewSize = 0,nGrowBy = -1;
CArray <AcDbEntity*,AcDbEntity*&> ObjectCArray;
ObjectCArray.SetSize(nNewSize,nGrowBy);
Select p;
p.SelectObject(ObjectCArray);
}
结果出现error C2664: 'SelectObject' : cannot convert parameter 1 from 'class CArray<class AcDbEntity *,class AcDbEntity * &>' to 'class CArray<class AcDbEntity *,class AcDbEntity * &>'的错误
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-18 18:01:26 | 显示全部楼层
用引用, 即可简单的解决
将函数声明改为
void Select::SelectObject(CArray& ObjectCArray)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-21 09:00:47 | 显示全部楼层
AcDbObjectIdArray        SelectObject();
也行,不过当AcDbObjectIdArray很大时,会行慢的。你想,有一大堆数在函数之间跑来跑去,很壮观!还是楼上的好!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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