KmgConverter.cpp
上传用户:hell82222
上传日期:2013-12-19
资源大小:1872k
文件大小:30k
源码类别:

CAD

开发平台:

Visual C++

  1. //      KMCAD40-FileSwitch-KmgConverter.cpp-1.0 
  2. // KmgConverter.cpp: implementation of the CKmgConverter class.
  3. //
  4. //////////////////////////////////////////////////////////////////////
  5. #include "stdafx.h"
  6. #include "FileSwitch.h"
  7. #include "KmgConverter.h"
  8. #include "KmLayer.h"
  9. #include "showdef.h"
  10. #include "entdef.h"
  11. #include "KmEntity.h"
  12. #include "Block.h"
  13. #include "KmText.h"
  14. #include "KmGroup.h"
  15. #include "WordStyle.h"
  16. #include "DwgReader.h"
  17. #include "DBDef.h"
  18. #include "Reader.h"
  19. #include "KmSelectObjs.h"
  20. #include "dimstyle.h"
  21. #include <atlbase.h>
  22. #include "database.h"
  23. #include "ExtendInfoIdentify.h"
  24. #ifdef _DEBUG
  25. #undef THIS_FILE
  26. static char THIS_FILE[]=__FILE__;
  27. #define new DEBUG_NEW
  28. #endif
  29. extern CStdioFile g_CensorialFile; //监察转换进度的文件
  30. extern int g_mode;
  31. //////////////////////////////////////////////////////////////////////
  32. // Construction/Destruction
  33. //////////////////////////////////////////////////////////////////////
  34. CKmgConverter::CKmgConverter(CCommandInfo* pCommand)
  35. {
  36. m_dSysDimScale=1.0;
  37. m_pCommand=pCommand;
  38. }
  39. CKmgConverter::~CKmgConverter()
  40. {
  41. }
  42. BOOL CKmgConverter::BeginConverter()
  43. {
  44. try
  45. {
  46. m_pDataManager=new CKmDataManager;
  47. ::SetActiveDataManager(m_pDataManager);
  48. m_pDataManager->Init();
  49. }
  50. catch(CMemoryException* e)
  51. {
  52. TCHAR szCause[255];
  53. e->GetErrorMessage(szCause, 255);
  54. _WRITE(str=szCause);
  55. return FALSE;
  56. }
  57. catch(...)
  58. {
  59. _WRITE(str="构造KM数据库时发生未知错误");
  60. return FALSE;
  61. }
  62. ::SetActiveDataManager(m_pDataManager);
  63. m_dDataVessel=DATAVESSEL_DATABASE;
  64. return TRUE;
  65. }
  66. BOOL CKmgConverter::EndConverter()
  67. {
  68. while(m_ModelSpace.GetCount()!=0)
  69. {
  70. delete m_ModelSpace.RemoveHead();
  71. }
  72. delete m_pDataManager;
  73. ::SetActiveDataManager(NULL);
  74. m_aLayerStatus.RemoveAll();
  75. return TRUE;
  76. }
  77. BOOL CKmgConverter::ConverterDbVar(KMDBVarID nID, VARIANT& var)
  78. {
  79. m_pDataManager->SetDBVar(nID,var);
  80. return TRUE;
  81. }
  82. DWORD CKmgConverter::ConverterEnthead_Layer(
  83. BOOL bOn,
  84. BOOL bFrozen,
  85. CString strName,
  86. int icolor,
  87. int ilwidth,
  88. int iltype)
  89. {
  90. KmLayer* pLayer=new KmLayer;
  91. pLayer->Off(!bOn);
  92. pLayer->Frozen(bFrozen);
  93. pLayer->SetLineWidth(ilwidth);
  94. pLayer->SetLineType(iltype);
  95. pLayer->SetName(strName);
  96. pLayer->SetColor(icolor);
  97. pLayer->SetDeclare("转换至"+strName+"层");
  98. CString strTemp=strName;
  99. int iSameNum=1;
  100. //需要判断重名的情况.
  101. UINT KmID=0;
  102. while( (KmID=m_pDataManager->AddLayer(pLayer))==0)
  103. {
  104. iSameNum++;
  105. strTemp.Format("%s#%d",strName,iSameNum);
  106. pLayer->SetName(strTemp);
  107. }
  108. delete pLayer;
  109. return KmID;
  110. }
  111. DWORD CKmgConverter::ConverterEnthead_Blockdefine(
  112. CString strName,
  113. CString strDescription)
  114. {
  115. static int iSameNum=1;
  116. CString strTemp;
  117. KmBlockDef* pBlockDef=new KmBlockDef;
  118. if(strName.Find('*'))//系统块
  119. {
  120. strTemp.Format("%s#%d",strName,iSameNum);
  121. pBlockDef->SetName(strTemp);
  122. iSameNum++;
  123. }
  124. else
  125. {
  126. pBlockDef->SetName(strName);
  127. }
  128. pBlockDef->SetDeclare("转换至"+strName+"块,描述:"+strDescription);
  129. strTemp=strName;
  130. UINT KmID=0;
  131. while( (KmID=m_pDataManager->AddBlockDef(pBlockDef))==0)
  132. {
  133. strTemp.Format("%s#%d",strName,iSameNum);
  134. pBlockDef->SetName(strTemp);
  135. iSameNum++;
  136. }
  137. delete pBlockDef;
  138. return KmID;
  139. }
  140. BOOL CKmgConverter::CheckNoUseBlock(DWORD dwKmID)
  141. {
  142. KmBlockDef* pBlockDef=m_pDataManager->GetBlockDef(dwKmID);
  143. if(!pBlockDef)
  144. {
  145. return FALSE;
  146. }
  147. if(pBlockDef->GetObjectNum()<=0)
  148. {
  149. m_pDataManager->DeleteBlockDef(dwKmID);
  150. return FALSE;
  151. }
  152. return TRUE;
  153. }
  154. BOOL CKmgConverter::SetDataVessel(int dVessel,DWORD dwKmID)
  155. {
  156. m_dDataVessel=dVessel;
  157. if(dVessel==DATAVESSEL_BLOCKDEF)
  158. {
  159. m_pActiveBlockDef=m_pDataManager->GetBlockDef(dwKmID);
  160. if(m_pActiveBlockDef)
  161. {
  162. return TRUE;
  163. }
  164. return FALSE;
  165. }
  166. return TRUE;
  167. }
  168. int CKmgConverter::GetDataVessel(DWORD& dwKmID)
  169. {
  170. dwKmID=-1;
  171. if(m_pActiveBlockDef&&m_dDataVessel==DATAVESSEL_BLOCKDEF)
  172. {
  173. try
  174. {
  175. dwKmID=m_pActiveBlockDef->GetID();
  176. }
  177. catch(...)
  178. {
  179. return m_dDataVessel;
  180. }
  181. }
  182. return m_dDataVessel;
  183. }
  184. void CKmgConverter::WriteEnthead(int ilwidth,int icolor,int iltype,double dlscale,UINT idlayer)
  185. {
  186. m_enthead.ilwidth = ilwidth ;
  187. m_enthead.icolor = icolor ;
  188. m_enthead.iltype = iltype ;
  189. m_enthead.dlscale = dlscale ;
  190. m_enthead.idlayer = idlayer ;
  191. }
  192. void CKmgConverter::WriteEnthead(int icolor,int iltype)
  193. {
  194. m_enthead.icolor = icolor ;
  195. m_enthead.iltype = iltype ;
  196. }
  197. /* x
  198. 函数说明:
  199. 功能:将模型空间的实体通过视口导入纸区空间。
  200. 参数:变换矩阵和变换范围。
  201. */
  202. void CKmgConverter::UniteModelToSpace(double xoffset,double yoffset,double zoffset,double scale,double minx,double miny,double maxx,double maxy,int mode)
  203. {
  204. //{准备变换矩阵。
  205. if(fabs(scale)<PRECISION)
  206. {
  207. scale=1.0;
  208. }
  209. KmPoint pOffset(xoffset,yoffset);
  210. KmPoint pZero(0.0,0.0);
  211. //}
  212. //{准备筛选矩形。
  213. KmRect rect(minx,maxy,maxx,miny);
  214. rect.NormalizeRect();
  215. //}
  216. //{准备临时变量。
  217. SELECTOBJS SelectedObjs;
  218. KmSelectObjs KmSelectedObjs(&SelectedObjs);
  219. KmObject* pObj=NULL;
  220. KmObject* pCopy=NULL;
  221. //}
  222. m_pDataManager->StartModify();
  223. POSITION pos=m_ModelSpace.GetHeadPosition();
  224. while(pos!=NULL)
  225. {
  226. pObj=m_ModelSpace.GetNext(pos);
  227. if(pObj)
  228. {
  229. pCopy=(KmObject*)pObj->GetRuntimeClass()->CreateObject();
  230. pCopy->Copy(pObj);
  231. if(pCopy->IsKindOf(RUNTIME_CLASS(KmGroup)))
  232. {
  233. ((KmGroup*)pCopy)->StartForbidRefresh();
  234. pCopy->Zoom(scale,pZero);
  235. pCopy->Move(pOffset);
  236. ((KmGroup*)pCopy)->EndForbidRefresh();
  237. }
  238. else
  239. {
  240. pCopy->Zoom(scale,pZero);
  241. pCopy->Move(pOffset);
  242. }
  243. pCopy->ReCalculateRect();
  244. //{如果实体的矩形与给定的矩形无交则不转换
  245. if(!pCopy->ConjointCalculatedRect(rect))
  246. {
  247. delete pCopy;
  248. continue;
  249. }
  250. //}
  251. //按布局(图纸空间)缩放标注  根据当前模型空间视口和图纸空间的比例确定比例因子。AutoCAD 把该值当作 0 保存在 DIMSCALE 系统变量里。
  252. if(pCopy->GetRuntimeClass()->IsDerivedFrom(RUNTIME_CLASS(KmDim)))
  253. {
  254. if(((KmDim*)pCopy)->GetDSAMgr())//对于尺寸如果它的DIMSCALE==0的话设置为s
  255. {
  256. {
  257. VARIANT var;
  258. memset(&var,0,sizeof(VARIANT)); 
  259. ((KmDim*)pCopy)->GetDSAMgr()->GetDsVar(DIMSCALE,var);
  260. if(fabs(var.dblVal)<PRECISION)
  261. {
  262. var.vt=VT_R8;
  263. var.dblVal=scale;
  264. ((KmDim*)pCopy)->GetDSAMgr()->SetDsVar(DIMSCALE,var);
  265. }
  266. else
  267. {
  268. var.vt=VT_R8;
  269. try
  270. {
  271. var.dblVal*=scale;
  272. }
  273. catch(...)
  274. {
  275. }
  276. ((KmDim*)pCopy)->GetDSAMgr()->SetDsVar(DIMSCALE,var);
  277. }
  278. }
  279. {
  280. VARIANT var;
  281. memset(&var,0,sizeof(VARIANT)); 
  282. ((KmDim*)pCopy)->GetDSAMgr()->GetDsVar(DIMLFAC,var);
  283. var.vt=VT_R8;
  284. try
  285. {
  286. var.dblVal/=scale;
  287. }
  288. catch(...)
  289. {
  290. }
  291. ((KmDim*)pCopy)->GetDSAMgr()->SetDsVar(DIMLFAC,var);
  292. }
  293. }
  294. }
  295. if((mode!=2)||(!pCopy->GetRuntimeClass()->IsDerivedFrom(RUNTIME_CLASS(KmCurve))))
  296. {
  297. m_pDataManager->AddObj(pCopy,TRUE);
  298. delete pCopy;
  299. continue;
  300. }
  301. KmSelectedObjs.RemoveAll();
  302. pCopy->DoRectSelect(7,rect,SelectedObjs);
  303. KmSelectedObjs.SelectUseful();
  304. KmSelectedObjs.AddObj2Database(m_pDataManager);
  305. KmSelectedObjs.RemoveAll();
  306. delete pCopy;
  307. }
  308. }
  309. KmSelectedObjs.RemoveAll();
  310. m_pDataManager->EndModify();
  311. }
  312. void CKmgConverter::Calculate_ChangeFont(CWordStyle* pWordStyle)
  313. {
  314. ASSERT(pWordStyle);
  315. CString strBigFontName;
  316. CString strFontName=pWordStyle->GetFontName();
  317. CString strFontName2;
  318. double dScale=1.0;
  319. double dHeightScale=1.0;
  320. FONTMAPITEM* pFontMapItem=NULL;
  321. int ipos=strFontName.Find(';');
  322. if(ipos!=-1)
  323. {
  324. strBigFontName=strFontName.Right(strFontName.GetLength()-ipos-1);
  325. strFontName=strFontName.Left(ipos);
  326. if(m_mapFont.Lookup(strFontName,(void* &)pFontMapItem))
  327. {
  328. ASSERT(pFontMapItem);
  329. strFontName2=pFontMapItem->m_strFontName;
  330. dScale=pFontMapItem->m_dScale;
  331. dHeightScale=pFontMapItem->m_dhegithscale;
  332. if(m_mapFont.Lookup(strBigFontName,(void* &)pFontMapItem))
  333. {
  334. ASSERT(pFontMapItem);
  335. pWordStyle->SetFontName(strFontName2+';'+pFontMapItem->m_strFontName);
  336. pWordStyle->SetHeight(pWordStyle->GetHeight()*pFontMapItem->m_dScale);//优先应用大字体的比例。
  337. pWordStyle->SetWFactor(pWordStyle->GetWFactor()*pFontMapItem->m_dhegithscale);
  338. }
  339. else
  340. {
  341. pWordStyle->SetFontName(strFontName2+';'+strBigFontName);
  342. pWordStyle->SetHeight(pWordStyle->GetHeight()*dScale);//优先应用大字体的比例。
  343. pWordStyle->SetWFactor(pWordStyle->GetWFactor()*dHeightScale);
  344. }
  345. }
  346. else if(m_mapFont.Lookup(strBigFontName,(void* &)pFontMapItem))
  347. {
  348. pWordStyle->SetFontName(strFontName+';'+pFontMapItem->m_strFontName);
  349. pWordStyle->SetHeight(pWordStyle->GetHeight()*pFontMapItem->m_dScale);//优先应用大字体的比例。
  350. pWordStyle->SetWFactor(pWordStyle->GetWFactor()*pFontMapItem->m_dhegithscale);
  351. }
  352. }
  353. else
  354. {
  355. if(m_mapFont.Lookup(strFontName,(void* &)pFontMapItem))
  356. {
  357. pWordStyle->SetFontName(pFontMapItem->m_strFontName);
  358. pWordStyle->SetHeight(pWordStyle->GetHeight()*pFontMapItem->m_dScale);//优先应用大字体的比例。
  359. pWordStyle->SetWFactor(pWordStyle->GetWFactor()*pFontMapItem->m_dhegithscale);
  360. }
  361. }
  362. }
  363. KMOBJECTID CKmgConverter::AddObject(KmObject* pObj,BOOL bSetHead)
  364. {
  365. if(bSetHead)
  366. {
  367. pObj->SetLayerID(m_enthead.idlayer);
  368. pObj->SetColor(m_enthead.icolor);
  369. pObj->SetView(VIEW_MAIN);
  370. pObj->SetWidth(m_enthead.ilwidth);
  371. if(pObj->IsKindOf(RUNTIME_CLASS(KmCurve)))
  372. {
  373. ((KmCurve*)pObj)->SetLineScale(m_enthead.dlscale);
  374. ((KmCurve*)pObj)->SetStyle(m_enthead.iltype);
  375. }
  376. }
  377. if(pObj->IsKindOf(RUNTIME_CLASS(KmGroup)))
  378. {
  379. ((KmGroup*)pObj)->ModifyGroupsPara();
  380. }
  381. if(pObj->IsKindOf(RUNTIME_CLASS(KmBlockRef)))
  382. {
  383. ((KmBlockRef*)pObj)->SetTransiformByGroup(TRUE);
  384. }
  385. if(pObj->IsKindOf(RUNTIME_CLASS(KmText)))
  386. {
  387. CWordStyle* pWordStyle;
  388. pObj->SetFlag(pObj->GetFlag()|TEXT_NODESCENT);
  389. if(!m_mapFont.IsEmpty())
  390. {
  391. for(int i=0;i<((KmText*)pObj)->GetWordStyleNum();i++)
  392. {
  393. pWordStyle=((KmText*)pObj)->GetNoNWordStyle(i);
  394. if(pWordStyle)
  395. {
  396. Calculate_ChangeFont(pWordStyle);
  397. }
  398. }
  399. }
  400. }
  401. KMOBJECTID id;
  402. switch(m_dDataVessel)
  403. {
  404. case DATAVESSEL_BLOCKDEF:
  405. if(m_pActiveBlockDef)
  406. {
  407. m_pActiveBlockDef->AddObject(pObj);
  408. #ifdef _DEBUG
  409. id.dwEntIndex=1;//m_pActiveBlockDef->GetObjectNum()-1;
  410. #else
  411. id.dwEntIndex=1;
  412. #endif
  413. }
  414. else
  415. {
  416. id.dwEntIndex=0;
  417. }
  418. delete pObj;
  419. pObj=NULL;
  420. break;
  421. case DATAVESSEL_DATABASE:
  422. m_pDataManager->StartModify();
  423. id=m_pDataManager->AddObj(pObj,TRUE);
  424. m_pDataManager->EndModify();
  425. delete pObj;
  426. pObj=NULL;
  427. break;
  428. case DATAVESSEL_MODELSPACE:
  429. m_ModelSpace.AddTail(pObj);
  430. #ifdef _DEBUG
  431. id.dwEntIndex=m_ModelSpace.GetCount()-1;
  432. #else
  433. id.dwEntIndex=1;
  434. #endif
  435. break;
  436. default:
  437. delete pObj;
  438. pObj=NULL;
  439. break;
  440. }
  441. return id;
  442. }
  443. BOOL CKmgConverter::SaveAndReinitDataBase(UINT utDimStyleReplace,CString strfilename,BOOL bModel)
  444. {
  445. if(utDimStyleReplace!=UINT(-1))
  446. {
  447. VARIANT var;
  448. memset(&var,0,sizeof(VARIANT)); 
  449. var.vt=VT_INT;var.intVal=DS_INVALID_ID;
  450. m_pDataManager->SetDBVar(SIMPLEDIMDEFAULTDS,var);
  451. m_pDataManager->SetDBVar(COSERIALDIMDEFAULTDS,var);
  452. m_pDataManager->SetDBVar(DASERIALDIMDEFAULTDS,var);
  453. m_pDataManager->SetDBVar(GESERIALDIMDEFAULTDS,var);
  454. m_pDataManager->SetDBVar(ORDINATEDIMDEFAULTDS,var);
  455. m_pDataManager->SetDBVar(DIAMETERDIMDEFAULTDS,var);
  456. m_pDataManager->SetDBVar(RADIUSDIMDEFAULTDS,var);
  457. m_pDataManager->SetDBVar(SYDIAMETERDIMDEFAULTDS,var);
  458. m_pDataManager->SetDBVar(ARCLENDIMDEFAULTDS,var);
  459. m_pDataManager->SetDBVar(ANGLEDIMDEFAULTDS,var);
  460. m_pDataManager->SetDBVar(VANGLEDIMDEFAULTDS,var);
  461. m_pDataManager->SetDBVar(SYHALFSIMPLEDIMDEFAULTDS,var);
  462. m_pDataManager->SetDBVar(SYHALFANGLEDIMDEFAULTDS,var);
  463. m_pDataManager->SetCurDimStyle(utDimStyleReplace);
  464. }
  465. // m_pDataManager->m_bDBOriginOrState=DB_ORIGIN_DWGCONV_1;
  466. m_pDataManager->GetLegend()->SetShowLegend(NULL,FALSE);
  467. KmLayer* pLayer=m_pDataManager->GetFirstLayer();
  468. if(pLayer!=NULL)
  469. {
  470. m_pDataManager->SetCurrentLayer(pLayer->GetID());
  471. }
  472. else
  473. {
  474. _WRITE(str="该文件中没有层,无法用KmCAD打开,转换中止");
  475. return FALSE;
  476. }
  477. CKmDataManager* pBack=::GetActiveDataManager();
  478. ::SetActiveDataManager(m_pDataManager);
  479. if(bModel)
  480. {
  481. KmObject* pObj;
  482. m_pDataManager->StartModify();
  483. POSITION pos=m_ModelSpace.GetHeadPosition();
  484. while(pos!=NULL)
  485. {
  486. pObj=m_ModelSpace.GetNext(pos);
  487. if(!pObj)continue;
  488. /*#ifdef _DEBUG for test
  489. {
  490. CString str;
  491. str.Format("n%s,%d",pObj->Type(),pObj->GetObjectID().dwEntIndex);
  492. TRACE(str);
  493. }
  494. #endif*/
  495. m_pDataManager->AddObj(pObj,TRUE);
  496. }
  497. m_pDataManager->EndModify();
  498. }
  499. ::SetActiveDataManager(pBack);
  500. if(!ConverterPreSave_IndentifyExtendInfo())
  501. {
  502. _WRITE(str="转换扩展信息失败");
  503. return FALSE;
  504. }
  505. LoadLayerStatus();
  506. if(!m_pDataManager->WriteFile( (LPCTSTR)strfilename) )
  507. {
  508. ResetLayerStatus();
  509. _WRITE(str="文件存盘失败");
  510. return FALSE;
  511. }
  512. ResetLayerStatus();
  513. m_pDataManager->ReInitDataBaseObjs();
  514. return TRUE;
  515. }
  516. UINT CKmgConverter::ConverterEnthead_Dimstyle(PAD_DIMSTYLE dimstyle,CArray<int,int>& acolor,int iLWidthDefault,CMatchList5& ashape,BOOL bAdjusted,double dTextHeight,double dArrowSize,double dDimValueRate,UINT utWordStyle)
  517. {
  518. //  char   flag;                   /* flag for dimstyle */
  519. CString strTemp;
  520. CDimStyle kmstyle;
  521. VARIANT var;
  522. memset(&var,0,sizeof(VARIANT)); 
  523. //DIMADEC = 0,//角度标注的小数位 VT_INT 0 0 0 0
  524. var.vt=VT_INT;var.intVal=(int)dimstyle->dimadec;
  525. kmstyle.SetDimStlVar(DIMADEC,var);
  526. //DIMALT,// 选定的换算单位 VT_BOOL 关 关 关 关
  527. var.vt=VT_BOOL;var.boolVal=(VARIANT_BOOL)dimstyle->dimalt;
  528. kmstyle.SetDimStlVar(DIMALT,var);
  529. //DIMALTD,// 换算单位小数位 VT_INT 2 4 2 2
  530. var.vt=VT_INT;var.intVal=(int)dimstyle->dimaltd;
  531. kmstyle.SetDimStlVar(DIMALTD,var);
  532. //DIMALTF,// 换算单位比例因子 VT_R8 25.4000 0.0394 0.0394 0.0394
  533. var.vt=VT_R8;var.dblVal=dimstyle->dimaltf;
  534. kmstyle.SetDimStlVar(DIMALTF,var);
  535. //DIMALTRND,//换算单位的舍入值 VT_R8 0.0000 0.0000 0.0000 0.0000
  536. var.vt=VT_R8;var.dblVal=dimstyle->dimaltrnd;
  537. kmstyle.SetDimStlVar(DIMALTRND,var);
  538. //DIMALTTD,// 换算公差的小数位 VT_INT 2 4 2 2
  539. var.vt=VT_INT;var.intVal=(int)dimstyle->dimalttd;
  540. kmstyle.SetDimStlVar(DIMALTTD,var);
  541. //DIMALTTZ,// 控制换算公差的消零处理 VT_INT 0 0 0 0
  542. var.vt=VT_INT;var.intVal=(int)dimstyle->dimalttz;
  543. kmstyle.SetDimStlVar(DIMALTTZ,var);
  544. //DIMALTU,// 换算单位 VT_INT 2 8 8 2
  545. var.vt=VT_INT;var.intVal=(int)dimstyle->dimaltu;
  546. kmstyle.SetDimStlVar(DIMALTU,var);
  547. //DIMALTZ,// 控制换算单位的消零处理 VT_INT 0 0 0 0
  548. var.vt=VT_INT;var.intVal=(int)dimstyle->dimaltz;
  549. kmstyle.SetDimStlVar(DIMALTZ,var);
  550. //DIMAPOST,// 表示换算单位的文字前缀和后缀VT_BSTR
  551. strTemp=dimstyle->dimapost;
  552. {
  553. VARIANT varTmp;
  554. memset(&varTmp,0,sizeof(VARIANT)); 
  555. CComBSTR bstrTmp = strTemp;
  556. varTmp.vt = VT_BSTR;
  557. varTmp.bstrVal = bstrTmp.Copy();
  558. kmstyle.SetDimStlVar(DIMPOST,varTmp);
  559. }
  560. //DIMASZ,// 箭头尺寸 VT_R8 0.1800 2.5000 2.5000 2.5000
  561. var.vt=VT_R8;
  562. if(bAdjusted)
  563. {
  564. var.dblVal=dArrowSize;
  565. }
  566. else
  567. {
  568. var.dblVal=dimstyle->dimasz;
  569. }
  570. kmstyle.SetDimStlVar(DIMASZ,var);
  571. //DIMATFIT,// 箭头及文字自适应调整 VT_INT 3 3 3 3
  572. var.vt=VT_INT;var.intVal=(int)dimstyle->dimfit;
  573. kmstyle.SetDimStlVar(DIMATFIT,var);
  574. //DIMAUNIT,// 角度单位格式 VT_INT 0 0 0 0
  575. var.vt=VT_INT;var.intVal=(int)dimstyle->dimaunit;
  576. kmstyle.SetDimStlVar(DIMAUNIT,var);
  577. //DIMAZIN,// 控制角度标注的消零处理 VT_INT 0 0 0 0
  578. var.vt=VT_INT;var.intVal=(int)dimstyle->dimazin;
  579. kmstyle.SetDimStlVar(DIMAZIN,var);
  580. //DIMBLK,// 箭头块名称 VT_BSTR 闭合填充闭合填充闭合填充闭合填充
  581. // var.vt=VT_INT;var.intVal=dimstyle-;
  582. // kmstyle.SetDimStlVar(DIMATFIT,var);
  583. //DIMBLK1,// 第一箭头块名称 VT_BSTR 闭合填充闭合填充闭合填充闭合填充
  584. // var.vt=VT_INT;var.intVal=dimstyle-;
  585. // kmstyle.SetDimStlVar(DIMATFIT,var);
  586. //DIMBLK2,// 第二箭头块名称 VT_BSTR 闭合填充闭合填充闭合填充闭合填充
  587. // var.vt=VT_INT;var.intVal=dimstyle-;
  588. // kmstyle.SetDimStlVar(DIMATFIT,var);
  589. //DIMCEN,// 圆心标记的尺寸 VT_R8 0.0900 2.500 2.500 0.0000
  590. var.vt=VT_R8;var.dblVal=dimstyle->dimcen;
  591. kmstyle.SetDimStlVar(DIMCEN,var);
  592. //DIMDEC,// 标注的小数位 VT_INT 4 4 4 4
  593. var.vt=VT_INT;var.intVal=(int)dimstyle->dimdec;
  594. kmstyle.SetDimStlVar(DIMDEC,var);
  595. //DIMDLE,// 尺寸线超出尺寸界线的距离VT_R8 0.0000 0.0000 0.0000 0.0000
  596. var.vt=VT_R8;var.dblVal=dimstyle->dimdle;
  597. kmstyle.SetDimStlVar(DIMDLE,var);
  598. //DIMDLI,// 尺寸线间距 VT_R8 0.3800 3.7500 3.7500 7.0000
  599. var.vt=VT_R8;var.dblVal=dimstyle->dimdli;
  600. kmstyle.SetDimStlVar(DIMDLI,var);
  601. //DIMDSEP,// 小数分隔符 VT_I1 . . . .
  602. var.vt=VT_I1;var.cVal=(char)dimstyle->dimdsep;
  603. kmstyle.SetDimStlVar(DIMDSEP,var);
  604. //DIMEXE,// 尺寸界线上超尺寸线的距离VT_R8 0.1800 1.2500 1.2500 1.0000
  605. var.vt=VT_R8;var.dblVal=dimstyle->dimexe;
  606. kmstyle.SetDimStlVar(DIMEXE,var);
  607. //DIMEXO,// 尺寸界线偏离原点的距离 VT_R8 0.0625 0.0625 0.0625 1.0000
  608. var.vt=VT_R8;var.dblVal=dimstyle->dimexo;
  609. kmstyle.SetDimStlVar(DIMEXO,var);
  610. //DIMFRAC,// 分数格式 VT_INT 0 0 0 0
  611. var.vt=VT_INT;var.intVal=(int)dimstyle->dimfrac;
  612. kmstyle.SetDimStlVar(DIMFRAC,var);
  613. //DIMGAP,// 尺寸线与标注文字的间距 VT_R8 0.0900 0.6250 0.6250 0.0000
  614. var.vt=VT_R8;var.dblVal=dimstyle->dimgap;
  615. kmstyle.SetDimStlVar(DIMGAP,var);
  616. //DIMJUST,// 控制尺寸线上标注文字的水平对齐 VT_INT 0 0 0 0
  617. var.vt=VT_INT;var.intVal=(int)dimstyle->dimjust;
  618. kmstyle.SetDimStlVar(DIMJUST,var);
  619. //DIMLDRBLK,//引线箭头块名称 VT_BSTR 闭合填充闭合填充闭合填充闭合填充
  620. // var.vt=VT_INT;var.intVal=dimstyle-;
  621. // kmstyle.SetDimStlVar(DIMLDRBLK,var);
  622. //DIMLFAC,// 线性单位的比例因子 VT_R8 1.000 1.000 1.000 1.000
  623. var.vt=VT_R8;
  624. if(bAdjusted)
  625. {
  626. var.dblVal=dDimValueRate;
  627. }
  628. else
  629. {
  630. var.dblVal=dimstyle->dimlfac;
  631. }
  632. kmstyle.SetDimStlVar(DIMLFAC,var);
  633. //DIMLIM,// 生成尺寸极限文字 VT_BOOL 关 关 关 关
  634. var.vt=VT_BOOL;var.boolVal=(VARIANT_BOOL)dimstyle->dimlim;
  635. kmstyle.SetDimStlVar(DIMLIM,var);
  636. //DIMLUNIT,// 线性单位的格式 VT_INT 2 6 6 2
  637. var.vt=VT_INT;var.intVal=(int)dimstyle->dimunit;
  638. kmstyle.SetDimStlVar(DIMLUNIT,var);
  639. //DIMPOST,// 设置标注的文字前缀和后缀VT_BSTR
  640. strTemp=dimstyle->dimpost;
  641. {
  642. VARIANT varTmp;
  643. memset(&varTmp,0,sizeof(VARIANT)); 
  644. CComBSTR bstrTmp = strTemp;
  645. varTmp.vt = VT_BSTR;
  646. varTmp.bstrVal = bstrTmp.Copy();
  647. kmstyle.SetDimStlVar(DIMPOST,varTmp);
  648. }
  649. //DIMRND,// 标注距离的舍入值 VT_R8 0.0000 0.0000 0.0000 0.0000
  650. var.vt=VT_R8;var.dblVal=dimstyle->dimrnd;
  651. kmstyle.SetDimStlVar(DIMRND,var);
  652. //DIMSAH,// 分离箭头块 VT_BOOL 关 关 关 关
  653. var.vt=VT_BOOL;var.boolVal=(VARIANT_BOOL)dimstyle->dimsah;
  654. kmstyle.SetDimStlVar(DIMSAH,var);
  655. //DIMSCALE,// 全局比例因子 VT_R8 1.0000 1.0000 1.0000 1.0000
  656. var.vt=VT_R8;var.dblVal=dimstyle->dimscale;
  657. kmstyle.SetDimStlVar(DIMSCALE,var);
  658. //DIMSD1,// 禁止显示第一条尺寸线 VT_BOOL 关 关 关 关
  659. var.vt=VT_BOOL;var.boolVal=(VARIANT_BOOL)dimstyle->dimsd1;
  660. kmstyle.SetDimStlVar(DIMSD1,var);
  661. //DIMSD2,// 禁止显示第二条尺寸线 VT_BOOL 关 关 关 关
  662. var.vt=VT_BOOL;var.boolVal=(VARIANT_BOOL)dimstyle->dimsd2;
  663. kmstyle.SetDimStlVar(DIMSD2,var);
  664. //DIMSE1,// 禁止显示第一条尺寸界线 VT_BOOL 关 关 关 关
  665. var.vt=VT_BOOL;var.boolVal=(VARIANT_BOOL)dimstyle->dimse1;
  666. kmstyle.SetDimStlVar(DIMSE1,var);
  667. //DIMSE2,// 禁止显示第二条尺寸界线 VT_BOOL 关 关 关 关
  668. var.vt=VT_BOOL;var.boolVal=(VARIANT_BOOL)dimstyle->dimse2;
  669. kmstyle.SetDimStlVar(DIMSE2,var);
  670. //DIMSOXD,// 禁止尺寸界线之外的尺寸线VT_BOOL 关 关 关 开
  671. var.vt=VT_BOOL;var.boolVal=(VARIANT_BOOL)dimstyle->dimsoxd;
  672. kmstyle.SetDimStlVar(DIMSOXD,var);
  673. //DIMTAD,// 将标注文字置于尺寸线上方VT_INT 0 1 1 1
  674. var.vt=VT_INT;var.intVal=(int)dimstyle->dimtad;
  675. kmstyle.SetDimStlVar(DIMTAD,var);
  676. //DIMTDEC,// 公差的小数位 VT_INT 4 4 4 4
  677. var.vt=VT_INT;var.intVal=(int)dimstyle->dimtdec;
  678. kmstyle.SetDimStlVar(DIMTDEC,var);
  679. //DIMTFAC,// 公差对象的文字高度 VT_R8 1.0000 1.0000 1.0000 1.0000
  680. var.vt=VT_R8;var.dblVal=dimstyle->dimtfac;
  681. kmstyle.SetDimStlVar(DIMTFAC,var);
  682. //DIMTIH,// 水平放置尺寸界线内的标注文字 VT_BOOL 开 关 关 关
  683. var.vt=VT_BOOL;var.boolVal=(VARIANT_BOOL)dimstyle->dimtih;
  684. kmstyle.SetDimStlVar(DIMTIH,var);
  685. //DIMTIX,// 将标注文字置于尺寸界线内VT_BOOL 关 关 关 开
  686. var.vt=VT_INT;var.intVal=(int)dimstyle->dimtix;
  687. kmstyle.SetDimStlVar(DIMTIX,var);
  688. //DIMTM,// 下偏差 VT_R8 0.0000 0.0000 0.0000 0.0000
  689. var.vt=VT_R8;var.dblVal=dimstyle->dimtm;
  690. kmstyle.SetDimStlVar(DIMTM,var);
  691. //DIMTMOVE,// 标注文字的移动规则 VT_INT 0 0 0 0
  692. var.vt=VT_INT;var.intVal=(int)dimstyle->dimtmove;
  693. kmstyle.SetDimStlVar(DIMTMOVE,var);
  694. //DIMTOFL,// 强制尺寸线置于尺寸界线之间 VT_BOOL 关 开 开 开
  695. var.vt=VT_BOOL;var.boolVal=(VARIANT_BOOL)dimstyle->dimtofl;
  696. kmstyle.SetDimStlVar(DIMTOFL,var);
  697. //DIMTOH,// 水平放置尺寸界线外的标注文字 VT_BOOL 开 关 关 关
  698. var.vt=VT_BOOL;var.boolVal=(VARIANT_BOOL)dimstyle->dimtoh;
  699. kmstyle.SetDimStlVar(DIMTOH,var);
  700. //DIMTOL,// 公差的标注方式 VT_BOOL 关 关 关 关
  701. var.vt=VT_BOOL;var.boolVal=(VARIANT_BOOL)dimstyle->dimtol;
  702. kmstyle.SetDimStlVar(DIMTOL,var);
  703. //DIMTOLJ,// 公差的垂直对正方式 VT_INT 1 1 1 1
  704. var.vt=VT_INT;var.intVal=(int)dimstyle->dimtolj;
  705. kmstyle.SetDimStlVar(DIMTOLJ,var);
  706. //DIMTP,// 上偏差 VT_R8 0.0000 0.0000 0.0000 0.0000
  707. var.vt=VT_R8;var.dblVal=dimstyle->dimtp;
  708. kmstyle.SetDimStlVar(DIMTP,var);
  709. //DIMTSZ,// 替代箭头的小斜线尺寸 VT_R8 0.0000 0.0000 0.0000 0.0000
  710. var.vt=VT_R8;var.dblVal=dimstyle->dimtsz;
  711. kmstyle.SetDimStlVar(DIMTSZ,var);
  712. //DIMTVP,// 标注文字的垂直位置 VT_R8 0.0000 0.0000 0.0000 0.0000
  713. var.vt=VT_R8;var.dblVal=dimstyle->dimtvp;
  714. kmstyle.SetDimStlVar(DIMTVP,var);
  715. //DIMTXSTY,// 标注文字样式 (VT_INT)标准 标准 标准 标准
  716. if(utWordStyle!=((UINT)-1))
  717. {
  718. var.vt=VT_INT;var.intVal=utWordStyle;
  719. kmstyle.SetDimStlVar(DIMTXSTY,var);
  720. }
  721. else
  722. {
  723. CMatch5* match;
  724. if(ashape.Get(dimstyle->shapefileobjhandle,match))
  725. {
  726. var.vt=VT_INT;var.intVal=match->m_shape->m_KmWordStyleID;
  727. kmstyle.SetDimStlVar(DIMTXSTY,var);
  728. }
  729. }
  730. //DIMTXT,// 标注文字高度 VT_R8 0.1800 2.5000 2.5000 2.5000
  731. var.vt=VT_R8;
  732. if(bAdjusted)
  733. {
  734. var.dblVal=dTextHeight;
  735. }
  736. else
  737. {
  738. var.dblVal=dimstyle->dimtxt;
  739. }
  740. kmstyle.SetDimStlVar(DIMTXT,var);
  741. //DIMTZIN,// 控制公差的消零处理 VT_INT 0 0 0 0
  742. var.vt=VT_INT;var.intVal=(int)dimstyle->dimtzin;
  743. kmstyle.SetDimStlVar(DIMTZIN,var);
  744. //DIMUPT,// 控制用户定位文字 VT_BOOL 关 关 关 关
  745. var.vt=VT_BOOL;var.boolVal=(VARIANT_BOOL)dimstyle->dimupt;
  746. kmstyle.SetDimStlVar(DIMUPT,var);
  747. //DIMZIN,// 控制主单位值的消零处理 VT_INT 0 8 8 8*/
  748. var.vt=VT_INT;var.intVal=(int)dimstyle->dimzin;
  749. kmstyle.SetDimStlVar(DIMZIN,var);
  750. //DIMCLRD,// 尺寸线和引线颜色 VT_INT 随块 随块 随块 随块
  751. var.vt=VT_INT;var.intVal=(int)dimstyle->dimclrd;
  752. {
  753. try
  754. {
  755. if(var.intVal==AD_COLOR_BYBLOCK)
  756. {
  757. var.intVal=COLOR_BYBLOCK;//随块
  758. }
  759. else if(var.intVal==AD_COLOR_BYLAYER)
  760. {
  761. var.intVal=COLOR_BYLAYER;
  762. }
  763. else
  764. {
  765. if(var.intVal>=0 && var.intVal<acolor.GetSize())
  766. {
  767. var.intVal=acolor[var.intVal];
  768. }
  769. else
  770. {
  771. TRACE("errordata");
  772. }
  773. }
  774. }
  775. catch(...)
  776. {
  777. _WRITE(str="非法的颜色码");
  778. }
  779. }
  780. kmstyle.SetDimStlVar(DIMCLRD,var);
  781. //DIMCLRE,// 尺寸界线颜色 VT_INT 随块 随块 随块 随块
  782. var.vt=VT_INT;var.intVal=(int)dimstyle->dimclre;
  783. {
  784. try
  785. {
  786. if(var.intVal==AD_COLOR_BYBLOCK)
  787. {
  788. var.intVal=COLOR_BYBLOCK;//随块
  789. }
  790. else if(var.intVal==AD_COLOR_BYLAYER)
  791. {
  792. var.intVal=COLOR_BYLAYER;
  793. }
  794. else
  795. {
  796. if(var.intVal>=0 && var.intVal<acolor.GetSize())
  797. {
  798. var.intVal=acolor[var.intVal];
  799. }
  800. else
  801. {
  802. TRACE("errordata");
  803. }
  804. }
  805. }
  806. catch(...)
  807. {
  808. _WRITE(str="非法的颜色码");
  809. }
  810. }
  811. kmstyle.SetDimStlVar(DIMCLRE,var);
  812. //DIMCLRT,// 标注文字的颜色 VT_INT 随块 随块 随块 随块
  813. var.vt=VT_INT;var.intVal=(int)dimstyle->dimclrt;
  814. {
  815. try
  816. {
  817. if(var.intVal==AD_COLOR_BYBLOCK)
  818. {
  819. var.intVal=COLOR_BYBLOCK;//随块
  820. }
  821. else if(var.intVal==AD_COLOR_BYLAYER)
  822. {
  823. var.intVal=COLOR_BYLAYER;
  824. }
  825. else
  826. {
  827. if(var.intVal>=0 && var.intVal<acolor.GetSize())
  828. {
  829. var.intVal=acolor[var.intVal];
  830. }
  831. else
  832. {
  833. TRACE("errordata");
  834. }
  835. }
  836. }
  837. catch(...)
  838. {
  839. _WRITE(str="非法的颜色码");
  840. }
  841. }
  842. kmstyle.SetDimStlVar(DIMCLRT,var);
  843. //DIMLWD,// 尺寸线和引线线宽 VT_INT -2 -2 -2 -2
  844. var.vt=VT_INT;var.intVal=(int)dimstyle->dimlwd;
  845. {
  846. if((unsigned short)var.intVal==AD_WEIGHT_DEFAULT)
  847. {
  848. var.intVal=iLWidthDefault;
  849. }
  850. else if((unsigned short)var.intVal==AD_WEIGHT_BYBLOCK)
  851. {
  852. var.intVal=LWIDTH_BYBLOCK;//随块
  853. }
  854. else if((unsigned short)var.intVal==AD_WEIGHT_BYLAYER)
  855. {
  856. var.intVal=LWIDTH_BYLAYER;
  857. }
  858. else
  859. {
  860. var.intVal=::GetLineWidthAsInt(double(abs(var.intVal))/100.0);
  861. }
  862. }
  863. kmstyle.SetDimStlVar(DIMLWD,var);
  864. //DIMLWE,// 尺寸界线线宽 VT_INT -2 -2 -2 -2
  865. var.vt=VT_INT;var.intVal=(int)dimstyle->dimlwe;
  866. {
  867. if((unsigned short)var.intVal==AD_WEIGHT_DEFAULT)
  868. {
  869. var.intVal=iLWidthDefault;
  870. }
  871. else if((unsigned short)var.intVal==AD_WEIGHT_BYBLOCK)
  872. {
  873. var.intVal=LWIDTH_BYBLOCK;//随块
  874. }
  875. else if((unsigned short)var.intVal==AD_WEIGHT_BYLAYER)
  876. {
  877. var.intVal=LWIDTH_BYLAYER;
  878. }
  879. else
  880. {
  881. var.intVal=::GetLineWidthAsInt(double(abs(var.intVal))/100.0);
  882. }
  883. }
  884. kmstyle.SetDimStlVar(DIMLWE,var);
  885. UINT kmid;
  886. CString strName=dimstyle->name;
  887. kmstyle.SetDeclare("转换至"+strName);
  888. kmstyle.SetName(strName);
  889. {
  890. CString strTemp;
  891. int index=0;
  892. kmstyle.SetID(0);
  893. while( (kmid=m_pDataManager->AddDimStyle(kmstyle,TRUE))==0 )
  894. {
  895. strTemp.Format("%s%d",strName,index);
  896. index++;
  897. kmstyle.SetName(strTemp);
  898. }
  899. }
  900. return kmid;
  901. }
  902. UINT CKmgConverter::ConverterEnthead_Dimstyle(CDimStyle cdimstyle,BOOL bAdjusted,double dTextHeight,double dArrowSize,double dDimValueRate,UINT utWordStyle)
  903. {
  904. CString strTemp;
  905. VARIANT var;
  906. memset(&var,0,sizeof(VARIANT)); 
  907. if(bAdjusted)
  908. {
  909. var.vt=VT_R8;
  910. var.dblVal=dArrowSize;
  911. cdimstyle.SetDimStlVar(DIMASZ,var);
  912. var.vt=VT_R8;
  913. var.dblVal=dDimValueRate;
  914. cdimstyle.SetDimStlVar(DIMLFAC,var);
  915. var.vt=VT_R8;
  916. var.dblVal=dTextHeight;
  917. cdimstyle.SetDimStlVar(DIMTXT,var);
  918. }
  919. if(utWordStyle!=((UINT)-1))
  920. {
  921. var.vt=VT_INT;
  922. var.intVal=utWordStyle;
  923. cdimstyle.SetDimStlVar(DIMTXSTY,var);
  924. }
  925. UINT kmid;
  926. CString strName=cdimstyle.GetName();
  927. {
  928. CString strTemp;
  929. int index=0;
  930. cdimstyle.SetID(0);
  931. while( (kmid=m_pDataManager->AddDimStyle(cdimstyle,TRUE))==0 )
  932. {
  933. strTemp.Format("%s%d",strName,index);
  934. index++;
  935. cdimstyle.SetName(strTemp);
  936. }
  937. }
  938. return kmid;
  939. }
  940. void CKmgConverter::ReActiveDataManager()
  941. {
  942. ::SetActiveDataManager(m_pDataManager);
  943. }
  944. void CKmgConverter::ConverterEnthead_XrefBlock(DWORD dwid,double x1,double y1,double z1,CString XrefPath)
  945. {
  946. KmBlockDef* pDef=m_pDataManager->GetBlockDef(dwid);
  947. if( pDef )
  948. {
  949. pDef->SetBasePt(KmPoint(x1,y1));
  950. pDef->SetXref(XrefPath);
  951. }
  952. }
  953. //转换扩展信息
  954. BOOL CKmgConverter::ConverterPreSave_IndentifyExtendInfo()
  955. {
  956. if(!m_pDataManager)
  957. {
  958. return FALSE;//数据库空
  959. }
  960. BOOL bRected;
  961. KmRect rectOutside;
  962. KmBuffer* pBuffer=NULL;
  963. {
  964. pBuffer=CExtendInfoIdentify::CreateExtendInfoSourceBuffer(m_pDataManager,bRected,rectOutside);
  965. if(pBuffer==NULL)
  966. {
  967. return FALSE;//生成buffer空
  968. }
  969. }
  970. CExtendInfoIdentify cExtendInfoIdentify(pBuffer);
  971. KmLegend* pLegend=new KmLegend(m_pDataManager);
  972. pLegend->SetShowLegend(NULL,FALSE);
  973. double dShowScale=-1;
  974. KmPoint ptRightBottom;
  975. if(!cExtendInfoIdentify.IdentifyLegend(pLegend,dShowScale,ptRightBottom))
  976. {
  977. delete pLegend;
  978. if(!ConverterPreSave_KmLegend(bRected,rectOutside))
  979. {
  980. _WRITE(str="设置图框失败");
  981. return FALSE;
  982. }
  983. return TRUE;//不进行后续识别
  984. }
  985. else
  986. {
  987. ASSERT(dShowScale>PRECISION);
  988. pLegend->SetMainData(pLegend->GetFigureSel(),pLegend->GetAddLength(),pLegend->GetDistrictFlag(),pLegend->GetDistrictXLength(),pLegend->GetDistrictYLength(),1,dShowScale,pLegend->GetXLength(),pLegend->GetYLength(),pLegend->GetLegendDistance());
  989. m_pDataManager->GetLegend()->SetMainData(pLegend->GetFigureSel(),pLegend->GetAddLength(),pLegend->GetDistrictFlag(),pLegend->GetDistrictXLength(),pLegend->GetDistrictYLength(),1,dShowScale,pLegend->GetXLength(),pLegend->GetYLength(),pLegend->GetLegendDistance());
  990. m_pDataManager->GetLegend()->Copy(pLegend);
  991. }
  992. if(dShowScale<PRECISION)
  993. {
  994. return TRUE;
  995. }
  996. //如果正确识别了图框则往下进行标题栏和明细栏的识别
  997. if(cExtendInfoIdentify.IdentifyProductInfo(dShowScale,ptRightBottom,m_pDataManager))
  998. {
  999. }
  1000. return TRUE;
  1001. }
  1002. void CKmgConverter::SaveLayerStatus()
  1003. {
  1004. KmLayer* pLayer=m_pDataManager->GetFirstLayer();
  1005. while(pLayer)
  1006. {
  1007. int iStatus=0;
  1008. if(pLayer->IsFrozen())
  1009. {
  1010. pLayer->Frozen(FALSE);
  1011. iStatus|=0x1;
  1012. }
  1013. if(pLayer->IsOff())
  1014. {
  1015. pLayer->Off(FALSE);
  1016. iStatus|=0x2;
  1017. }
  1018. m_aLayerStatus.SetAt(pLayer->GetID(),iStatus);
  1019. pLayer=m_pDataManager->GetNextLayer();
  1020. }
  1021. }
  1022. void CKmgConverter::LoadLayerStatus()
  1023. {
  1024. KmLayer* pLayer=m_pDataManager->GetFirstLayer();
  1025. while(pLayer)
  1026. {
  1027. int iStatus=0;
  1028. m_aLayerStatus.Lookup(pLayer->GetID(),iStatus);
  1029. if(iStatus&0x1)
  1030. {
  1031. pLayer->Frozen(TRUE);
  1032. }
  1033. if(iStatus&0x2)
  1034. {
  1035. pLayer->Off(TRUE);
  1036. }
  1037. pLayer=m_pDataManager->GetNextLayer();
  1038. }
  1039. }
  1040. void CKmgConverter::ResetLayerStatus()
  1041. {
  1042. KmLayer* pLayer=m_pDataManager->GetFirstLayer();
  1043. while(pLayer)
  1044. {
  1045. if(pLayer->IsFrozen())
  1046. pLayer->Frozen(FALSE);
  1047. if(pLayer->IsOff())
  1048. pLayer->Off(FALSE);
  1049. pLayer=m_pDataManager->GetNextLayer();
  1050. }
  1051. }