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

CAD

开发平台:

Visual C++

  1. // KmMatch.cpp: implementation of the KmMatch class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "KmMatch.h"
  6. #include "DwgReader.h"
  7. #include "KmEntity.h"
  8. #include "Reader.h"
  9. #include "Database.h"
  10. //////////////////////////////////////////////////////////////////////
  11. // Construction/Destruction
  12. //////////////////////////////////////////////////////////////////////
  13. extern CStdioFile g_CensorialFile; //监察转换进度的文件
  14. extern int g_mode;
  15. CMatch1::CMatch1()
  16. {
  17. }
  18. CMatch1::~CMatch1()
  19. {
  20. }
  21. CMatchList1::CMatchList1()
  22. {
  23. }
  24. CMatchList1::~CMatchList1()
  25. {
  26. ReInit();
  27. }
  28. void CMatchList1::ReInit()
  29. {
  30. POSITION posCur;
  31. POSITION pos=m_List.GetHeadPosition();
  32. while(pos)
  33. {
  34. posCur=pos;
  35. delete m_List.GetNext(pos);
  36. m_List.RemoveAt(posCur);
  37. }
  38. }
  39. void CMatchList1::Add(AD_OBJHANDLE handle,int ltype,double lscale,short sindex) //添加到列表中
  40. {
  41. CMatch1* match=new CMatch1;
  42. memcpy(match->m_handle,handle,8);
  43. match->m_ltype=ltype;
  44. match->m_lscale=lscale;
  45. match->m_index=sindex;
  46. m_List.AddTail(match);
  47. }
  48. short CMatchList1::Get(AD_OBJHANDLE handle,int &ltype,double &lscale) //添加到列表中
  49. {
  50. CMatch1* match;
  51. POSITION pos=m_List.GetHeadPosition();
  52. while(pos)
  53. {
  54. match=m_List.GetNext(pos);
  55. if(match->m_handle[0]==handle[0])
  56. {
  57. if(match->m_handle[1]==handle[1])
  58. {
  59. if(match->m_handle[2]==handle[2])
  60. {
  61. if(match->m_handle[3]==handle[3])
  62. {
  63. if(match->m_handle[4]==handle[4])
  64. {
  65. if(match->m_handle[5]==handle[5])
  66. {
  67. if(match->m_handle[6]==handle[6])
  68. {
  69. if(match->m_handle[7]==handle[7])
  70. {
  71. ltype=match->m_ltype;
  72. lscale=match->m_lscale;
  73. return match->m_index;
  74. }}}}}}}}
  75. }
  76. ltype=SOLID_LINE;
  77. lscale=1;
  78. _WRITE(str.Format("*句柄%x%x%x%x%x%x%x%x没有在匹配链表中找到匹配项",handle[0],handle[1],handle[2],handle[3],handle[4],handle[5],handle[6],handle[7]));
  79. return 0;
  80. }
  81. void CMatchList1::Get(AD_OBJHANDLE& handle,int ltype) //添加到列表中
  82. {
  83. CMatch1* match;
  84. POSITION pos=m_List.GetHeadPosition();
  85. while(pos)
  86. {
  87. match=m_List.GetNext(pos);
  88. if(match->m_ltype==ltype)
  89. {
  90. adHancpy(handle,match->m_handle);
  91. return ;
  92. }
  93. }
  94. _WRITE(str.Format("线形链表中的第%d种线形不存在",ltype));
  95. if(m_List.GetCount()>0)
  96. {
  97. adHancpy(handle,m_List.GetHead()->m_handle);
  98. }
  99. return ;
  100. }
  101. int CMatchList1::Get(short sindex)
  102. {
  103. CMatch1* match;
  104. POSITION pos=m_List.GetHeadPosition();
  105. while(pos)
  106. {
  107. match=m_List.GetNext(pos);
  108. if(match->m_index==sindex)
  109. {
  110. return match->m_ltype;
  111. }
  112. }
  113. _WRITE(str.Format("线形链表中的第%d号线形不存在",sindex));
  114. return SOLID_LINE;
  115. }
  116. POSITION CMatchList1::GetHeadPosition()
  117. {
  118. return m_List.GetHeadPosition();
  119. }
  120. CMatch1* CMatchList1::GetNext(POSITION& pos)
  121. {
  122. return m_List.GetNext(pos);
  123. }
  124. CMatch2::CMatch2()
  125. {
  126. m_bUseful=TRUE;
  127. }
  128. CMatch2::~CMatch2()
  129. {
  130. }
  131. CMatchList2::CMatchList2()
  132. {
  133. }
  134. CMatchList2::~CMatchList2()
  135. {
  136. ReInit();
  137. }
  138. void CMatchList2::ReInit()
  139. {
  140. POSITION posCur;
  141. POSITION pos=m_List.GetHeadPosition();
  142. while(pos)
  143. {
  144. posCur=pos;
  145. delete m_List.GetNext(pos);
  146. m_List.RemoveAt(posCur);
  147. }
  148. }
  149. void CMatchList2::Add(AD_OBJHANDLE handle,UINT id,double lscale,BOOL bRef) //添加到列表中
  150. {
  151. CMatch2* match=new CMatch2;
  152. memcpy(match->m_handle,handle,8);
  153. match->m_id=id;
  154. match->m_lscale=lscale;
  155. match->m_bRef=bRef;
  156. m_List.AddTail(match);
  157. }
  158. void CMatchList2::Get(AD_OBJHANDLE handle,UINT &id,double &lscale) //添加到列表中
  159. {
  160. CMatch2* match;
  161. POSITION pos=m_List.GetHeadPosition();
  162. while(pos)
  163. {
  164. match=m_List.GetNext(pos);
  165. if(match->m_handle[0]==handle[0])
  166. {
  167. if(match->m_handle[1]==handle[1])
  168. {
  169. if(match->m_handle[2]==handle[2])
  170. {
  171. if(match->m_handle[3]==handle[3])
  172. {
  173. if(match->m_handle[4]==handle[4])
  174. {
  175. if(match->m_handle[5]==handle[5])
  176. {
  177. if(match->m_handle[6]==handle[6])
  178. {
  179. if(match->m_handle[7]==handle[7])
  180. {
  181. if(!match->m_bUseful)
  182. {
  183. id=0;
  184. }
  185. else
  186. {
  187. id=match->m_id;
  188. }
  189. lscale=match->m_lscale;
  190. return;
  191. }}}}}}}}
  192. }
  193. id=0;
  194. lscale=1.0;
  195. _WRITE(str.Format("*句柄%x%x%x%x%x%x%x%x没有在匹配链表中找到匹配项",handle[0],handle[1],handle[2],handle[3],handle[4],handle[5],handle[6],handle[7]));
  196. return ;
  197. }
  198. BOOL CMatchList2::Get(AD_OBJHANDLE &handle,UINT id) //添加到列表中
  199. {
  200. CMatch2* match;
  201. POSITION pos=m_List.GetHeadPosition();
  202. while(pos)
  203. {
  204. match=m_List.GetNext(pos);
  205. if(match->m_id==id)
  206. {
  207. adHancpy(handle,match->m_handle);
  208. return TRUE;
  209. }
  210. }
  211. _WRITE(str.Format("层%d没有在匹配链表中找到匹配项",id));
  212. if(m_List.GetCount()>0)
  213. {
  214. adHancpy(handle,m_List.GetHead()->m_handle);
  215. return TRUE;
  216. }
  217. return FALSE;
  218. }
  219. BOOL CMatchList2::Get(UINT& id,AD_OBJHANDLE handle) //添加到列表中
  220. {
  221. CMatch2* match;
  222. POSITION pos=m_List.GetHeadPosition();
  223. while(pos)
  224. {
  225. match=m_List.GetNext(pos);
  226. if(match->m_handle[0]==handle[0])
  227. {
  228. if(match->m_handle[1]==handle[1])
  229. {
  230. if(match->m_handle[2]==handle[2])
  231. {
  232. if(match->m_handle[3]==handle[3])
  233. {
  234. if(match->m_handle[4]==handle[4])
  235. {
  236. if(match->m_handle[5]==handle[5])
  237. {
  238. if(match->m_handle[6]==handle[6])
  239. {
  240. if(match->m_handle[7]==handle[7])
  241. {
  242. id=match->m_id;
  243. return TRUE;
  244. }}}}}}}}
  245. }
  246. return FALSE;
  247. }
  248. POSITION CMatchList2::GetHeadPosition()
  249. {
  250. return m_List.GetHeadPosition();
  251. }
  252. CMatch2* CMatchList2::GetNext(POSITION& pos)
  253. {
  254. return m_List.GetNext(pos);
  255. }
  256. CMatch3::CMatch3()
  257. {
  258. m_iplotsheet=-1;
  259. }
  260. CMatch3::~CMatch3()
  261. {
  262. }
  263. CMatch4::CMatch4()
  264. {
  265. }
  266. CMatch4::~CMatch4()
  267. {
  268. segcolor.RemoveAll();
  269. segltyle.RemoveAll();
  270. }
  271. CShape::CShape()
  272. {
  273. m_bUseSHX=FALSE;
  274. m_strShapefilename.Empty();
  275. m_strBigFontfilename.Empty();
  276. m_strShapename.Empty();
  277. m_lShapeCapacity=0;
  278. m_utShapeflag1=0;
  279. m_utShapeflag2=0;
  280. m_dShapeAngle=0;
  281. m_dShapeHeight=0;
  282. m_dShapeWidth=0;
  283. m_KmWordStyleID=1;
  284. }
  285. CShape::~CShape()
  286. {
  287. }
  288. //DEL void CShape::Analyse(CStdioFile* file)
  289. //DEL {
  290. //DEL  char ch;
  291. //DEL  char ch1,ch2;//,ch3,ch4,ch5;
  292. //DEL  //绘图模式 =true移动并绘制 =false移动不绘制
  293. //DEL  BOOL bdraw=TRUE;
  294. //DEL  //单位矢量的长度
  295. //DEL  double dscale=1;
  296. //DEL  double x=0;
  297. //DEL  double y=0;
  298. //DEL  CList<double,double>xstack;
  299. //DEL  CList<double,double>ystack;
  300. //DEL  do
  301. //DEL  {
  302. //DEL  ch=0;
  303. //DEL  if(!file->Read(&ch,1))
  304. //DEL  {
  305. //DEL  return;
  306. //DEL  }
  307. //DEL  switch(ch)
  308. //DEL  {
  309. //DEL  case 1://激活绘图模式(落笔)
  310. //DEL  bdraw=TRUE;
  311. //DEL  break;
  312. //DEL  case 2://停止绘图模式(提笔)
  313. //DEL  bdraw=FALSE;
  314. //DEL  break;
  315. //DEL  case 3://将矢量长度除以下一字节
  316. //DEL  if(!file->Read(&ch1,1))
  317. //DEL  {
  318. //DEL  return;
  319. //DEL  }
  320. //DEL  dscale*=(unsigned char)ch1;
  321. //DEL  break;
  322. //DEL  case 4://将矢量长度乘以下一字节
  323. //DEL  if(!file->Read(&ch1,1))
  324. //DEL  {
  325. //DEL  return;
  326. //DEL  }
  327. //DEL  dscale/=(unsigned char)ch1;
  328. //DEL  break;
  329. //DEL  case 5://将当前位置压入堆栈 
  330. //DEL  xstack.AddTail(x);
  331. //DEL  ystack.AddTail(y);
  332. //DEL  break;
  333. //DEL  case 6://从堆栈弹出当前位置
  334. //DEL  if(xstack.GetTailPosition()!=NULL)
  335. //DEL  {
  336. //DEL  x=xstack.RemoveTail();
  337. //DEL  }
  338. //DEL  if(ystack.GetTailPosition()!=NULL)
  339. //DEL  {
  340. //DEL  y=ystack.RemoveTail();
  341. //DEL  }
  342. //DEL  break;
  343. //DEL  case 7://绘制编号由下一字节指定的子形
  344. //DEL  if(!file->Read(&ch1,1))
  345. //DEL  {
  346. //DEL  return;
  347. //DEL  }
  348. //DEL  break;
  349. //DEL  case 8://由下两个字节指定的 X-Y 位移
  350. //DEL  if(!file->Read(&ch1,1))
  351. //DEL  {
  352. //DEL  return;
  353. //DEL  }
  354. //DEL  if(!file->Read(&ch2,1))
  355. //DEL  {
  356. //DEL  return;
  357. //DEL  }
  358. //DEL  AddLine(x,y,ch1*dscale,ch2*dscale);
  359. //DEL  break;
  360. //DEL  case 9://多个 X-Y 位移,以 (0,0) 终止 
  361. //DEL  do
  362. //DEL  {
  363. //DEL  if(!file->Read(&ch1,1))
  364. //DEL  {
  365. //DEL  return;
  366. //DEL  }
  367. //DEL  if(!file->Read(&ch2,1))
  368. //DEL  {
  369. //DEL  return;
  370. //DEL  }
  371. //DEL  AddLine(x,y,ch1*dscale,ch2*dscale);
  372. //DEL  }while((ch1!=0)&&(ch2!=0));
  373. //DEL  break;
  374. //DEL  case 10://由下两个字节定义的八分圆弧
  375. //DEL  file->Read(&ch,1);
  376. //DEL  file->Read(&ch,1);
  377. //DEL  break;
  378. //DEL  case 11://由下五个字节定义的分数圆弧
  379. //DEL  file->Read(&ch,1);
  380. //DEL  file->Read(&ch,1);
  381. //DEL  file->Read(&ch,1);
  382. //DEL  file->Read(&ch,1);
  383. //DEL  file->Read(&ch,1);
  384. //DEL  break;
  385. //DEL  case 12://由 X-Y 位移和凸度定义的圆弧
  386. //DEL  case 13://多个指定凸度的圆弧
  387. //DEL  break;
  388. //DEL  case 14://仅对垂直文字执行下一命令 
  389. //DEL  break;
  390. //DEL  default://矢量长度和方向代码
  391. //DEL  break;
  392. //DEL  }
  393. //DEL  }while(ch!=0);
  394. //DEL }
  395. //DEL void CShape::AddLine(double& x,double& y,double offsetx,double offsety)
  396. //DEL {
  397. //DEL  KmLine* pLine=new KmLine;
  398. //DEL  pLine->bx=x;
  399. //DEL  pLine->by=y;
  400. //DEL  x+=offsetx;
  401. //DEL  y+=offsety;
  402. //DEL  pLine->ex=x;
  403. //DEL  pLine->ey=y;
  404. //DEL  m_objs.AddTail(pLine);
  405. //DEL }
  406. CMatch5::CMatch5()
  407. {
  408. m_shape=NULL;
  409. }
  410. CMatch5::~CMatch5()
  411. {
  412. if(m_shape)
  413. {
  414. try
  415. {
  416. delete m_shape;
  417. }
  418. catch(...)
  419. {
  420. }
  421. }
  422. }
  423. CMatch6::CMatch6()
  424. {
  425. }
  426. CMatch6::~CMatch6()
  427. {
  428. }
  429. //DEL BOOL CMatch5::Load(CString filename)
  430. //DEL {
  431. //DEL  m_shapes.SetSize(0);
  432. //DEL 
  433. //DEL  CFileFind filefind;
  434. //DEL  if(!filefind.FindFile(filename))
  435. //DEL  {
  436. //DEL  return FALSE;
  437. //DEL  }
  438. //DEL 
  439. //DEL  CStdioFile file;
  440. //DEL  file.Open(filename,CFile::modeRead|CFile::typeBinary|CFile::shareDenyNone);
  441. //DEL 
  442. //DEL  CString strTemp;
  443. //DEL  if(!file.ReadString(strTemp))
  444. //DEL  {
  445. //DEL  _WRITE(str="形文件"+filename+"格式错误");
  446. //DEL  return FALSE;
  447. //DEL  }
  448. //DEL  _WRITE(str="分析形文件"+strTemp+"_"+filename);
  449. //DEL 
  450. //DEL  char  ch;
  451. //DEL  int count;
  452. //DEL  for(int j=0;j<5;j++)
  453. //DEL  {
  454. //DEL  if(!file.Read(&ch,1))
  455. //DEL  {
  456. //DEL  return FALSE;
  457. //DEL  }
  458. //DEL  }
  459. //DEL  if(!file.Read(&ch,1))
  460. //DEL  {
  461. //DEL  return FALSE;
  462. //DEL  }
  463. //DEL  count=ch;
  464. //DEL  if(count<=0)
  465. //DEL  {
  466. //DEL  return FALSE;
  467. //DEL  }
  468. //DEL  if(!file.Read(&ch,1))
  469. //DEL  {
  470. //DEL  return FALSE;
  471. //DEL  }
  472. //DEL  if(ch!=0)
  473. //DEL  {
  474. //DEL  return FALSE;
  475. //DEL  }
  476. //DEL  for(int i=0;i<count;i++)
  477. //DEL  {
  478. //DEL  for(j=0;j<4;j++)
  479. //DEL  {
  480. //DEL  if(!file.Read(&ch,1))
  481. //DEL  {
  482. //DEL  return FALSE;
  483. //DEL  }
  484. //DEL  }
  485. //DEL  }
  486. //DEL  CShape* pshape;
  487. //DEL  m_shapes.SetSize(count);
  488. //DEL  for(i=0;i<count;i++)
  489. //DEL  {
  490. //DEL  pshape=new CShape;
  491. //DEL  pshape->m_indexinfile=i+1;
  492. //DEL  strTemp.Empty();
  493. //DEL  do
  494. //DEL  {
  495. //DEL  if(!file.Read(&ch,1))
  496. //DEL  {
  497. //DEL  delete pshape;
  498. //DEL  return FALSE;
  499. //DEL  }
  500. //DEL  strTemp+=ch;
  501. //DEL  }while(ch!=0);
  502. //DEL  pshape->m_strname=strTemp;
  503. //DEL 
  504. //DEL  pshape->Analyse(&file);
  505. //DEL 
  506. //DEL  m_shapes[i]=pshape;
  507. //DEL  }
  508. //DEL  return TRUE;
  509. //DEL }
  510. CMatchList3::CMatchList3()
  511. {
  512. }
  513. CMatchList3::~CMatchList3()
  514. {
  515. ReInit();
  516. }
  517. void CMatchList3::ReInit()
  518. {
  519. POSITION posCur;
  520. POSITION pos=m_List.GetHeadPosition();
  521. while(pos)
  522. {
  523. posCur=pos;
  524. delete m_List.GetNext(pos);
  525. m_List.RemoveAt(posCur);
  526. }
  527. }
  528. void CMatchList3::Add(AD_OBJHANDLE handle,CString strlayeroutname,int iplotsheet) //添加到列表中
  529. {
  530. CMatch3* match=new CMatch3;
  531. memcpy(match->m_handle,handle,8);
  532. match->m_layeroutname=strlayeroutname;
  533. match->m_iplotsheet=iplotsheet;
  534. m_List.AddTail(match);
  535. }
  536. POSITION CMatchList3::GetHeadPosition()
  537. {
  538. return m_List.GetHeadPosition();
  539. }
  540. CMatch3* CMatchList3::GetNext(POSITION& pos)
  541. {
  542. return m_List.GetNext(pos);
  543. }
  544. BOOL CMatchList3::IsInList(AD_OBJHANDLE handle)
  545. {
  546. CMatch3* match;
  547. POSITION pos=m_List.GetHeadPosition();
  548. while(pos)
  549. {
  550. match=m_List.GetNext(pos);
  551. if(match->m_handle[0]==handle[0])
  552. {
  553. if(match->m_handle[1]==handle[1])
  554. {
  555. if(match->m_handle[2]==handle[2])
  556. {
  557. if(match->m_handle[3]==handle[3])
  558. {
  559. if(match->m_handle[4]==handle[4])
  560. {
  561. if(match->m_handle[5]==handle[5])
  562. {
  563. if(match->m_handle[6]==handle[6])
  564. {
  565. if(match->m_handle[7]==handle[7])
  566. {
  567. return TRUE;
  568. }}}}}}}}
  569. }
  570. return FALSE;
  571. }
  572. CMatchList4::CMatchList4()
  573. {
  574. }
  575. CMatchList4::~CMatchList4()
  576. {
  577. ReInit();
  578. }
  579. void CMatchList4::ReInit()
  580. {
  581. POSITION posCur;
  582. POSITION pos=m_List.GetHeadPosition();
  583. while(pos)
  584. {
  585. posCur=pos;
  586. delete m_List.GetNext(pos);
  587. m_List.RemoveAt(posCur);
  588. }
  589. }
  590. void CMatchList4::Add(AD_OBJHANDLE handle,CMatch4* match) //添加到列表中
  591. {
  592. memcpy(match->m_handle,handle,8);
  593. m_List.AddTail(match);
  594. }
  595. BOOL CMatchList4::Get(AD_OBJHANDLE handle,CMatch4*& match)
  596. {
  597. CMatch4* match2;
  598. POSITION pos=m_List.GetHeadPosition();
  599. while(pos)
  600. {
  601. match2=m_List.GetNext(pos);
  602. if(match2->m_handle[0]==handle[0])
  603. {
  604. if(match2->m_handle[1]==handle[1])
  605. {
  606. if(match2->m_handle[2]==handle[2])
  607. {
  608. if(match2->m_handle[3]==handle[3])
  609. {
  610. if(match2->m_handle[4]==handle[4])
  611. {
  612. if(match2->m_handle[5]==handle[5])
  613. {
  614. if(match2->m_handle[6]==handle[6])
  615. {
  616. if(match2->m_handle[7]==handle[7])
  617. {
  618. match=match2;
  619. return TRUE;
  620. }}}}}}}}
  621. }
  622. match=NULL;
  623. _WRITE(str.Format("*句柄%x%x%x%x%x%x%x%x没有在匹配链表中找到匹配项",handle[0],handle[1],handle[2],handle[3],handle[4],handle[5],handle[6],handle[7]));
  624. return FALSE;
  625. }
  626. CMatchList5::CMatchList5()
  627. {
  628. }
  629. CMatchList5::~CMatchList5()
  630. {
  631. ReInit();
  632. }
  633. void CMatchList5::ReInit()
  634. {
  635. POSITION posCur;
  636. POSITION pos=m_List.GetHeadPosition();
  637. while(pos)
  638. {
  639. posCur=pos;
  640. delete m_List.GetNext(pos);
  641. m_List.RemoveAt(posCur);
  642. }
  643. }
  644. CShape* CMatchList5::GetHead()
  645. {
  646. if(m_List.GetHeadPosition()!=NULL)
  647. {
  648. return m_List.GetHead()->m_shape;
  649. }
  650. return NULL;
  651. }
  652. void CMatchList5::Add(AD_OBJHANDLE handle,CShape* shape) //添加到列表中
  653. {
  654. static int d=0;d++;
  655. CWordStyle ws;
  656. CString strName;strName.Format("%s#CONV%d",shape->m_strShapename,d);
  657. ws.SetName(strName);
  658. CString strTemp;
  659. if(shape->m_bUseSHX){if(shape->m_strBigFontfilename.IsEmpty())shape->m_strBigFontfilename="bzdft.shx";ws.SetFontName(shape->m_strShapefilename + ';' + shape->m_strBigFontfilename );}
  660. else{ws.SetFontName( shape->m_strShapefilename);}
  661. if(shape->m_dShapeHeight==0)
  662. {
  663. ws.SetHeight(5);
  664. }
  665. else
  666. {
  667. ws.SetHeight(shape->m_dShapeHeight);
  668. }
  669. try
  670. {
  671. ws.SetWFactor(shape->m_dShapeWidth);
  672. }
  673. catch(...)
  674. {
  675. ws.SetWFactor(shape->m_dShapeWidth);
  676. }
  677. //ws.SetFlag(STEXT_WS);
  678. CKmDataManager* pDataManager=::GetActiveDataManager();
  679. if(pDataManager)
  680. {
  681. CString strTemp;
  682. int index=0;
  683. ws.SetID(0);
  684. while((shape->m_KmWordStyleID=pDataManager->AddWordStyle(ws,TRUE))==0)
  685. {
  686. index++;
  687. strTemp.Format("%s#%d",strName,index);
  688. ws.SetName(strTemp);
  689. }
  690. }
  691. CMatch5* match=new CMatch5;
  692. memcpy(match->m_handle,handle,8);
  693. match->m_shape=shape;
  694. m_List.AddTail(match);
  695. }
  696. BOOL CMatchList5::Get(AD_OBJHANDLE handle,CMatch5*& match)
  697. {
  698. CMatch5* match2;
  699. POSITION pos=m_List.GetHeadPosition();
  700. while(pos)
  701. {
  702. match2=m_List.GetNext(pos);
  703. if(match2->m_handle[0]==handle[0])
  704. {
  705. if(match2->m_handle[1]==handle[1])
  706. {
  707. if(match2->m_handle[2]==handle[2])
  708. {
  709. if(match2->m_handle[3]==handle[3])
  710. {
  711. if(match2->m_handle[4]==handle[4])
  712. {
  713. if(match2->m_handle[5]==handle[5])
  714. {
  715. if(match2->m_handle[6]==handle[6])
  716. {
  717. if(match2->m_handle[7]==handle[7])
  718. {
  719. match=match2;
  720. return TRUE;
  721. }}}}}}}}
  722. }
  723. _WRITE(str.Format("*形文件%x%x%x%x%x%x%x%x没有在匹配链表中找到匹配项",handle[0],handle[1],handle[2],handle[3],handle[4],handle[5],handle[6],handle[7]));
  724. return FALSE;
  725. }
  726. CShape* CMatchList5::Get(UINT kmid)
  727. {
  728. CMatch5* match2;
  729. POSITION pos=m_List.GetHeadPosition();
  730. while(pos)
  731. {
  732. match2=m_List.GetNext(pos);
  733. if(match2->m_shape->m_KmWordStyleID==kmid)
  734. {
  735. return match2->m_shape;
  736. }
  737. }
  738. _WRITE(str.Format("*形文件%d没有在匹配链表中找到匹配项",kmid));
  739. return NULL;
  740. }
  741. //DEL void CMatchList5::processentity(CKmgConverter* pConverter,AD_OBJHANDLE handle,int index,
  742. //DEL  double x0,double y0,double z0,double scale,double lean ,double retota,double widthscale)
  743. //DEL {
  744. //DEL  CMatch5* match=NULL;
  745. //DEL  CMatch5* match2;
  746. //DEL 
  747. //DEL  POSITION pos=m_List.GetHeadPosition();
  748. //DEL  while(pos)
  749. //DEL  {
  750. //DEL  match2=m_List.GetNext(pos);
  751. //DEL  if(match2->m_handle[0]==handle[0])
  752. //DEL  {
  753. //DEL  if(match2->m_handle[1]==handle[1])
  754. //DEL  {
  755. //DEL  if(match2->m_handle[2]==handle[2])
  756. //DEL  {
  757. //DEL  if(match2->m_handle[3]==handle[3])
  758. //DEL  {
  759. //DEL  if(match2->m_handle[4]==handle[4])
  760. //DEL  {
  761. //DEL  if(match2->m_handle[5]==handle[5])
  762. //DEL  {
  763. //DEL  if(match2->m_handle[6]==handle[6])
  764. //DEL  {
  765. //DEL  if(match2->m_handle[7]==handle[7])
  766. //DEL  {
  767. //DEL  match=match2;
  768. //DEL  break;
  769. //DEL  }}}}}}}}
  770. //DEL  }
  771. //DEL  if(match==NULL)
  772. //DEL  {
  773. //DEL  _WRITE(str.Format("*形文件%x%x%x%x%x%x%x%x没有在匹配链表中找到匹配项",handle[0],handle[1],handle[2],handle[3],handle[4],handle[5],handle[6],handle[7]));
  774. //DEL  return ;
  775. //DEL  }
  776. //DEL  if(match->m_shapes.GetSize()<index)
  777. //DEL  {
  778. //DEL  _WRITE(str.Format("*形文件%x%x%x%x%x%x%x%x中没有第%d号形",handle[0],handle[1],handle[2],handle[3],handle[4],handle[5],handle[6],handle[7],index));
  779. //DEL  return ;
  780. //DEL  }
  781. //DEL  KmObject* pObj;
  782. //DEL  KmObject* pCopy;
  783. //DEL  pos=match->m_shapes[index-1]->m_objs.GetHeadPosition();
  784. //DEL  while(pos!=NULL)
  785. //DEL  {
  786. //DEL  pObj=match->m_shapes[index-1]->m_objs.GetNext(pos);
  787. //DEL  pCopy=(KmObject*)pObj->GetRuntimeClass()->CreateObject();
  788. //DEL  pCopy->Copy(pObj);
  789. //DEL  pConverter->ConverterEntiey_KmObject(pCopy);
  790. //DEL  }
  791. //DEL  return ;
  792. //DEL }
  793. CMatchList6::CMatchList6()
  794. {
  795. }
  796. CMatchList6::~CMatchList6()
  797. {
  798. ReInit();
  799. }
  800. void CMatchList6::ReInit()
  801. {
  802. POSITION posCur;
  803. POSITION pos=m_List.GetHeadPosition();
  804. while(pos)
  805. {
  806. posCur=pos;
  807. delete m_List.GetNext(pos);
  808. m_List.RemoveAt(posCur);
  809. }
  810. }
  811. void CMatchList6::Add(AD_OBJHANDLE handle,CString strDicdflt) //添加到列表中
  812. {
  813. CMatch6* match=new CMatch6;
  814. memcpy(match->m_handle,handle,8);
  815. match->m_strDicdflt=strDicdflt;
  816. m_List.AddTail(match);
  817. }
  818. BOOL CMatchList6::Get(AD_OBJHANDLE handle,CString& strDicdflt)
  819. {
  820. CMatch6* match2;
  821. POSITION pos=m_List.GetHeadPosition();
  822. while(pos)
  823. {
  824. match2=m_List.GetNext(pos);
  825. if(match2->m_handle[0]==handle[0])
  826. {
  827. if(match2->m_handle[1]==handle[1])
  828. {
  829. if(match2->m_handle[2]==handle[2])
  830. {
  831. if(match2->m_handle[3]==handle[3])
  832. {
  833. if(match2->m_handle[4]==handle[4])
  834. {
  835. if(match2->m_handle[5]==handle[5])
  836. {
  837. if(match2->m_handle[6]==handle[6])
  838. {
  839. if(match2->m_handle[7]==handle[7])
  840. {
  841. strDicdflt=match2->m_strDicdflt;
  842. return TRUE;
  843. }}}}}}}}
  844. }
  845. _WRITE(str.Format("*形文件%x%x%x%x%x%x%x%x没有在匹配链表中找到匹配项",handle[0],handle[1],handle[2],handle[3],handle[4],handle[5],handle[6],handle[7]));
  846. return FALSE;
  847. }