找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4802|回复: 9

[ARX函数]:IntersectWith函数求焦点的问题出在哪里?

[复制链接]
发表于 2005-10-20 12:18:14 | 显示全部楼层 |阅读模式

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

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

×
我在外部图纸中做了一个块,把它插入到当前图纸中,希望实现该块与直线相交获得焦点,删除旧直线,然后重画两条直线,实现"打断"功能.可是插入后却第一次插入后只能在块的最左边获得一个焦点,第二次以后就能实现预期的功能,这到底是什么原因啊?希望能由高手赐教!代码如下:
//搜索数据库中所有的直线
        AcDbObjectIdArray lineIdArray;
        AcGePoint3d pt1,pt2;
        AcDbBlockTableRecordIterator *pBlkItr;
        pCurDb->getSymbolTable(pBlockTable,AcDb::kForRead);
        pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForRead);
        pBlockTable->close();
        pBlockTableRecord->newIterator(pBlkItr);
        pBlockTableRecord->close();
        for(pBlkItr->start();!pBlkItr->done();pBlkItr->step())
        {
                AcDbEntity* pEntity;
                AcDbObjectId lineId;
                pBlkItr->getEntity(pEntity,AcDb::kForRead);
                //acedAlert(pEntity->isA()->name());
                ////
                /*if(!strcmp("_line",(pEntity->isA()->name())))
                {
                        lineId=pEntity->objectId();
                        lineIdArray.append(lineId);
                }
                pEntity->close();*/
                ////
                //if(!strcmp("AcDbLine",(pEntity->isA()->name())))
                if(pEntity->isKindOf(AcDbLine::desc()))
                {
                        lineId=pEntity->objectId();
                        lineIdArray.append(lineId);
                }
               
                pEntity->close();

        }
        delete pBlkItr;

        int nLineNumber=lineIdArray.length();
        AcDbEntity* pBlock;
       
        acdbOpenObject(pBlock,refId,AcDb::kForRead);

        for(int i=0;i<nLineNumber;i++)
        {
                AcDbLine* pLine;
                AcDbObjectId id=lineIdArray.at(i);
                AcGePoint3dArray pts;
                acdbOpenObject(pLine,id,AcDb::kForWrite);
               
                pBlock->boundingBoxIntersectWith(pLine,AcDb::kOnBothOperands,pts,0,0);
                //pLine->intersectWith(pBlock,AcDb::kOnBothOperands,pts);
                //AcGePoint3d pt1=points.first();
                //AcGePoint3d pt2=points.last();
                //AcGePoint2d pot1(pt1.x,pt1.y);
                //AcGePoint2d pot2(pt2.x,pt2.y);

                /*if (pts.length()==0)//直线与块没有交点
                {
                        pLine->close();
                        continue;
                }*/
                //pts.
                if(pts.length()>0)
                {
                        double dis1 = pts.first().distanceTo(pLine->startPoint());
                        double dis2 = pts.last().distanceTo(pLine->startPoint());
                        acutPrintf("\nthe length is %0.6f",pts.length());
                        //pts.
                        //acutPrintf("the length is %0.6f",dis2);
                        if (dis1 > dis2 )
                        {
                               
                               
                                pt1 = pts.last();
                                pt2 = pts.first();
                        }
                        else
                        {
                                acutPrintf("\nthe length of two point is Longer than 12");
                                pt1 = pts.first();
                                pt2 = pts.last();
                        }
                       
                        AcDbLine* line1=new AcDbLine(pLine->startPoint(), pt1);
                        AcDbLine* line2=new AcDbLine(pt2, pLine->endPoint());
                        pLine->erase();
                       
                       


                        pCurDb->getSymbolTable(pBlockTable,AcDb::kForRead);
                        pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
                        pBlockTable->close();
                        AcDbObjectId lineId1,lineId2;
                        pBlockTableRecord->appendAcDbEntity(lineId1,line1);
                        pBlockTableRecord->appendAcDbEntity(lineId2,line2);
                        line1->close();
                        line2->close();

                        pBlockTableRecord->close();
                       
                       
                        //continue;
                }
        pLine->close();
       
        }
        pBlock->close();
        //pBlockTableRecord->close();

        acDocManager->unlockDocument(curDoc());
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-10-20 19:02:27 | 显示全部楼层
可否把你的代码整理一下?屏闭的代码要不要?


http://p4.xdcad.net/forum/showth ... y=&pagenumber=1

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

使用道具 举报

 楼主| 发表于 2005-10-20 19:38:12 | 显示全部楼层
不懂 的先生们,请不要乱发言!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-21 00:47:06 | 显示全部楼层
好乱滴代码啊>~  
看着费神........
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-21 08:19:52 | 显示全部楼层
天天在这里胡说八道的人原来什么问题也解决不了!
So I have to learn it  from abroad Web!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-21 09:28:23 | 显示全部楼层
就凭你这态度和做法人家这么给你解决问题?  贴一堆乱七八糟的代码又没有注释,高手哪有怎么多时间来消化你的代码呢? 用这样的方法别说abroad Web 就是去火星也不见得有结果
建议你先做个demo工程(这样人家才可以方便给你调试找问题), 并对代码进行必要的注释,指出可能存在问题的代码段。

另外如果问题只是和你说的一样,迂回法可以轻松解决。


2005.10.23
解决方法已经早就告诉你了,
居然这样的态度 ,你不理解我也不多说。
“可是这里这么多垃圾”,不知道有没有算你自己。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-22 12:09:52 | 显示全部楼层
真传一句话,假传万卷书!
在学问面前大家是平等的,当你解决了别人的问题,你自己也会提高.
俺来这里是想和大家共同提高的,可是这里这么多垃圾,你不会就不要乱说吗?
俺又不比你低一等,还用尔等来教训?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-24 10:27:01 | 显示全部楼层
楼主就是一个变态。 用这种口气,咳, 世风日下。
大家回答问题,都是本着 个人兴趣和对CAD开发的热爱的。
虽然回答问题,从没求过感激,但是这种态度,请你滚出这个论坛。
一句话---- 鸟人。

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

使用道具 举报

发表于 2006-5-17 00:45:32 | 显示全部楼层
以楼主这种态度,我就是会也不会回答的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 03:15 , Processed in 0.499000 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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