找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 632|回复: 5

选择集操作加入循环后怎么就不行了?有代码

[复制链接]
发表于 2003-3-1 10:52:19 | 显示全部楼层 |阅读模式

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

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

×
void projectLine(ads_name sellectLine)
{       
        struct resbuf *pointbuf,*eb;
        AcGePoint3d newstart,newend;
        pointbuf=acdbEntGet(sellectLine);
        eb=pointbuf;
        //get start point
        do eb=eb->rbnext;
                while (eb->restype!=10);
        AcGePoint3d startPt(eb->resval.rpoint[X],
                eb->resval.rpoint[Y],eb->resval.rpoint[Z]);
        //get end point
        eb=eb->rbnext;
        AcGePoint3d EndPt(eb->resval.rpoint[X],
                eb->resval.rpoint[Y],eb->resval.rpoint[Z]);
        project_45(startPt,newstart);
        project_45(EndPt,newend);
        AcDbLine *pLine=new AcDbLine(newstart,newend);
        //pline add to database
        AcDbBlockTable *pBlockTable;
        acdbHostApplicationServices()->workingDatabase()->
                getSymbolTable(pBlockTable,AcDb::kForWrite);
        AcDbBlockTableRecord *pBlockTableRecord;
        pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,
                AcDb::kForWrite);
        pBlockTable->close();
        AcDbObjectId lineId;
        pBlockTableRecord->appendAcDbEntity(lineId,pLine);
        pBlockTableRecord->close();
        pLine->close();
        acutRelRb(pointbuf);
        //return lineId;
}

void SelectSprPipe()
{
        //select pipe system layer
        struct resbuf sprsys;
        char sbuf1[10];
        ads_name namesprsys;
       
        sprsys.restype=8;
        strcpy(sbuf1,"pipelayer");
        sprsys.resval.rstring=sbuf1;
        sprsys.rbnext=NULL;
        acedSSGet("x",NULL,NULL,&sprsys,namesprsys);
        //select first entity
        ads_name prient;
        ads_name rearent;
        if (acdbEntNext(NULL,prient)!=RTNORM)
        {
                acdbFail("No entities selected!\n");
        }
        projectLine(prient);
        while (acdbEntNext(prient,rearent)==RTNORM);
        {       
                acdbEntNext(prient,rearent);
                projectLine(rearent);
        }
        acedSSFree(namesprsys);
       
}

过程是选择PIPILAYER中所有的线段,取起点和终点,投影后生成新线段。如果没有while (acdbEntNext(prient,rearent)==RTNORM)这个循环,没有问题。可是有了循环,编译一切正常,但在CAD下运行就死机了。

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-3-1 11:57:42 | 显示全部楼层

Re: 选择集操作加入循环后怎么就不行了?有代码

最初由 cedarzhou 发布
[B]void projectLine(ads_name sellectLine)
{       
        struct resbuf *pointbuf,*eb;
        AcGePoint3d newstart,newend;
        pointbuf=acdbEntGet(sellectLine);
        eb=pointbuf;
        //get start point
        do eb=eb->rbnext;
                w... [/B]


acdbEntNext 不是获得选择集的下一个实体,而是数据库里面指定实体的下一个实体

你要用 ads_ssname 获得选择集里面的每一个实体,去看看联机帮助,看看 ads_ssname 的使用方法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-3-1 13:36:17 | 显示全部楼层
学习ARX虽然很慢,可是渐渐也能画点什么东西,感觉还是很有进步呢~~
可惜我以前遇到困难,就退缩了。玩得太多,不知现在还能否来得及~~

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-3-1 13:39:34 | 显示全部楼层
最初由 cedarzhou 发布
[B]学习ARX虽然很慢,可是渐渐也能画点什么东西,感觉还是很有进步呢~~
可惜我以前遇到困难,就退缩了。玩得太多,不知现在还能否来得及~~

谢谢晓东 [/B]


欢迎常来,多交流,共同进步。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-3-1 19:35:47 | 显示全部楼层
最初由 cedarzhou 发布
[B]问题解决了,谢谢 [/B]


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

使用道具 举报

 楼主| 发表于 2003-3-1 19:43:17 | 显示全部楼层
void projectLine(ads_name sellectLine)
{
        struct resbuf *pointbuf,*eb;
        AcGePoint3d newstart,newend;
        pointbuf=acdbEntGet(sellectLine);
        eb=pointbuf;
        //get start point
        do eb=eb->rbnext;
                while (eb->restype!=10);
        AcGePoint3d startPt(eb->resval.rpoint[X],
                eb->resval.rpoint[Y],eb->resval.rpoint[Z]);
        //get end point
        eb=eb->rbnext;
        AcGePoint3d EndPt(eb->resval.rpoint[X],
                eb->resval.rpoint[Y],eb->resval.rpoint[Z]);
        project_45(startPt,newstart);
        project_45(EndPt,newend);
        AcDbLine *pLine=new AcDbLine(newstart,newend);
        AcDbBlockTable *pBlockTable;
        acdbHostApplicationServices()->workingDatabase()->
                getSymbolTable(pBlockTable,AcDb::kForWrite);
        AcDbBlockTableRecord *pBlockTableRecord;
        pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,
                AcDb::kForWrite);
        pBlockTable->close();
        AcDbObjectId lineId;
        pBlockTableRecord->appendAcDbEntity(lineId,pLine);
        pBlockTableRecord->close();
        pLine->close();
        acutRelRb(pointbuf);
}
void DrawSprPipe()
{
        //select pipe system layer
        struct resbuf sprpipe;
        char sbuf1[10];
        ads_name namesprpipe;
        sprpipe.restype=8;
        strcpy(sbuf1,"pipelayer");
        sprpipe.resval.rstring=sbuf1;
        sprpipe.rbnext=NULL;
        acedSSGet("x",NULL,NULL,&sprpipe,namesprpipe);
        //select pipe entity
        ads_name pipeent;
        long linenum=0;
        long lineselect;
        acedSSLength(namesprpipe,&lineselect);
             while (linenum小于lineselect)
        {
                     acedSSName(namesprpipe,linenum,pipeent);
                projectLine(pipeent);
                linenum++;
        }
        acedSSFree(namesprpipe);
        }
本不好意思拿出来,既然XD开口了,也不管这张老脸了,希望对和我一样的对ARX还摸着门的朋友有帮助~~谢谢XD了
while 后应该是(linenum<lineselect),怎么编辑改不过来呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 06:48 , Processed in 0.441714 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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