QBaseObj.cpp
上传用户:oybseng
上传日期:2015-04-27
资源大小:7831k
文件大小:17k
源码类别:

GDI/图象编程

开发平台:

Visual C++

  1. // QBaseObj.cpp: implementation of the CQBaseObj class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "..stdafx.h"
  5. #include "..includeResource.h"
  6. #include "..includeQBaseObj.h"
  7. #include "math.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[]=__FILE__;
  12. #endif
  13. static long glObjIndex = 0;     // 图元的索引
  14. static long glLayerIndex = 0;   // 图层的索引
  15. static long glMapIndex = 0;     // 图扶的索引
  16. static long glProjectIndex = 0; // 工程的索引
  17. //////////////////////////////////////////////////////////////////////
  18. // Construction/Destruction
  19. //////////////////////////////////////////////////////////////////////
  20. //////////////////////////////////////////
  21. ///***************CQGIS****************///
  22. ///函数名称:CQBaseObj
  23. ///返回类型:构造函数
  24. ///入口参数:无
  25. ///出口参数:无
  26. ///思路说明:
  27. ///***************CQGIS****************///
  28. //////////////////////////////////////////
  29. CQBaseObj::CQBaseObj()
  30. {
  31. long nObjIndex = SetObjIndex();
  32. m_szObjName.Format("图元对象%d",nObjIndex);
  33. m_lObjID = 0;
  34. m_lObjID = SetObjIDByRand();
  35. //现在还没有建立图层和图幅对象 暂时先放着
  36. m_lLayerID = 0;
  37. m_lMapID = 0;
  38. m_crPenColor = RGB(0,0,255);  //blue
  39. m_crBrushColor = RGB(0,0,255);//blue
  40. m_fLineWidth = 0.0;
  41. m_nLineType = PS_SOLID;
  42. m_nObjType = QGIS_OBJ_UNKNOWN;
  43. m_bDeleted = FALSE;
  44. m_bHided = FALSE;
  45. m_bSelected = FALSE;
  46. }
  47. //////////////////////////////////////////
  48. ///***************CQGIS****************///
  49. ///函数名称:
  50. ///返回类型:
  51. ///入口参数:
  52. ///出口参数:
  53. ///思路说明:
  54. ///***************CQGIS****************///
  55. //////////////////////////////////////////
  56. CQBaseObj::CQBaseObj(const CQBaseObj & tmObj)
  57. {
  58. m_lObjID = tmObj.GetObjID();
  59. m_lLayerID = tmObj.GetObjLayerID();
  60. m_lMapID = tmObj.GetObjMapID();
  61. m_crPenColor = tmObj.GetObjPenColor();
  62. m_crBrushColor = tmObj.GetObjBrushColor();
  63. m_fLineWidth = tmObj.GetObjLineWidth();
  64. m_bDeleted = tmObj.GetObjDeleted();
  65. m_bHided = tmObj.GetObjHided();
  66. m_bSelected = tmObj.GetObjSeleted();
  67. m_szObjName = tmObj.GetObjName();
  68. m_nObjType = tmObj.GetObjType();
  69. m_nLineType = tmObj.GetObjLineType();
  70. }
  71. //////////////////////////////////////////
  72. ///***************CQGIS****************///
  73. ///函数名称:~CQBaseObj
  74. ///返回类型:
  75. ///入口参数:
  76. ///出口参数:
  77. ///思路说明:
  78. ///***************CQGIS****************///
  79. //////////////////////////////////////////
  80. CQBaseObj::~CQBaseObj()
  81. {
  82. }
  83. //////////////////////////////////////////
  84. ///***************CQGIS****************///
  85. ///函数名称:Copy
  86. ///返回类型:无
  87. ///入口参数:CQBaseObj & tmObj
  88. ///出口参数:无
  89. ///思路说明:对象拷贝
  90. ///***************CQGIS****************///
  91. //////////////////////////////////////////
  92. void CQBaseObj::Copy(const CQBaseObj & tmObj)
  93. {
  94. m_lObjID = tmObj.GetObjID();
  95. m_lLayerID = tmObj.GetObjLayerID();
  96. m_lMapID = tmObj.GetObjMapID();
  97. m_crPenColor = tmObj.GetObjPenColor();
  98. m_crBrushColor = tmObj.GetObjBrushColor();
  99. m_fLineWidth = tmObj.GetObjLineWidth();
  100. m_bDeleted = tmObj.GetObjDeleted();
  101. m_bHided = tmObj.GetObjHided();
  102. m_bSelected = tmObj.GetObjSeleted();
  103. m_szObjName = tmObj.GetObjName();
  104. m_nObjType = tmObj.GetObjType();
  105. m_nLineType = tmObj.GetObjLineType();
  106. }
  107. //////////////////////////////////////////
  108. ///***************CQGIS****************///
  109. ///函数名称:SetObjIndex
  110. ///返回类型:long
  111. ///入口参数:无
  112. ///出口参数:无
  113. ///思路说明:设置图元的索引,用于对图元进行自动命名
  114. ///***************CQGIS****************///
  115. //////////////////////////////////////////
  116. long CQBaseObj::SetObjIndex()
  117. {
  118. return ++glObjIndex;
  119. }
  120. //////////////////////////////////////////
  121. ///***************CQGIS****************///
  122. ///函数名称:
  123. ///返回类型:
  124. ///入口参数:
  125. ///出口参数:
  126. ///思路说明:
  127. ///***************CQGIS****************///
  128. //////////////////////////////////////////
  129. long CQBaseObj::SetObjIDByRand()
  130. {
  131. //初始化随机数
  132. long lObjID = 0;   
  133. srand( (unsigned)time( NULL ) );
  134. while(1)
  135. {
  136.  int g = rand()%10; //个位
  137.  int s = rand()%10; //十位
  138.  int b = rand()%10; //百位
  139.  int q = rand()%10; //万位
  140.  int m = rand()%10; //十万位
  141.      lObjID = m*10000+q*1000+b*100+s*10+g;
  142.  if(lObjID != m_lObjID)
  143.  break;
  144. }
  145.  return lObjID;
  146. }
  147. //////////////////////////////////////////
  148. ///***************CQGIS****************///
  149. ///函数名称:
  150. ///返回类型:
  151. ///入口参数:
  152. ///出口参数:
  153. ///思路说明:
  154. ///***************CQGIS****************///
  155. //////////////////////////////////////////
  156. void CQBaseObj::SetObjPenColor(COLORREF & crPen)
  157. {
  158. m_crPenColor = crPen;
  159. }
  160. //////////////////////////////////////////
  161. ///***************CQGIS****************///
  162. ///函数名称:GetObjPenColor
  163. ///返回类型:COLORREF
  164. ///入口参数:无
  165. ///出口参数:无
  166. ///思路说明:返回图元的画笔颜色值
  167. ///***************CQGIS****************///
  168. //////////////////////////////////////////
  169. COLORREF CQBaseObj::GetObjPenColor() const
  170. {
  171. return m_crPenColor;
  172. }
  173. //////////////////////////////////////////
  174. ///***************CQGIS****************///
  175. ///函数名称:
  176. ///返回类型:
  177. ///入口参数:
  178. ///出口参数:
  179. ///思路说明:
  180. ///***************CQGIS****************///
  181. //////////////////////////////////////////
  182. void CQBaseObj::SetObjBrushColor(COLORREF & crBrush)
  183. {
  184. m_crBrushColor = crBrush;
  185. }
  186. //////////////////////////////////////////
  187. ///***************CQGIS****************///
  188. ///函数名称:GetObjBrushColor
  189. ///返回类型:COLORREF
  190. ///入口参数:无
  191. ///出口参数:无
  192. ///思路说明:返回图元的画刷颜色值
  193. ///***************CQGIS****************///
  194. //////////////////////////////////////////
  195. COLORREF CQBaseObj::GetObjBrushColor() const
  196. {
  197. return m_crBrushColor;
  198. }
  199. //////////////////////////////////////////
  200. ///***************CQGIS****************///
  201. ///函数名称:SetObjSelected
  202. ///返回类型:无
  203. ///入口参数:BOOL & bSelect
  204. ///出口参数:无
  205. ///思路说明:设置图元的选择状态
  206. ///***************CQGIS****************///
  207. //////////////////////////////////////////
  208. void CQBaseObj::SetObjSelected(BOOL bSelect)
  209. {
  210. if(bSelect) m_bSelected = TRUE;
  211. else m_bSelected = FALSE;
  212. }
  213. //////////////////////////////////////////
  214. ///***************CQGIS****************///
  215. ///函数名称:GetObjSeleted
  216. ///返回类型:
  217. ///入口参数:
  218. ///出口参数:
  219. ///思路说明:
  220. ///***************CQGIS****************///
  221. //////////////////////////////////////////
  222. BOOL CQBaseObj::GetObjSeleted() const
  223. {
  224. return m_bSelected;
  225. }
  226. //////////////////////////////////////////
  227. ///***************CQGIS****************///
  228. ///函数名称:SetObjDeleted
  229. ///返回类型:
  230. ///入口参数:
  231. ///出口参数:
  232. ///思路说明:
  233. ///***************CQGIS****************///
  234. //////////////////////////////////////////
  235. void CQBaseObj::SetObjDeleted(BOOL bDeleted)
  236. {
  237. if(bDeleted) m_bDeleted = TRUE;
  238. else m_bDeleted = FALSE;
  239. }
  240. //////////////////////////////////////////
  241. ///***************CQGIS****************///
  242. ///函数名称:GetObjDeleted
  243. ///返回类型:
  244. ///入口参数:
  245. ///出口参数:
  246. ///思路说明:
  247. ///***************CQGIS****************///
  248. //////////////////////////////////////////
  249. BOOL CQBaseObj::GetObjDeleted() const
  250. {
  251. return m_bDeleted;
  252. }
  253. //////////////////////////////////////////
  254. ///***************CQGIS****************///
  255. ///函数名称:SetObjHided
  256. ///返回类型:
  257. ///入口参数:
  258. ///出口参数:
  259. ///思路说明:
  260. ///***************CQGIS****************///
  261. //////////////////////////////////////////
  262. void CQBaseObj::SetObjHided(BOOL bHided)
  263. {
  264. if(bHided) m_bHided = TRUE;
  265. else m_bHided = FALSE;
  266. }
  267. //////////////////////////////////////////
  268. ///***************CQGIS****************///
  269. ///函数名称:GetObjHided
  270. ///返回类型:
  271. ///入口参数:
  272. ///出口参数:
  273. ///思路说明:
  274. ///***************CQGIS****************///
  275. //////////////////////////////////////////
  276. BOOL CQBaseObj::GetObjHided() const
  277. {
  278. return m_bHided;
  279. }
  280. //////////////////////////////////////////
  281. ///***************CQGIS****************///
  282. ///函数名称:SetObjType
  283. ///返回类型:
  284. ///入口参数:
  285. ///出口参数:
  286. ///思路说明:
  287. ///***************CQGIS****************///
  288. //////////////////////////////////////////
  289. void CQBaseObj::SetObjType(short & nObjType)
  290. {
  291. m_nObjType = nObjType;
  292. }
  293. //////////////////////////////////////////
  294. ///***************CQGIS****************///
  295. ///函数名称:GetObjType
  296. ///返回类型:
  297. ///入口参数:
  298. ///出口参数:
  299. ///思路说明:
  300. ///***************CQGIS****************///
  301. //////////////////////////////////////////
  302. short CQBaseObj::GetObjType() const
  303. {
  304. return m_nObjType;
  305. }
  306. //////////////////////////////////////////
  307. ///***************CQGIS****************///
  308. ///函数名称:SetObjName
  309. ///返回类型:
  310. ///入口参数:
  311. ///出口参数:
  312. ///思路说明:
  313. ///***************CQGIS****************///
  314. //////////////////////////////////////////
  315. void CQBaseObj::SetObjName(CString & szName)
  316. {
  317. m_szObjName = szName;
  318. }
  319. //////////////////////////////////////////
  320. ///***************CQGIS****************///
  321. ///函数名称:GetObjName
  322. ///返回类型:
  323. ///入口参数:
  324. ///出口参数:
  325. ///思路说明:
  326. ///***************CQGIS****************///
  327. //////////////////////////////////////////
  328. CString CQBaseObj::GetObjName() const
  329. {
  330. return m_szObjName;
  331. }
  332. //////////////////////////////////////////
  333. ///***************CQGIS****************///
  334. ///函数名称:
  335. ///返回类型:
  336. ///入口参数:
  337. ///出口参数:
  338. ///思路说明:
  339. ///***************CQGIS****************///
  340. //////////////////////////////////////////
  341. void CQBaseObj::SetObjID(long & lObjID)
  342. {
  343. if(lObjID == m_lObjID)
  344. return;
  345. else
  346. m_lObjID = lObjID;
  347. }
  348. //////////////////////////////////////////
  349. ///***************CQGIS****************///
  350. ///函数名称:
  351. ///返回类型:
  352. ///入口参数:
  353. ///出口参数:
  354. ///思路说明:
  355. ///***************CQGIS****************///
  356. //////////////////////////////////////////
  357. long CQBaseObj::GetObjID() const
  358. {
  359. return m_lObjID;
  360. }
  361. //////////////////////////////////////////
  362. ///***************CQGIS****************///
  363. ///函数名称:
  364. ///返回类型:
  365. ///入口参数:
  366. ///出口参数:
  367. ///思路说明:
  368. ///***************CQGIS****************///
  369. //////////////////////////////////////////
  370. void CQBaseObj::SetObjLayerID(const long & lLayerID)
  371. {
  372. if(lLayerID == m_lLayerID)
  373. return;
  374. else
  375. m_lLayerID = lLayerID;
  376. }
  377. //////////////////////////////////////////
  378. ///***************CQGIS****************///
  379. ///函数名称:
  380. ///返回类型:
  381. ///入口参数:
  382. ///出口参数:
  383. ///思路说明:
  384. ///***************CQGIS****************///
  385. //////////////////////////////////////////
  386. long CQBaseObj::GetObjLayerID() const
  387. {
  388. return m_lLayerID;
  389. }
  390. //////////////////////////////////////////
  391. ///***************CQGIS****************///
  392. ///函数名称:
  393. ///返回类型:
  394. ///入口参数:
  395. ///出口参数:
  396. ///思路说明:
  397. ///***************CQGIS****************///
  398. //////////////////////////////////////////
  399. void CQBaseObj::SetObjMapID(const long & lMapID)
  400. {
  401. if(lMapID == m_lMapID)
  402. return;
  403. else
  404. m_lMapID = lMapID;
  405. }
  406. //////////////////////////////////////////
  407. ///***************CQGIS****************///
  408. ///函数名称:
  409. ///返回类型:
  410. ///入口参数:
  411. ///出口参数:
  412. ///思路说明:
  413. ///***************CQGIS****************///
  414. //////////////////////////////////////////
  415. long CQBaseObj::GetObjMapID() const
  416. {
  417. return m_lMapID;
  418. }
  419. //////////////////////////////////////////
  420. ///***************CQGIS****************///
  421. ///函数名称:
  422. ///返回类型:
  423. ///入口参数:
  424. ///出口参数:
  425. ///思路说明:
  426. ///***************CQGIS****************///
  427. //////////////////////////////////////////
  428. void CQBaseObj::SetObjLineWidth(double & fLineWidth)
  429. {
  430. if(fLineWidth<0)
  431. m_fLineWidth = 0;
  432. else
  433. m_fLineWidth = fLineWidth;
  434. }
  435. //////////////////////////////////////////
  436. ///***************CQGIS****************///
  437. ///函数名称:
  438. ///返回类型:
  439. ///入口参数:
  440. ///出口参数:
  441. ///思路说明:
  442. ///***************CQGIS****************///
  443. //////////////////////////////////////////
  444. double CQBaseObj::GetObjLineWidth() const
  445. {
  446. return m_fLineWidth;
  447. }
  448. //////////////////////////////////////////
  449. ///***************CQGIS****************///
  450. ///函数名称:
  451. ///返回类型:
  452. ///入口参数:
  453. ///出口参数:
  454. ///思路说明:
  455. ///***************CQGIS****************///
  456. //////////////////////////////////////////
  457. void CQBaseObj::Serialize(CArchive& ar)
  458. {
  459. if(ar.IsStoring()) //存
  460. {
  461. ar.Write(&m_lObjID,sizeof(long));
  462. ar.Write(&m_lLayerID,sizeof(long));
  463. ar.Write(&m_lMapID,sizeof(long));
  464. ar.Write(((const unsigned long *)(&m_crPenColor)),sizeof(long));
  465. ar.Write(((const unsigned long *)(&m_crBrushColor)),sizeof(long));
  466. ar.Write(&m_nObjType,sizeof(short));
  467. ar.Write(&m_fLineWidth,sizeof(double));
  468. ar.Write(&m_nLineType,sizeof(short));
  469. int i = m_szObjName.GetLength();
  470. ar.Write(&i,sizeof(int));
  471. ar.Write((const char *)m_szObjName,i);
  472. ar.Write(&m_bDeleted,sizeof(BOOL));
  473. ar.Write(&m_bHided,sizeof(BOOL));
  474. ar.Write(&m_bSelected,sizeof(BOOL));
  475. }
  476. else //读
  477. {
  478. long lObjID = 0;
  479. ar.Read(&lObjID,sizeof(long));
  480. if(lObjID == m_lObjID)
  481. m_lObjID = SetObjIDByRand();
  482. else
  483. m_lObjID = lObjID;
  484. ar.Read(&m_lLayerID,sizeof(long));
  485. ar.Read(&m_lMapID,sizeof(long));
  486. ar.Read(((unsigned long *)(&m_crPenColor)),sizeof(long));
  487. ar.Read(((unsigned long *)(&m_crBrushColor)),sizeof(long));
  488. ar.Read(&m_nObjType,sizeof(short));
  489. ar.Read(&m_fLineWidth,sizeof(double));
  490. ar.Read(&m_nLineType,sizeof(short));
  491. int i=0;
  492. ar.Read(&i,sizeof(int));
  493. char szName[255];
  494. ar.Read(szName,i);
  495. szName[i] = '';
  496. m_szObjName = szName;
  497. ar.Read(&m_bDeleted,sizeof(BOOL));
  498. ar.Read(&m_bHided,sizeof(BOOL));
  499. ar.Read(&m_bSelected,sizeof(BOOL));
  500. }
  501. }
  502. //////////////////////////////////////////
  503. ///***************CQGIS****************///
  504. ///函数名称:Rotate
  505. ///返回类型:无
  506. ///入口参数:CQPoint * pt,CQPoint & pt,double & fAngleDegree
  507. ///出口参数:CQPoint * pt
  508. ///思路说明:根据旋转矩阵,求出旋转后的点位坐标
  509. ///***************CQGIS****************///
  510. //////////////////////////////////////////
  511. void CQBaseObj::Rotate(CQPoint * ptR,CQPoint & ptO,double & fAngleDegree)
  512. {
  513. //这里的减法运算相当于将点ptR移到了坐标原点
  514. //这个旋转矩阵是相对于坐标原点的
  515. double fx = ptR->GetX() - ptO.GetX();
  516. double fy = ptR->GetY() - ptO.GetY();
  517. double fxx = fx*cos(fAngleDegree*PI/180) - fy*sin(fAngleDegree*PI/180);
  518. double fyy = fx*sin(fAngleDegree*PI/180) + fy*cos(fAngleDegree*PI/180);
  519. double fxR = ptO.GetX()+fxx;
  520. double fyR = ptO.GetY()+fyy; 
  521. ptR->SetPoint(fxR,fyR);
  522. }
  523. //////////////////////////////////////////
  524. ///***************CQGIS****************///
  525. ///函数名称:WriteToFile
  526. ///返回类型:无
  527. ///入口参数:CFile * pFile
  528. ///出口参数:无
  529. ///思路说明:存储文件
  530. ///***************CQGIS****************///
  531. //////////////////////////////////////////
  532. void CQBaseObj::WriteToFile(CFile * pFile)
  533. {
  534. pFile->Write(&m_lObjID,sizeof(long));
  535. pFile->Write(&m_lLayerID,sizeof(long));
  536. pFile->Write(&m_lMapID,sizeof(long));
  537. pFile->Write(&m_nObjType,sizeof(short));
  538. int i = m_szObjName.GetLength();
  539. pFile->Write(&i,sizeof(int));
  540. pFile->Write((const char *)m_szObjName,i);
  541. float fWidth = (float)m_fLineWidth;
  542. pFile->Write(&fWidth,sizeof(float));
  543. pFile->Write(&m_nLineType,sizeof(short));
  544. pFile->Write((const unsigned long *)(&m_crPenColor),sizeof(long));
  545. pFile->Write((const unsigned long *)(&m_crBrushColor),sizeof(long));
  546. pFile->Write(&m_bDeleted,sizeof(BOOL));
  547. pFile->Write(&m_bHided,sizeof(BOOL));
  548. pFile->Write(&m_bSelected,sizeof(BOOL));
  549. }
  550. //////////////////////////////////////////
  551. ///***************CQGIS****************///
  552. ///函数名称:ReadFromFile
  553. ///返回类型:无
  554. ///入口参数:CFile * pFile
  555. ///出口参数:无
  556. ///思路说明:从磁盘中读取文件 
  557. ///***************CQGIS****************///
  558. //////////////////////////////////////////
  559. void CQBaseObj::ReadFromFile(CFile * pFile)
  560. {
  561. pFile->Read(&m_lObjID,sizeof(long));
  562. pFile->Read(&m_lLayerID,sizeof(long));
  563. pFile->Read(&m_lMapID,sizeof(long));
  564. pFile->Read(&m_nObjType,sizeof(short));
  565. char szName[255];
  566. int i = 0;
  567. pFile->Read(&i,sizeof(int));
  568. pFile->Read(szName,i);
  569. szName[i] = '';
  570. m_szObjName = szName;
  571. float fWidth = 0;
  572. pFile->Read(&fWidth,sizeof(float));
  573. m_fLineWidth = fWidth;
  574. pFile->Read(&m_nLineType,sizeof(short));
  575. pFile->Read((unsigned long *)(&m_crPenColor),sizeof(long));
  576. pFile->Read((unsigned long *)(&m_crBrushColor),sizeof(long));
  577. pFile->Read(&m_bDeleted,sizeof(BOOL));
  578. pFile->Read(&m_bHided,sizeof(BOOL));
  579. pFile->Read(&m_bSelected,sizeof(BOOL));
  580. }
  581. inline short CQBaseObj::GetObjLineType() const
  582. {
  583. return m_nLineType;
  584. }
  585. CString CQBaseObj::VarToStr()
  586. {
  587. CString szVar = _T("");
  588. szVar.Format("图元ID:%ld,图元所在图层ID:%ld,图元所在图幅ID:%ld,图元类型:%d,图元名称:%s,图元线宽:%f,图元线型:%d,图元线颜色:%ld,图元填充色:%ld,图元的删除:%d,图元的隐藏状态:%d,图元的选中状态",m_lObjID,m_lLayerID,m_lMapID,m_nObjType,(const char *)m_szObjName,(float)m_fLineWidth,m_nLineType,(unsigned long)m_crPenColor,(unsigned long)m_crBrushColor,(short)m_bDeleted,(short)m_bHided,(short)m_bSelected);
  589. return szVar;
  590. }
  591. void CQBaseObj::SetobjLineType(short & nLineType)
  592. {
  593. m_nLineType = nLineType;
  594. }