CAD工具之家's Archivers

From boitboy on 2014-01-19 16:10:35

统计对齐标注

//----------------------------------------------------------------------------- //----- acrxEntryPoint.cpp //----------------------------------------------------------------------------- #include "StdAfx.h" #include "GMTextFun.h" //GMTextFun下载 //----------------------------------------------------------------------------- #define szRDS _RXST("") //1:枚举块定义上的的所有实体(包括冻结图层,锁定图层的) Acad::ErrorStatus EnumAllEntityInBTR(AcDbObjectIdArray& ids,AcDbBlockTableRecord* pBTR) {  if(pBTR==NULL)   return Acad::eNullHandle;  //新建枚举器  AcDbBlockTableRecordIterator* pIterator=NULL;  Acad::ErrorStatus es=pBTR->newIterator(pIterator);  if(es!=Acad::eOk)   return es;  //执行遍历  AcDbObjectId id;  for(pIterator->start();!pIterator->done();pIterator->step())  {   es=pIterator->getEntityId(id);   if(es!=Acad::eOk)    continue;   ids.append(id);  }  //删除释放枚举器  delete pIterator;  pIterator=NULL;  return Acad::eOk; } //4:枚举块定义上的的所有实体(包括冻结图层,锁定图层的) Acad::ErrorStatus EnumAllEntityInBTR(AcDbObjectIdArray& ids,AcDbObjectId btrId) {  AcDbObject* pObj=NULL;  Acad::ErrorStatus es=acdbOpenAcDbObject(pObj,btrId,AcDb::kForRead);  if(es!=Acad::eOk)   return es;  if(!pObj->isKindOf(AcDbBlockTableRecord::desc()))  {   pObj->close();   return Acad::eNotThatKindOfClass;  }  AcDbBlockTableRecord* pRec=AcDbBlockTableRecord::cast(pObj);  if(pRec==NULL)  {   pObj->close();   return Acad::eNullHandle;  }  es=EnumAllEntityInBTR(ids,pRec);  pObj->close();  return es; } //获取标注中的文字 Acad::ErrorStatus GetDimText(CString& strText,AcDbAlignedDimension* pDim) {  AcDbObjectIdArray ids;  Acad::ErrorStatus es=EnumAllEntityInBTR(ids,pDim->dimBlockId());  if(es!=Acad::eOk)  {   return es;  }  for(int i=0;i<ids.logicalLength();i++)  {   AcDbEntityPointer spEnt(ids.at(i),AcDb::kForRead);   if(spEnt.openStatus()!=Acad::eOk)   {    continue;   }   if(spEnt->isKindOf(AcDbText::desc()))   {    AcDbText* pText=AcDbText::cast(spEnt.object());    TCHAR* pTextStr=pText->textString();    strText=pTextStr;    acutDelString(pTextStr);    return Acad::eOk;   }   else if(spEnt->isKindOf(AcDbMText::desc()))   {    AcDbMText* pText=AcDbMText::cast(spEnt.object());    TCHAR* pTextStr=pText->contents();    strText=pTextStr;    acutDelString(pTextStr);    MTextItemArray itemArr;    itemArr.item.str=strText;   itemArr.item.nType=-1;   itemArr.updateChildren();   strText=itemArr.getText();    return Acad::eOk;   }  }  return Acad::eNotApplicable; } void TJDQBZ() {  AcDbDatabase* pDb=acdbHostApplicationServices()->workingDatabase();  if(pDb==NULL)  {   return;  }  CStringArray strTextArray;  AcDbObjectIdArray ids;  EnumAllEntityInBTR(ids,pDb->currentSpaceId());  for(int i=0;i<ids.logicalLength();i++)  {   AcDbEntityPointer spEnt(ids.at(i),AcDb::kForRead);   if(spEnt.openStatus()!=Acad::eOk)   {    continue;   }   if(!spEnt->isKindOf(AcDbAlignedDimension::desc()))   {    continue;   }   AcDbAlignedDimension* pDim=AcDbAlignedDimension::cast(spEnt.object());   CString strText;   if(GetDimText(strText,pDim)!=Acad::eOk)   {    continue;   }   strTextArray.Add(strText);  }  if(strTextArray.GetCount()==0)  {   AfxMessageBox(_T("未找到任何距离标注"));   return;  }  CString lpDwgFile;  CFileDialog fileDlg(FALSE, _T(".xls"), NULL, OFN_LONGNAMES | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST,   _T("Excel文件 (*.xls)|*.xls||"), acedGetAcadFrame());  if (fileDlg.DoModal() != IDOK)  {   return;  }  lpDwgFile=fileDlg.GetPathName();  try  {   Excel::_ApplicationPtr pExcelApp;   HRESULT hr = pExcelApp.CreateInstance(L"Excel.Application");   ATLASSERT(SUCCEEDED(hr));   pExcelApp->Visible = true;   // make Excel’s main window visible   Excel::_WorkbookPtr pWorkbook=pExcelApp->Workbooks->Add();   Excel::_WorksheetPtr pWorksheet = pWorkbook->ActiveSheet;   Excel::RangePtr pRange = pWorksheet->Cells;    pRange->Item[1][1] = L"ID";  // read/write cell’s data   pRange->Item[1][2] = L"标注内容";   for(int i=0;i<strTextArray.GetCount();i++)   {    CString strId;    strId.Format(_T("%d"),i+1);    pRange->Item[1+i+1][1]=_bstr_t(strId);    pRange->Item[1+i+1][2]=_bstr_t(strTextArray.GetAt(i));   }      _variant_t FileFormat=Excel::xlExcel8;   pWorkbook->SaveAs(_bstr_t(lpDwgFile),    &FileFormat,   // FileFormat          &vtMissing,    // Password          &vtMissing,    // WriteResPassword          &vtMissing,    // ReadOnlyRecommended          &vtMissing,    // CreateBackup          Excel::xlNoChange);   // AccessMode   pWorkbook->Close(VARIANT_FALSE);  // save changes   pExcelApp->Quit();  }  catch (_com_error& error)  {   ATLASSERT(FALSE);   ATLTRACE2(error.ErrorMessage());  } } //----------------------------------------------------------------------------- //----- ObjectARX EntryPoint class CDimTJApp : public AcRxArxApp { public:  CDimTJApp () : AcRxArxApp () {}  virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {   AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;   // TODO: Add your initialization code here   acedRegCmds->addCommand(_T("DimTJ"),_T("TJDQBZ"),_T("TJDQBZ"),0,TJDQBZ);   acutPrintf(_T("\r\n欢迎访问CAD工具之家www.cadgj.com,大量实用CAD工具,CAD好帮手,图纸比较,图纸外发等等......"));   acutPrintf(_T("\r\n统计对齐标注命令:TJDQBZ"));   return (retCode) ;  }  virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {   AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;   // TODO: Add your code here   acedRegCmds->removeGroup(_T("DimTJ"));   return (retCode) ;  }  virtual void RegisterServerComponents () {  } } ; //----------------------------------------------------------------------------- IMPLEMENT_ARX_ENTRYPOINT(CDimTJApp)

查看完整版本: 统计对齐标注

Tags:


©CAD工具之家
创办于:2013年5月24日