乐筑天下

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

遍历AcDbVoidPtrArray的问题?请教,多谢!

[复制链接]

2

主题

3

帖子

1

银币

初来乍到

Rank: 1

铜币
11
发表于 2005-3-29 10:59:00 | 显示全部楼层 |阅读模式
请教高手:我在炸开一个实体后,产生一个AcDbVoidPtrArray类的数组,在遍历的时候怎么总是有问题:测试过程中炸开实体产生的object的ID和名称都是一样的,程序如下:请指点迷津:
void MYEX()//执行的命令函数
{
        struct resbuf *pcb;
        pcb=acutNewRb(RTDXF0);//创建一个结果缓冲区,组码为0,表示实体类型
        ads_name ss;
        char sbuf[100];
        strcpy(sbuf,"3DSOLID");
        pcb->resval.rstring=sbuf;
        pcb->rbnext=NULL;
        acedSSGet("X",NULL,NULL,NULL,ss);//生成选择集
        long lenSet;
        acedSSLength(ss,&lenSet);
        for(int i=0;iisKindOf(AcDb3dSolid::desc()))
                {
                                        pEnt->explode(pArr);//这样指针pArr指向的内存地址的内容就是explode后的各实体。
                        acutPrintf("\\n objID=%s",objId);
                        int lenArr=pArr.length();
                        for(int j=0;jclose();
                }
        }
        acutRelRb(pcb);       
        acedSSFree(ss);//释放选择集
}

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

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

使用道具 举报

3

主题

97

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
109
发表于 2005-4-1 17:00:00 | 显示全部楼层
你的遍历根本不是在对AcDbVoidPtrArray操作.. 原因如下:
if(pEnt->isKindOf(AcDb3dSolid::desc()))
                {
                                        pEnt->explode(pArr);
AcDbEntity的explode函数只制造array, 并不负责把里头的东西加到CAD数据库里面去. 这个跟CAD自己的explode命令系不一样地, CAD自己的explode会自动把explode出来的array里面的所有东西都加入数据库..(不要问偶为什么ARX这么笨, 它不是偶写的..)
偶的意思就是说ARX里面这个函数完了之后产生的array中的实体还都是孤儿, object ID是要等实体被加入CAD数据库时才分配的, 所以没有加数据库的意思就是array里头的实体在你手动把它们加入数据库之前都没有objectID..
但是你的程序并没有报找不到object ID, 那系因为:
                        for(int j=0;jpandoram,
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-5 08:04 , Processed in 0.146217 second(s), 56 queries .

© 2020-2025 乐筑天下

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