统计对齐标注

//—————————————————————————–
//—– 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)

此条目发表在ObjectArx分类目录。将固定链接加入收藏夹。

发表评论