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


杭州格原