DwgReader.cpp
上传用户:hell82222
上传日期:2013-12-19
资源大小:1872k
文件大小:10k
- #include "stdafx.h"
- #include "FileSwitch.h"
- #include "DwgReader.h"
- #include "KmSection.h"
- #include "Reader.h"
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[]=__FILE__;
- #define new DEBUG_NEW
- #endif
- extern CStdioFile g_CensorialFile; //监察转换进度的文件
- extern int g_mode;
- //////////////////////////////////////////////////////////////////////
- // 第一部分 转换框架
- // 实现DWG文件向KMG文件转换的流程.
- //////////////////////////////////////////////////////////////////////
- // 第一步 构造DWG文件分析器.
- // 第二步 打开文件分析器,使之处于开始转换状态.
- // 第三步 分析文件并调用转换器转换.
- // 第四步 关闭文件分析器,使之处于结束转换状态.
- // 第五步 析构DWG文件分析器.
- //////////////////////////////////////////////////////////////////////
- void CDwgReader::fn_loadometer(short spercent)
- {
-
- }
- //CString CDwgReader::m_strACADpath="";//AutoCAD文件搜索路径
- //第一步 构造文件分析器.
- CDwgReader::CDwgReader(CProgressInfo* pProgress,CCommandInfo* pCommand,CKmgConverter* pConverter)
- {//记录进度类指针,控制类指针,转换类指针.
- m_pProgress = pProgress;
- m_pCommand = pCommand;
- m_pConverter = pConverter;
- m_iCurPlotStyleTable = -1;
- m_iModelPlotStyleTable = -1;
- m_strDimStyleFullName = "";
- adHanclear(m_hFirstDimStyle);
- #ifdef _BAOJI_
- m_dTotalTxtHeight = 0.0;
- m_dwTextcount = 0;
- #endif
- }
- //第二步 打开文件分析器,使之处于开始转换状态.
- BOOL CDwgReader::BeginConvert()
- {
- _WRITE(str="ttDWG图形文件转换为KMG图形文件转换信息记录n");
- if(!allocateadptrs())
- {
- _WRITE(str="内存不足,无法启动转换服务");
- return FALSE;
- }
- _WRITE(str="成功启动转换服务,等待接受任务中...");
- return TRUE;
- }
- BOOL CDwgReader::allocateadptrs(void)
- {
- if((adhd=(PAD_DWGHDR)malloc(sizeof(AD_DWGHDR)))!=NULL)
- {
- if((adenhd=(PAD_ENT_HDR)malloc(sizeof(AD_ENT_HDR)))!=NULL)
- {
- if((aden=(PAD_ENT)malloc(sizeof(AD_ENT)))!=NULL)
- {
- if((adtb=(PAD_TB)malloc(sizeof(AD_TB)))!=NULL)
- {
- if((adxd=(PAD_XD)malloc(sizeof(AD_XD)))!=NULL)
- {
- if((adobhd=(PAD_OBJ_HDR)malloc(sizeof(AD_OBJ_HDR)))!=NULL)
- {
- if((adob=(PAD_OBJ)malloc(sizeof(AD_OBJ)))!=NULL)
- {
- return TRUE;
- }
- free(adobhd);
- }
- free(adxd);
- }
- free(adtb);
- }
- free(aden);
- }
- free(adenhd);
- }
- free(adhd);
- }
- return FALSE;
- }
- void CDwgReader::freeadptrs(void)
- {
- free(adxd);
- free(adtb);
- free(aden);
- free(adenhd);
- free(adhd);
- free(adobhd);
- free(adob);
- try
- {
- for(int i=0;i<m_aPlotStyleTable.GetSize();i++)
- {
- //extern short ADCDECL adFreePlotStyleTable _((ADPLOTSTYLETABLE *pTable));
- sReturnValue=adFreePlotStyleTable(m_aPlotStyleTable[i]);
- if(sReturnValue!=1)
- {
- _WRITE2(str="释放打印样式错误!");
- }
- }
- }
- catch(...)
- {
- }
- m_aPlotStyleTable.RemoveAll();
- }
- //第四步 关闭文件分析器,使之处于结束转换状态.
- BOOL CDwgReader::EndConvert()
- {
- freeadptrs();
- _WRITE(str="转换服务被关闭");
- return TRUE;
- }
- //第三步 分析文件并调用转换器转换
- BOOL CDwgReader::Parse() //分析文件的主函数
- {
- _WRITE(str="n接收到新任务...");
- _WRITE(str.Format("DWG文件路径:%s",m_pCommand->m_strSourceName));
- _WRITE(str.Format("KMG文件路径:%s",m_pCommand->m_strAimName));
- // adSetAd2CriticalErrorFn(fn_critical);
- m_pProgress->SetProgressInfoAbsolute(0.01,"初始化...");
- TCHAR szFileName[MAX_PATH];
- HMODULE hModule=::GetModuleHandle("fileswitch.dll");
- ::GetModuleFileName(hModule,szFileName,MAX_PATH);
- (*_tcsrchr(szFileName,'\'))=' ';
- _tcscat(szFileName,_T("\support\init.dat"));
- //short adInitAd2 _((const char * initfilepath, short *initerror));
- if(!adInitAd2(szFileName,&sReturnValue))
- {
- _WRITE(str="初始化失败,无法启动转换服务");
- _ERROR;
- return FALSE;
- }
- m_pProgress->SetProgressInfoAbsolute(0.02,"初始化...");
- //void adAcceptR14BetaFiles();
- adAcceptR14BetaFiles();
- //void adConvertPlinesOnLoad (short convert);
- adConvertPlinesOnLoad(1);
- //void adSetupDwgRead _((void));
- adSetupDwgRead();
- //void adSetupDxfRead _((void));
- adSetupDxfRead();
- CString ext=m_pCommand->m_strSourceName.Right(3);
- ext.MakeLower();
- if(ext=="dwg")
- {
- try
- {
- //软件包BUG 可能死循环
- sReturnValue=adDwgSmellsBad((char *)(LPCTSTR(m_pCommand->m_strSourceName)));
- if (sReturnValue==-1)
- {
- _ERROR;
- }
- else if(sReturnValue==0)
- {
- }
- else
- {
- _WRITE(str="文件格式不正确,可能已经被破坏");
- _ERROR;
- }
- }
- catch(...)
- {
- _WRITE(str="打开文件错误");
- _ERROR;
- try
- {
- //void adCloseAd2();
- adCloseAd2();
- }
- catch(...)
- {
- }
- return FALSE;
- }
- }
-
- //_WRITE(str="tip:转换百分率回调函数没有设置");
- //void adSetAd2LoadometerFn (void (*loadometer)(short errorno));
- adSetAd2LoadometerFn(fn_loadometer);
- try
- {
- TCHAR szFileName[MAX_PATH];
- ::memmove(szFileName,(char *)(LPCTSTR(m_pCommand->m_strSourceName)),m_pCommand->m_strSourceName.GetLength());
- szFileName[m_pCommand->m_strSourceName.GetLength()]=' ';
- (*_tcsrchr(szFileName,'\'))=' ';
- _tcscat(szFileName,_T("\"));
- m_strAddPath=szFileName;
- }
- catch(...){}
- AD_DB_HANDLE dwghandle; //AutoCAD文件句柄.
- //AD_DB_HANDLE adLoadFile (void *fn, char preloadstrat, short addA2kObjs);
- try
- {
- dwghandle=adLoadFile( (char *)(LPCTSTR(m_pCommand->m_strSourceName)),AD_PRELOAD_ALL,1);
- }
- catch(...)
- {
- _WRITE(str="打开文件错误");
- _ERROR;
- try
- {
- //void adCloseAd2();
- adCloseAd2();
- }
- catch(...)
- {
- }
- return FALSE;
- }
- if(dwghandle==NULL)
- {
- _WRITE(str="打开文件错误");
- _ERROR;
- //void adCloseAd2();
- adCloseAd2();
- return FALSE;
- }
- m_pProgress->SetProgressInfoAbsolute(0.30,"分析数据...");
- if(!m_pConverter->BeginConverter())
- {
- _WRITE(str="转换服务启动失败");
- //extern short ADCDECL adCloseFile _((AD_DB_HANDLE handle));
- adCloseFile(dwghandle);
- //void adCloseAd2();
- adCloseAd2();
- return FALSE;
- }
- m_aColor.RemoveAll();
- // m_alwidth.RemoveAll();
- m_altype.ReInit();
- m_alayer.ReInit();
- m_ablock.ReInit();
- m_apaper.ReInit();
- m_amltype.ReInit();
- m_ashape.ReInit();
- m_adimstyle.ReInit();
- m_aplot.ReInit();
- adHanclear(m_hFirstDimStyle);
- try
- {
- for(int i=0;i<m_aPlotStyleTable.GetSize();i++)
- {
- //extern short ADCDECL adFreePlotStyleTable _((ADPLOTSTYLETABLE *pTable));
- sReturnValue=adFreePlotStyleTable(m_aPlotStyleTable[i]);
- if(sReturnValue!=1)
- {
- _WRITE2(str="释放打印样式错误!");
- }
- }
- }
- catch(...)
- {
- }
- m_aPlotStyleTable.RemoveAll();
- BOOL bProcessed;
- if(!(bProcessed=processfile(dwghandle)))
- {
- m_aColor.RemoveAll();
- // m_alwidth.RemoveAll();
- m_altype.ReInit();
- m_alayer.ReInit();
- m_ablock.ReInit();
- m_apaper.ReInit();
- m_amltype.ReInit();
- m_ashape.ReInit();
- m_adimstyle.ReInit();
- m_aplot.ReInit();
- try
- {
- for(int i=0;i<m_aPlotStyleTable.GetSize();i++)
- {
- //extern short ADCDECL adFreePlotStyleTable _((ADPLOTSTYLETABLE *pTable));
- sReturnValue=adFreePlotStyleTable(m_aPlotStyleTable[i]);
- if(sReturnValue!=1)
- {
- _WRITE2(str="释放打印样式错误!");
- }
- }
- }
- catch(...)
- {
- }
- m_aPlotStyleTable.RemoveAll();
- _WRITE(str="转换失败");
- if(!m_pConverter->EndConverter())
- {
- _WRITE(str="转换服务关闭失败");
- //extern short ADCDECL adCloseFile _((AD_DB_HANDLE handle));
- adCloseFile(dwghandle);
- //void adCloseAd2();
- adCloseAd2();
- return FALSE;
- }
- //extern short ADCDECL adCloseFile _((AD_DB_HANDLE handle));
- adCloseFile(dwghandle);
- //void adCloseAd2();
- adCloseAd2();
- return FALSE;
- }
- m_aColor.RemoveAll();
- // m_alwidth.RemoveAll();
- m_altype.ReInit();
- m_alayer.ReInit();
- m_ablock.ReInit();
- m_apaper.ReInit();
- m_amltype.ReInit();
- m_ashape.ReInit();
- m_adimstyle.ReInit();
- m_aplot.ReInit();
- try
- {
- for(int i=0;i<m_aPlotStyleTable.GetSize();i++)
- {
- //extern short ADCDECL adFreePlotStyleTable _((ADPLOTSTYLETABLE *pTable));
- sReturnValue=adFreePlotStyleTable(m_aPlotStyleTable[i]);
- if(sReturnValue!=1)
- {
- _WRITE2(str="释放打印样式错误!");
- }
- }
- }
- catch(...)
- {
- }
- m_aPlotStyleTable.RemoveAll();
- m_pProgress->SetProgressInfoAbsolute(0.99,"分析完成...");
- if(!m_pConverter->EndConverter())
- {
- _WRITE(str="转换服务关闭失败");
- //extern short ADCDECL adCloseFile _((AD_DB_HANDLE handle));
- adCloseFile(dwghandle);
- //void adCloseAd2();
- adCloseAd2();
- return FALSE;
- }
- try
- {
- //short adCloseFile (AD_DB_HANDLE handle);
- if(adCloseFile(dwghandle)!=1)
- {
- _WRITE(str="关闭AutoCAD文件失败");
- _ERROR;
- //void adCloseAd2();
- adCloseAd2();
- //return FALSE; //说明:无法关闭opendwg打开的文件时,不认为转换失败.
- }
- //void adCloseAd2();
- adCloseAd2();
- }
- catch(...)
- {
- _WRITE(str="关闭AutoCAD文件失败");
- }
- _WRITE(str="n任务处理结束,等待接受新任务中...n");
- return bProcessed;
- }
- BOOL CDwgReader::Parse(AD_DB_HANDLE dwghandle)
- {
- if(!m_pConverter->BeginConverter())
- {
- _WRITE(str="转换服务启动失败");
- return FALSE;
- }
- BOOL bProcessed;
- bProcessed=processfile(dwghandle,FALSE);
- if(!m_pConverter->EndConverter())
- {
- _WRITE(str="转换服务关闭失败");
- bProcessed=FALSE;
- }
- m_aColor.RemoveAll();
- // m_alwidth.RemoveAll();
- m_altype.ReInit();
- m_alayer.ReInit();
- m_ablock.ReInit();
- m_apaper.ReInit();
- m_amltype.ReInit();
- m_ashape.ReInit();
- m_adimstyle.ReInit();
- m_aplot.ReInit();
- try
- {
- //short adCloseFile (AD_DB_HANDLE handle);
- if(adCloseFile(dwghandle)!=1)
- {
- _WRITE(str="关闭AutoCAD文件失败");
- _ERROR;
- }
- }
- catch(...)
- {
- _WRITE(str="关闭AutoCAD文件失败");
- }
- _WRITE(str="n任务处理结束,等待接受新任务中...n");
- return bProcessed;
- }
- //第五步 析构文件分析器.
- CDwgReader::~CDwgReader()
- {
- }