给图纸中的光栅对象、外部参照重命名


给图纸中的光栅对象重命名,使其名称中带有引用它的dwg文件的名称,便于区分
例如: 【a.dwg】 使用【b.jpg】,使用函数后【b.jpg】文件名变为【a.dwg-b.jpg】,这样转移【a.dwg】到其他位置时,不用cad打开图纸也能知道【b.jpg】与【a.dwg】有关联,可以将【b.jpg】一并复制

void ReDefineRasterImg(AcDbDatabase *pDb)

{

 CString s_OldFileName,s_NewFileName,s_ImgPath,s_Tmp,s_DwgPath,s_OldFilePath;

 Acad::ErrorStatus es; 

 const TCHAR *pDwgFileName = NULL;

 pDb->getFilename(pDwgFileName);

 s_DwgPath = CHeXinFile::GetPathFromFileName(pDwgFileName);

    AcDbObjectId objId = AcDbRasterImageDef::imageDictionary(pDb);  //获取dwg中的光栅定义字典的对象ID

 if (objId != AcDbObjectId::kNull)

 {

  AcDbDictionary *pDic=NULL;

     AcDbRasterImageDef *pRasImgDef=NULL;

  if(Acad::eOk == acdbOpenAcDbObject((AcDbObject*&)pDic,objId,AcDb::kForRead))   //打开定义光栅的字典对象

  {

   AcDbDictionaryIterator *pIt=pDic->newIterator();

   for (;!pIt->done();pIt->next())

   {

       if(Acad::eOk ==pIt->getObject((AcDbObject*&)pRasImgDef,AcDb::kForWrite))

    {

     s_OldFilePath =pRasImgDef->sourceFileName();

     s_ImgPath = CHeXinFile::GetPathFromFileName(s_OldFilePath);

     s_OldFileName = CHeXinFile::GetNameFromFileName(s_OldFilePath);

     s_Tmp = CHeXinFile::GetNameFromFileName(pDwgFileName)+_T("-")+ s_OldFileName;

     s_NewFileName.Format(_T("%s%s"),s_ImgPath,s_Tmp);

     SetCurrentDirectory(s_DwgPath);   //设置工作路径,这样可以解析光栅对象中的相对路径

     CopyFile(pRasImgDef->sourceFileName(),s_NewFileName,FALSE);  //直接重命名文件被cad占用,不能实现 。 需要复制原有的光栅文件并重新设置光栅路径实现

     pRasImgDef->setSourceFileName(s_NewFileName);

     pRasImgDef->load();

     pRasImgDef->close();

     CFile::Remove(s_OldFilePath);  //删除原有光栅文件

    }

   }

   delete pIt;

   pDic->close();

  }

 }

}

----------------------------------------------------------------------------------------------------------------
重命名外部参照对象的名称,功能与ReDefineRasterImg相同,给被引用的dwg文件名加上引用它的dwg文件的文件名
void ReDefineXref(AcDbDatabase *pDb)

{

 CString s_OldFileName,s_NewFileName,s_XrefPath,s_Tmp,s_DwgPath;

 Acad::ErrorStatus es; 

 const TCHAR *pDwgFileName = NULL;

 pDb->getFilename(pDwgFileName);

 s_DwgPath = CHeXinFile::GetPathFromFileName(pDwgFileName);

 const TCHAR *pBuf = NULL;

 AcDbBlockTable *pBlkTb=NULL;

 if(Acad::eOk == pDb->getSymbolTable(pBlkTb,AcDb::kForRead))

 {

  AcDbBlockTableIterator *pIt=NULL;

  pBlkTb->newIterator(pIt);




  for (;!pIt->done();pIt->step())

  {

   AcDbBlockTableRecord *pTBRec=NULL;

   pIt->getRecord(pTBRec,AcDb::kForWrite);

   es = pTBRec->pathName(pBuf);   //获取外部参照的路径




   if(_tcsclen(pBuf) > 0 && (pTBRec->isFromExternalReference() || pTBRec->isFromOverlayReference()))

   {

    s_XrefPath = CHeXinFile::GetPathFromFileName(pBuf);

    s_OldFileName = CHeXinFile::GetNameFromFileName(pBuf);

    s_Tmp = CHeXinFile::GetNameFromFileName(pDwgFileName)+_T("-")+ s_OldFileName;

    s_NewFileName.Format(_T("%s%s"),s_XrefPath,s_Tmp);

    SetCurrentDirectory(s_DwgPath);

    CFile::Rename(pBuf,s_NewFileName);

    pTBRec->setPathName(s_NewFileName);

   }

   pTBRec->close();

  }

  delete pIt;

  pBlkTb->close();

 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值