- UID
- 341
- 积分
- 1118
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-11
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
谁有handOverTo()函数使用经验
下面代码使用handOverTo()的地方导致ACAD崩溃
- AcDbObjectId oxaInsteadBlockRef(ads_name entname, CString
- strNewBlkName,CString strFile)
- {
- AcDbObjectId idNewBlk;
- AcDbObjectId idBlk;
- if (oxaFindInsertRef(strNewBlkName,idBlk)==false)
- {
- return idNewBlk;
- }
-
- AcDbObjectId idOldBlk;
- if (acdbGetObjectId(idOldBlk,entname)!=Acad::eOk)
- {
- return idNewBlk;
- }
- AcDbEntity* pEnt;
- if(Acad::eOk!=acdbOpenAcDbEntity(pEnt, idOldBlk, AcDb::kForRead))
- {
- return idNewBlk;
- }
- ///////块 获取块的各个特性转移到新的块上。
- AcDbBlockReference *blkRef=AcDbBlockReference::cast(pEnt);
- AcGePoint3d aptPos;
- double dRota;
- CString strLayer;
- if (blkRef!=NULL)
- {
- aptPos=blkRef->position();
- dRota=blkRef->rotation();
- strLayer=blkRef->layer();
- blkRef->close();
- }
- pEnt->close();
-
- //生成新的块
- AcDbObject* pNewObj=NULL;
- AcDbBlockReference blkNew(aptPos,idBlk);
- blkNew.setLayer(strLayer);
- blkNew.setRotation(dRota);
- blkNew.close();
- acdbOpenAcDbObject(pNewObj,blkNew.objectId(),AcDb::kForRead);
-
- AcDbObject* pOldObj=NULL; //打开原来的块 准备替换
- if (acdbOpenAcDbObject(pOldObj,idOldBlk,AcDb::kForWrite)!
- =Acad::eOk)
- { //AfxMessageBox("not open");
- return idNewBlk;
- }
-
- //AfxMessageBox(" openx");
- CString str=oxaGetErrorStatusWord(pOldObj->handOverTo
- (pNewObj)); //主要是这里出错
-
- AfxMessageBox(str);
- pOldObj->close();
- pNewObj->close();
- }
- //////////////////////////////////////////////////////
- //////////////////////////////////////////////////////
- bool oxaFindInsertRef(CString strRefName,AcDbObjectId &idBlk, CString
- strFile)
- {
- CString strTempRefName="tmtemp-A$C5F1E06FE";
- Acad :: ErrorStatus es;
- AcDbDatabase *pCurDb = NULL;
- pCurDb = acdbHostApplicationServices()->workingDatabase();//获取
- 当前图形数据库
- AcDbBlockTable *pBltTb=NULL;
- pCurDb->getSymbolTable(pBltTb,AcDb::kForRead);
-
- if (pBltTb->has(strRefName)==true) //acutPrintf(" 图形中存在块 ");
- {
- if (Acad::eOk==pBltTb->getAt(strRefName,idBlk))
- {
- pBltTb->close();
- return true;
- }
- }
- pBltTb->close();
-
- //当前图形数据库不存在指定块,就从指定文件里查找。
- if (strFile!="")
- {
- AcDbDatabase *pDb=new AcDbDatabase(Adesk::kFalse);
- es=pDb->readDwgFile(strFile);
- if (es!=Acad::eOk)
- {
- //acutPrintf(oxaGetErrorStatusWord(es));
- delete pDb;
- return false;
- }
- //
- AcDbObjectId idBlock;
-
- //es=pCurDb->insert(idBlock, "XXXXX" , pDb);
- es=pCurDb->insert(idBlock, strRefName ,strTempRefName,
- pDb);
- delete pDb;
- if ((es==Acad::eOk)&&(pBltTb->has(strRefName)==true))
- //acutPrintf(" 图形中存在块 ");
- {
- AcDbBlockTableRecord *pBltTbRcd;
- pBltTb->getAt
- (strTempRefName,pBltTbRcd,AcDb::kForWrite);
- pBltTbRcd->erase(); //删除临时块定义。不可用
- erase(false)
- if (Acad::eOk==pBltTb->getAt(strRefName,idBlk))
- {
- pBltTb->close();
- pBltTbRcd->close();
- return true;
- }
- pBltTb->close();
- pBltTbRcd->close();
- }
-
- }
- return false;
- }
复制代码 |
|