找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 668|回复: 5

[求助]:帮忙看看是什么问题呢?

[复制链接]
发表于 2002-10-8 09:57:47 | 显示全部楼层 |阅读模式

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

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

×
bool bLineIntersect(AcDbObjectId Line1Id,AcDbObjectId Line2Id)
{
        bool bIntersect=false;
        AcDbLine* pLine1;
        AcDbLine* pLine2;
    AcGePoint3dArray points;
       
    acdbOpenObject(pLine1, Line1Id, AcDb::kForRead);
        acdbOpenObject(pLine2, Line2Id, AcDb::kForRead);
   
        Acad::ErrorStatus pStatus;
    pStatus=pLine1->intersectWith(pLine2,AcDb::kOnBothOperands, points);
       
    if(!points.isEmpty())//(pStatus==Acad::eOk)
                bIntersect=true;

        return bIntersect;
}
一个用于判断两条直线是否相交的函数,怎么运行起来老是报错呢?
是什么原因,请大虾们指点一下迷津,谢谢了先
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2002-10-8 14:37:26 | 显示全部楼层
好像就是acdbOpenObject的问题,就是传进来的LineId1参数怎么会是0呢?
我是这样调用的:bLineIntersect(mainIdArray,slaveIdArray[j])
其中mainidArray和slaveidArray都是AcDbObjectIdArray类型的。是不是mainIdArray
slaveIdArray[j]出问题了?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-8 14:41:35 | 显示全部楼层
最初由 zhouyf 发布
[B]好像就是acdbOpenObject的问题,就是传进来的LineId1参数怎么会是0呢?
我是这样调用的:bLineIntersect(mainIdArray,slaveIdArray[j])
其中mainidArray和slaveidArray都是AcDbObjectIdArray类型的。是不是main... [/B]


你到主程序里面,查看下ID数组是否正确放入ID值了。
把主程序里面的ID数组构造部分(最好完整)都贴到论坛里面吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-8 15:17:14 | 显示全部楼层
AcDbObjectIdArray mainIdArray;
        AcDbObjectIdArray slaveIdArray;

        // get the block table of current DWG graphic database
        AcDbBlockTable *pBlkTbl= new AcDbBlockTable();
        acdbHostApplicationServices()->workingDatabase()
                ->getSymbolTable(pBlkTbl,AcDb::kForRead);

        //get the block table record of model space
        AcDbBlockTableRecord *pBlkTblRcd= new AcDbBlockTableRecord();
        pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd, AcDb::kForWrite);

        //close the block table
        pBlkTbl->close();
       
        //create an iterator of block table record
        AcDbBlockTableRecordIterator *pBlkTblRcdItr;
        pBlkTblRcd->newIterator(pBlkTblRcdItr);
        int number=0;
        //iterator loop for block table record
        for(pBlkTblRcdItr->start();!pBlkTblRcdItr->done();pBlkTblRcdItr->step())
        {   
                //get an entity
                AcDbEntity *pEnt;
                pBlkTblRcdItr->getEntity(pEnt, AcDb::kForWrite);
        
                //if the entity is AbDcline then process its startpoint and endpoint
                if(pEnt->isKindOf(AcDbLine::desc()))
                {
                        AcDbObjectId objId;
                        AcDbLine *pLine;
                        pLine=(AcDbLine*)pEnt;
                        Adesk::UInt16 colVal;
                        colVal=pLine->colorIndex();
                       
                        if(colVal==1)        //将红色的选为主杆
                        {
                                number++;
                //objId=appendEntityToDB_1(pLine);
                                pBlkTblRcd->appendAcDbEntity(objId, pLine);
                mainIdArray.append(objId);
            }
                        else
                        {
                //objId=appendEntityToDB_1(pLine);
                                pBlkTblRcd->appendAcDbEntity(objId, pLine);
                                slaveIdArray.append(objId);
                        }
                        pLine->close();
                }
               
        pEnt->close();
        }//end of first for;
    acutPrintf("main=%d",mainIdArray.length());
    acutPrintf("\nslave=%d",slaveIdArray.length());
    //close the block table record
        pBlkTblRcd->close();

        //delete the pointer of the iterator
        delete pBlkTblRcdItr;
这就是我获取ID数组的过程,应该没有问题吧
因为acutPrintf("main=%d",mainIdArray.length());
    acutPrintf("\nslave=%d",slaveIdArray.length());
都能正确的显示数组中元素的个数。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-8 16:30:55 | 显示全部楼层
最初由 zhouyf 发布
AcDbObjectIdArray mainIdArray;
        AcDbObjectIdArray slaveIdArray;

        // get the block table of current DWG graphic database
        AcDbBlockTable *pBlkTbl= new AcDbBlockTable();
        acdbHostApplicationServic...

你检查

  1.     pBlkTblRcd->appendAcDbEntity(objId, pLine);
复制代码
的返回值了吗?
pLine已经驻留图形数据库( database-resident ), 再加肯定会出错,并不能取得ObjectId

可以直接获取已打开AcDbObject的ObjectId, 方法如下
  1. objId=pLine->ObjectId();
复制代码


帮助如下:

AcDbObjectId AcDbObject::objectId() const;

Returns the objectId of the object. If the object is not yet database-resident, then the returned objectId will be set to AcDbObjectId::kNull.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-8 21:02:04 | 显示全部楼层
我试了一下你所说的,结果没有问题;
非常感谢斑竹以及所有热心人
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 01:17 , Processed in 0.396952 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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