找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 497|回复: 2

[ARX程序]:各位高手,帮我看看程序错在那吧

[复制链接]
发表于 2005-5-12 22:12:02 | 显示全部楼层 |阅读模式

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

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

×
char chPathName[MAX_PATH];
   ::GetModuleFileName(GetModuleHandl ("HzGyk.arx"),chPathName,255);
  CString strPathName=chPathName;
int nPos=strPathName.ReverseFind('\\');
CString strPath=strPathName.Left(nPos+1);
CString strFile=strPath+"Template\\"+"gyk3.dwg";
AcDbObjectId id;
AcDbObjectIdArray list;
AcDbDatabase extDatabase( Adesk::kFalse );
Acad::ErrorStatus es=extDatabase.readDwgFile(strFile);
if(es!=Acad::eOk)
{
    acutPrintf( "Error reading DWG!" );
     return;
}
AcDbBlockTable* pBT;
if (Acad::eOk != extDatabase.getSymbolTable( pBT, AcDb::kForRead ))
{
    acutPrintf( "Error getting BlockTable of DWG" );
   return;
}
AcDbBlockTableRecord* pBTR;
es = pBT->getAt( ACDB_MODEL_SPACE, pBTR, AcDb::kForRead );
pBT->close();
if (Acad::eOk != es)
{
   acutPrintf( "Error getting model space of DWG" );
   return;
}

AcDbBlockTableRecordIterator* pIT;
if (Acad::eOk != pBTR->newIterator( pIT ))
{
   acutPrintf( "Error iterating model space of DWG" );
   pBTR->close();
return;
}

for ( ; !pIT->done(); pIT->step())
{
     if (Acad::eOk == pIT->getEntityId( id ))
    {
         list.append( id );

         AcDbEntity *pEnt;
        if ( Acad::eOk == pIT->getEntity(pEnt, AcDb::kForRead))
                                {
                                        AcDbObjectId obj;
                                        if ((obj = pEnt->extensionDictionary())
                                                != AcDbObjectId::kNull)
                                        {
                                                AcDbDictionary *pDict = NULL;
                                                acdbOpenObject(pDict, obj, AcDb::kForWrite);
                                                if (pDict) {
                                                        pDict->setTreatElementsAsHard(Adesk::kTrue);
                                                        pDict->close();
                                                }
                                        }
                                        pEnt->close();
                                }
                        }
                }

                delete pIT;
                pBTR->close();

                if (list.isEmpty()) {
                        acutPrintf( "No entities found in model space of DWG" );
                        return;
                }

                AcDbDatabase *pTempDb;

                es= extDatabase.wblock( pTempDb, list, AcGePoint3d::kOrigin );
                if(es!=Acad::eOk)
                {
                        acutPrintf( "wblock failed!" );
                        return;
                }
                es=acdbHostApplicationServices()->workingDatabase()->insert( AcGeMatrix3d::kIdentity, pTempDb );
                if(es!=Acad::eOk)
                {
                        acutPrintf( "insert failed!" );
                        return;
                }


                delete pTempDb;



                //遍历模型空间,找到所有实体,建立一个内部块,然后再建立一个块引用.
                AcDbBlockTableRecord *pgykBTR=new AcDbBlockTableRecord();
                pgykBTR->setName("gyk3");
                if(pgykBTR==NULL)
                {
                        acutPrintf("Create gyk Block table make error!");
                        return;
                }


                es=acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBT,AcDb::kForWrite);
                if(es!=Acad::eOk)
                {
                        acutPrintf("Can't open symbol table!");
                        return;
                }

                AcDbObjectId blockId;
                es=pBT->add(blockId,pgykBTR);
                if(es!=Acad::eOk)
                {
                        acutPrintf("Can't add block table record into the block table!");
                        return;
                }

                es=pBT->getAt(ACDB_MODEL_SPACE,pBTR,AcDb::kForWrite);
                if(es!=Acad::eOk)
                {
                        acutPrintf("Can't get symbol table record!");
                        return;
                }

                es=pBT->close();
                if(es!=Acad::eOk)
                {
                        acutPrintf("Can't close the block table!");
                        return;
                }

                es= pBTR->newIterator( pIT );
                if(es!=Acad::eOk)
                {
                        acutPrintf( "Error iterating model space of DWG" );
                        return;
                }

                /*es=pBTR->close();
                if(es!=Acad::eOk)
                {
                        acutPrintf("Can't close the block table record!");
                        return;
                }*/


                for(pIT->start(true);!pIT->done();pIT->step())
                {
                        AcDbEntity* pEnt;
                        es=pIT->getEntity(pEnt,AcDb::kForRead,false);
                        if(es!=Acad::eOk)
                        {
                                acutPrintf("Can't get entity in the model space!");
                                return;
                        }

                        AcDbObjectId entId;
            es=pgykBTR->appendAcDbEntity(entId,pEnt);
                        if(es!=Acad::eOk)
                        {
                                acutPrintf("Can't append entity to block table!");
                                return;
                        }
                       
                        es=pEnt->erase();
                        if(es!=Acad::eOk)
                        {
                                acutPrintf("Can't erase the entity in the model space!");
                                return;
                        }
                }

                delete pIT;
                pBTR->close();
       delete pgykBTR;

                AcDbBlockReference *pgykRef=new AcDbBlockReference();
                if(pgykRef==NULL)
                {
                        acutPrintf("memory error!");
                        return;
                }

                es=pgykRef->setBlockTableRecord(blockId);
                if(es!=Acad::eOk)
                {
                        acutPrintf("set block reference's block make error!");
                        return;
                }

                es=pgykRef->setPosition(AcGePoint3d(0,0,0));
                if(es!=Acad::eOk)
                {
                        acutPrintf("set block reference's position make error!");
                        return;
                }

                es=pgykRef->setRotation(0.0);
                if(es!=Acad::eOk)
                {
                        acutPrintf("set block reference's rotation make error!");
                        return;
                }

                es=pgykRef->setScaleFactors(AcGeScale3d(420,297,1.0));
                if(es!=Acad::eOk)
                {
                        acutPrintf("set block reference's scale factors make error!");
                        return;
                }

                es=acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBT,AcDb::kForRead);
                if(es!=Acad::eOk)
                {
                        acutPrintf("Can't get block table!");
                        return;
                }

                es=pBT->getAt(ACDB_MODEL_SPACE,pBTR,AcDb::kForWrite);
                if(es!=Acad::eOk)
                {
                        acutPrintf("Can't get model block table!");
                        return;
                }

                es=pBT->close();
                if(es!=Acad::eOk)
                {
                        acutPrintf("Can't close block table!");
                        return;
                }

                es=pBTR->appendAcDbEntity(blockId,pgykRef);
                if(es!=Acad::eOk)
                {
                        acutPrintf("Can't append entity to model space!");
                        return;
                }
               
                pBTR->close();
                delete pgykRef;


各位大哥,大姐,帮俺看看吧,我调了一晚上,都没发现那里有错误.小弟在这里先谢了.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-5-13 12:40:31 | 显示全部楼层
这样让人家看代码和累, 先说说你程序的基本目的,调试出了什么问题,自己怀疑哪里有问题。这样自然有高手点拨。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-13 15:38:26 | 显示全部楼层
debug就0可以发现哪个地方出问题了
实在找不出那个地方的问题 再吧那个地方贴出来
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 15:01 , Processed in 0.163286 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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