找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 560|回复: 4

[求助]:不能移动选择集中的所由实体,why?

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

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

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

×
我用“W”方式生成选择集,然后调用transformBy移动他们,却总有几个不能移动,似乎没有规律可寻,不知道是什么原因,请各位指教,多谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-1-11 12:54:15 | 显示全部楼层
插入点没有选到
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-12 17:32:10 | 显示全部楼层

谢谢,不过好像不是

谢谢,不过好像不是,因为我已经在移动前生成了矩形框,对应于选定的范围,可以肯定已经把这些实体都包住了,我不知道是什么原因,有时间看一下我的代码吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-1-12 17:59:34 | 显示全部楼层

Re: 谢谢,不过好像不是

最初由 gshengli 发布
[B]谢谢,不过好像不是,因为我已经在移动前生成了矩形框,对应于选定的范围,可以肯定已经把这些实体都包住了,我不知道是什么原因,有时间看一下我的代码吗? [/B]


你能确定肯定选择了这些实体吗?你构造选择集后,用ads_command(RTSTR,"ERASE"............)删除下,看看是否都能删除掉?

W方式构建的选择集,只能是完全在窗口内部的,和矩形框交叉的选择不到,你试试CP 方式。

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

使用道具 举报

 楼主| 发表于 2003-1-12 19:20:22 | 显示全部楼层

谢谢你,晓东

下面是我的代码,有劳大驾:
{
        // TODO: Implement the command



        int ret;
        ads_point point;
       
        {               
               
                while(1)
                {
                        ret = acedGetPoint(NULL,"\n  请输入左下角:",point);
                        if(ret == RTNORM)
                                break;
                        else if(ret == RTCAN )
                                return;
                }
        }
       
        int zys = 0;
        {               
               
                while(1)
                {
                        ret = acedGetInt("\n  请输入总页数:",&zys);
                        if(ret == RTNORM)
                                break;
                        else if(ret == RTCAN )
                                return;
                }
        }
       

        double bgjj = 0.9778;//表格间距
        double bgcd= 152-1;//表格长度
        double bggd=12.9778;//表格高度       
        int Lines = 8;
        double delta=-0.6;//下移动之
       
        double yc =168;//页长
        double yjj =34;//页间距
       
        double left = point[0] + 12+0.5;
       
        {
                char buf1[256],buf2[256];
                sprintf(buf1,"%.4f,%.4f",point[0],point[1]);
                sprintf(buf2,"%.4f,%.4f",point[0]+zys*yc+(zys-1)*yjj,point[1]);
               
                acedCommand(RTSTR, "ZOOM",RTSTR ,"W",RTSTR ,buf1,RTSTR, buf2, 0) ;                                
        }       
        struct resbuf eb1,eb2,eb3,eb4;
        char sbuf1[10],sbuf2[10],sbuf3[10],sbuf4[10];



        for(int j=0;j<zys;j++)
        {
                acutPrintf("\n开始处理 %d / %d 页\n",j+1,zys);
               
                double bottom= point[1] +9.4889;
                for(int i=0;i<8;i++)
                {
                        acutPrintf("\n开始处理 %d 行 / %d 页\n",i+1,j+1);
                       
                        double right= left + bgcd;
                        double top= bottom + bggd;
                       
                        /*
                        char buf1[256],buf2[256],buf3[256];
                        sprintf(buf1,"%.4f,%.4f",left,bottom+0.01);
                        sprintf(buf2,"%.4f,%.4f",right,top-0.01);
                        sprintf(buf3,"@0,%.4f",delta*(i+1));
                       
                        acedCommand(RTSTR, "rectang",RTSTR ,buf1,RTSTR, buf2, 0) ;
                         
                         
                         if (acedCommand(RTSTR, "move",RTSTR, "W", RTSTR ,buf1,RTSTR, buf2,RTSTR, "",RTSTR, "0,0", RTSTR,buf3, 0) != RTNORM)                        
                          
                                {
                                //        acutPrintf("\nSomething is wrong!!!");                               
                                }
                        */


                       
                        ads_point pt1,pt2;
                        pt1[0] = left;
                        pt1[1] = bottom + 0.01;
                        pt2[0] = right;
                        pt2[1] = top  - 0.01;


                        ads_name ssname;        
                        ret = acedSSGet("W", pt1, pt2, &eb1, ssname);
                        if(ret != RTNORM)
                        {
                                acutPrintf("\n无选择集");
                        }
                        else                               
                        {
                                AcGeVector3d trans(0,delta*(i+1),0);

                                AcGeMatrix3d  xform;
                                xform.setToIdentity();
                                xform.setToTranslation(trans);


                                long len=0;
                                acedSSLength(ssname,&len);
                                acutPrintf("\n实体个数%d",len);

                                for(long i=0;i<len;i++)
                                {
                                        ads_name  ent;
                                        acedSSName(ssname, i, ent);
                                        AcDbObjectId eId;
                                        acdbGetObjectId(eId, ent);
                                       
                                        AcDbEntity * pEnt = NULL;
                                        acdbOpenObject(pEnt, eId, AcDb::kForWrite);
                                       
                                        if(pEnt == NULL)
                                        {
                                                acutPrintf("\n打开实体失败失败");
                                        }
                                        else
                                        {
                                                Acad::ErrorStatus es =  pEnt->transformBy(xform);
                                               
                                                if(es != Acad::eOk)
                                                {
                                                        acutPrintf("\n移动失败");
                                                }
                                        }
                                        pEnt->close();
                                }
                        }
                       
                        acedSSFree(ssname);
                        bottom  =top ;
                }
               
                left += yc+yjj;
        }
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 12:14 , Processed in 0.191748 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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