ModelCurve2AvB.cpp
上传用户:lj3531212
上传日期:2007-06-18
资源大小:346k
文件大小:18k
源码类别:

绘图程序

开发平台:

Visual C++

  1. // ModelCurve2AvB.cpp: implementation of the CModelCurve2AvB class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "GraphSoft.h"
  6. #include "ModelCurve2AvB.h"
  7. #include "math.h"
  8. #include "GlobalFunction.h"
  9. #ifdef _DEBUG
  10. #undef THIS_FILE
  11. static char THIS_FILE[]=__FILE__;
  12. #define new DEBUG_NEW
  13. #endif
  14. ///////////////////////////////////
  15. IMPLEMENT_SERIAL( CModelCurve2AvB, CShape, 0 )
  16. //////////////////////////////////////////////////////////////////////
  17. // Construction/Destruction
  18. //////////////////////////////////////////////////////////////////////
  19. ///////////////////////////////////////////////////////////////////////
  20. CModelCurve2AvB::CModelCurve2AvB():CShape()
  21. {
  22. }
  23. CModelCurve2AvB::CModelCurve2AvB(COLORREF color,int penWidth,float angle):CShape(color,penWidth,angle)
  24. {
  25. }
  26. CModelCurve2AvB::CModelCurve2AvB(CModelCurve2AvB * const pModelCurve2AvB):CShape(pModelCurve2AvB)
  27. {
  28. int i=pModelCurve2AvB->m_flArrayxTemp.GetSize();
  29. int j=0;
  30. float fx,fy;
  31. m_flArrayxTemp.RemoveAll();
  32. m_flArrayyTemp.RemoveAll();
  33. while(j++<i){
  34. fx=pModelCurve2AvB->m_flArrayxTemp.GetAt(j-1);
  35. fy=pModelCurve2AvB->m_flArrayyTemp.GetAt(j-1);
  36. m_flArrayxTemp.Add(fx);
  37. m_flArrayyTemp.Add(fy);
  38. }
  39. i=pModelCurve2AvB->m_flArrayx.GetSize();
  40. j=0;
  41. m_flArrayx.RemoveAll();
  42. m_flArrayy.RemoveAll();
  43. while(j++<i){
  44. fx=pModelCurve2AvB->m_flArrayx.GetAt(j-1);
  45. fy=pModelCurve2AvB->m_flArrayy.GetAt(j-1);
  46. m_flArrayx.Add(fx);
  47. m_flArrayy.Add(fy);
  48. }
  49. }
  50. CModelCurve2AvB::~CModelCurve2AvB()
  51. {
  52. }
  53. ////////////////////////////////////////////////////////////////////////// 
  54. void CModelCurve2AvB::Serialize( CArchive& ar)
  55. {
  56. CShape::Serialize( ar ) ;
  57. int i=0,j;
  58. if ( ar.IsLoading() ){
  59. float fx,fy;
  60. ar>>i;
  61. j=0;
  62. while(j++ < i){
  63. ar>>fx;
  64. ar>>fy;
  65. m_flArrayx.Add(fx);
  66. m_flArrayy.Add(fy);
  67. //temp
  68. m_flArrayxTemp.Add(fx);
  69. m_flArrayyTemp.Add(fy);
  70. }  
  71. } else {
  72. RefreshData(m_bModified);
  73. i=m_flArrayx.GetSize();
  74. j=0;
  75. ar<<i;
  76. while(j++ < i){
  77. ar<<((float)m_flArrayx.GetAt(j-1));
  78. ar<<((float)m_flArrayy.GetAt(j-1));
  79. }  
  80. }
  81. return ;                  
  82. }
  83. ////////////////////////////////////////////////////////////////////////
  84. void CModelCurve2AvB::Draw(CDC *pDC,COLORREF color,COLORREF fillColor,int penWidth)
  85. {
  86. CPen pen,*poldPen;
  87. pen.CreatePen(PS_SOLID,penWidth, color);  
  88. poldPen=pDC->SelectObject(&pen);      
  89. ErJunYunB(pDC,m_flArrayxTemp,m_flArrayyTemp,color,penWidth);
  90. if(GetDrawPointsFlag()==1){
  91. DrawPoints(pDC,color);
  92. }
  93. pDC->SelectObject(poldPen);  
  94. }
  95. ///////////////////////////////////////////
  96. void CModelCurve2AvB::DrawPointsCutTo(CDC *pDC,COLORREF color,CFlRect m_rectFrom,CRect m_rectTo)
  97. {
  98. // if(!IsInRect(m_rectFrom)){
  99. // return;
  100. // }
  101. //得到移动扩缩后的关键数据
  102. CArray<float,float> flArrayx;
  103. CArray<float,float> flArrayy;;
  104. //移动
  105. int i=m_flArrayxTemp.GetSize(),j;
  106. float stepx=m_rectTo.left-m_rectFrom.left;
  107. float stepy=m_rectTo.top-m_rectFrom.top;
  108. for(j=0;j<i;j++){
  109. flArrayx.Add(m_flArrayxTemp.GetAt(j)+stepx);
  110. flArrayy.Add(m_flArrayyTemp.GetAt(j)+stepy);
  111. }
  112. //扩缩
  113. float cx,cy,flScale;
  114. cx=m_rectTo.left;
  115. cy=m_rectTo.top;  
  116. if(m_rectFrom.Width()<0.01){
  117. m_rectFrom.right=m_rectFrom.left +1;
  118. }
  119. if(m_rectFrom.Height()<0.01){
  120. m_rectFrom.bottom=m_rectFrom.top +1;
  121. }
  122. flScale=(float)m_rectTo.Width()/m_rectFrom.Width();
  123. //flScale=min((float)m_rectTo.Width()/m_rectFrom.Width(),(float)m_rectTo.Height()/m_rectFrom.Height());
  124. i=flArrayx.GetSize();
  125. for(j=0;j<i;j++){
  126. flArrayx.SetAt(j,(flArrayx.GetAt(j)-cx)*flScale+cx);
  127. flArrayy.SetAt(j,(flArrayy.GetAt(j)-cy)*flScale+cy);
  128. }
  129. CPen pen,*poldPen;
  130.     pen.CreatePen(PS_SOLID,1, color);
  131. poldPen=pDC->SelectObject(&pen);
  132. i=flArrayx.GetSize();
  133. int nSX,nSY;
  134. nSX=flArrayx.GetAt(0);
  135. nSY=flArrayy.GetAt(0);
  136. for(j=0;j<i;j++){
  137. //画点
  138. pDC->MoveTo(flArrayx.GetAt(j),flArrayy.GetAt(j)-1-GetPenWidth());
  139. pDC->LineTo(flArrayx.GetAt(j),flArrayy.GetAt(j)+2+GetPenWidth());
  140. pDC->MoveTo(flArrayx.GetAt(j)-1-GetPenWidth(),flArrayy.GetAt(j));
  141. pDC->LineTo(flArrayx.GetAt(j)+2+GetPenWidth(),flArrayy.GetAt(j));
  142.         
  143. //画线
  144. pen.DeleteObject();
  145. CShape::DotLine(pDC,nSX,nSY,flArrayx.GetAt(j),flArrayy.GetAt(j),color);
  146. nSX=flArrayx.GetAt(j);
  147. nSY=flArrayy.GetAt(j);
  148. }
  149. pDC->SelectObject(poldPen);      
  150. return;
  151. }
  152. void CModelCurve2AvB::DrawPoints(CDC *pDC,COLORREF color)
  153. {
  154. CPen pen,*poldPen;
  155.     pen.CreatePen(PS_SOLID,1, color);
  156. poldPen=pDC->SelectObject(&pen);
  157. int i=m_flArrayxTemp.GetSize();
  158. int nSX,nSY;
  159. nSX=m_flArrayxTemp.GetAt(0);
  160. nSY=m_flArrayyTemp.GetAt(0);
  161. for(int j=0;j<i;j++){
  162. //画点
  163. pDC->MoveTo(m_flArrayxTemp.GetAt(j),m_flArrayyTemp.GetAt(j)-1-GetPenWidth());
  164. pDC->LineTo(m_flArrayxTemp.GetAt(j),m_flArrayyTemp.GetAt(j)+2+GetPenWidth());
  165. pDC->MoveTo(m_flArrayxTemp.GetAt(j)-1-GetPenWidth(),m_flArrayyTemp.GetAt(j));
  166. pDC->LineTo(m_flArrayxTemp.GetAt(j)+2+GetPenWidth(),m_flArrayyTemp.GetAt(j));
  167.         
  168. //画线
  169. pen.DeleteObject();
  170. // pen.CreatePen(PS_DOT,1,color);
  171. // pDC->SelectObject(&pen);
  172. //pDC->MoveTo(nSX,nSY);
  173. //pDC->LineTo(m_flArrayxTemp.GetAt(j),m_flArrayyTemp.GetAt(j));
  174. CShape::DotLine(pDC,nSX,nSY,m_flArrayxTemp.GetAt(j),m_flArrayyTemp.GetAt(j),color);
  175. nSX=m_flArrayxTemp.GetAt(j);
  176. nSY=m_flArrayyTemp.GetAt(j);
  177. }
  178. pDC->SelectObject(poldPen);      
  179. return;
  180. }
  181. /////////////////////////
  182. void CModelCurve2AvB::DrawCutToRect(CDC *pDC,COLORREF color,COLORREF fillColor,int penWidth,CFlRect m_rectFrom,CRect m_rectTo)
  183. {
  184. // if(!IsInRect(m_rectFrom)){
  185. // return;
  186. // }
  187. //得到移动扩缩后的关键数据
  188. CArray<float,float> flArrayx;
  189. CArray<float,float> flArrayy;;
  190. //移动
  191. int i=m_flArrayxTemp.GetSize(),j;
  192. float stepx=m_rectTo.left-m_rectFrom.left;
  193. float stepy=m_rectTo.top-m_rectFrom.top;
  194. for(j=0;j<i;j++){
  195. flArrayx.Add(m_flArrayxTemp.GetAt(j)+stepx);
  196. flArrayy.Add(m_flArrayyTemp.GetAt(j)+stepy);
  197. }
  198. //扩缩
  199. float cx,cy,flScale;
  200. cx=m_rectTo.left;
  201. cy=m_rectTo.top;  
  202. if(m_rectFrom.Width()<0.01){
  203. m_rectFrom.right=m_rectFrom.left +1;
  204. }
  205. if(m_rectFrom.Height()<0.01){
  206. m_rectFrom.bottom=m_rectFrom.top +1;
  207. }
  208. flScale=(float)m_rectTo.Width()/m_rectFrom.Width();
  209. //flScale=min((float)m_rectTo.Width()/m_rectFrom.Width(),(float)m_rectTo.Height()/m_rectFrom.Height());
  210. i=flArrayx.GetSize();
  211. for(j=0;j<i;j++){
  212. flArrayx.SetAt(j,(flArrayx.GetAt(j)-cx)*flScale+cx);
  213. flArrayy.SetAt(j,(flArrayy.GetAt(j)-cy)*flScale+cy);
  214. }
  215. CPen pen,*poldPen;
  216. pen.CreatePen(PS_SOLID,penWidth, color);  
  217. poldPen=pDC->SelectObject(&pen);  
  218. ErJunYunB(pDC,flArrayx,flArrayy,color,penWidth);
  219. if(GetDrawPointsFlag()==1){
  220. DrawPointsCutTo(pDC,color,m_rectFrom,m_rectTo);
  221. }
  222. pDC->SelectObject(poldPen);
  223. }
  224. int CModelCurve2AvB::ErJunYunB(CDC *pDC,CArray<float,float>& flArrayx,CArray<float,float>& flArrayy,COLORREF color,int penWidth)
  225. {
  226. if(flArrayx.GetSize()!=flArrayy.GetSize())
  227. return 0;
  228. CArray<float,float>  x,y;
  229. float dt,m,x0,y0,x1,y1,t;  
  230. int i;  
  231. int n=flArrayx.GetSize();
  232. //TRACE("i=%dn",n);
  233. if(n<2) return 0;  
  234. for(i=0;i<n;i++)
  235. {
  236. x.Add(flArrayx.GetAt(i));
  237. y.Add(flArrayy.GetAt(i));
  238. }
  239. for(i=0;i<n-2;i++)
  240. {
  241. //m=abs(x.GetAt(i+1)-x.GetAt(i));
  242. //if(m>20){
  243. // dt=0.05;
  244. //}else{
  245. //dt=1.0/m;
  246. //}
  247. dt=0.1;//防止m=0;
  248. x0=(x.GetAt(i)+x.GetAt(i+1))/2;
  249. y0=(y.GetAt(i)+y.GetAt(i+1))/2;
  250. for(t=0;t<=1&&t>=-1;t=t+dt)
  251. {
  252. x1=((t*t-2*t+1)*x.GetAt(i)+(2*t-2*t*t+1)*x.GetAt(i+1)+t*t*x.GetAt(i+2))/2;
  253. y1=((t*t-2*t+1)*y.GetAt(i)+(2*t-2*t*t+1)*y.GetAt(i+1)+t*t*y.GetAt(i+2))/2;
  254. pDC->MoveTo(x0,y0);
  255. pDC->LineTo(x1,y1);
  256. x0=x1;
  257. y0=y1;
  258. // TRACE("x1=%f,y1=%fn",x1,y1);
  259. }
  260. pDC->MoveTo(x0,y0);
  261. pDC->LineTo((x.GetAt(i+1)+x.GetAt(i+2))/2,(y.GetAt(i+1)+y.GetAt(i+2))/2);
  262. // CPen pen,*poldPen;
  263. // LOGBRUSH logbr;
  264. // logbr.lbStyle=BS_SOLID;
  265. // logbr.lbColor=RGB(255,255,255);
  266. // pen.CreatePen(PS_GEOMETRIC,penWidth, &logbr);  
  267. // poldPen=pDC->SelectObject(&pen);      
  268. //
  269. // pDC->MoveTo(x.GetAt(i),y.GetAt(i));
  270. // pDC->LineTo(x.GetAt(i+1),y.GetAt(i+1));
  271. //
  272. // logbr.lbStyle=BS_SOLID;
  273. // logbr.lbColor=RGB(0,0,0);
  274. // pen.DeleteObject();
  275. // pen.CreatePen(PS_GEOMETRIC,penWidth, &logbr);  
  276. // pDC->SelectObject(&pen);      
  277. //
  278. pDC->MoveTo(x0,y0);
  279. pDC->LineTo((x.GetAt(i+1)+x.GetAt(i+2))/2,(y.GetAt(i+1)+y.GetAt(i+2))/2);
  280. //
  281. // pDC->SelectObject(poldPen);  
  282. }
  283. return 1;
  284. }
  285. ////////////////////////////////////////////////////////////////////////////
  286. ////////////////////////////////////////////////////////////////////////////
  287. void CModelCurve2AvB::RefreshData(bool bRefresh)
  288. {
  289. if(bRefresh){
  290. int i=m_flArrayxTemp.GetSize();
  291. int j=0;
  292. float fx,fy;
  293. m_flArrayx.RemoveAll();
  294. m_flArrayy.RemoveAll();
  295. while(j++<i){
  296. fx=m_flArrayxTemp.GetAt(j-1);
  297. fy=m_flArrayyTemp.GetAt(j-1);
  298. m_flArrayx.Add(fx);
  299. m_flArrayy.Add(fy);
  300. }
  301. m_bModified=FALSE;
  302. m_ptMagnifyCenterTemp=CPoint(0,0);
  303. m_flScaleTemp=1;
  304. m_ptRotateCenterTemp=CPoint(0,0);
  305. m_flAngleTemp=0;
  306. }
  307. }
  308. void CModelCurve2AvB::CreatGraph(CArray<float,float>& flArrayX,CArray<float,float>& flArrayY,int nPenWidth,COLORREF color,COLORREF fillColor,SHAPE_FILLSTYLE nStyle)
  309. {
  310. //if(ptArray.GetSize()<2){
  311. // return;
  312. //}
  313. CShape::CreatGraph(flArrayX,flArrayY,nPenWidth,color,fillColor,nStyle);
  314. int i=flArrayX.GetSize();
  315. int j=0;
  316. float flx,fly;
  317. m_flArrayx.RemoveAll();
  318. m_flArrayy.RemoveAll();
  319. m_flArrayxTemp.RemoveAll();
  320. m_flArrayyTemp.RemoveAll();
  321. while(j++<i){
  322. flx=flArrayX.GetAt(j-1);
  323. fly=flArrayY.GetAt(j-1);
  324. m_flArrayx.Add(flx);
  325. m_flArrayy.Add(fly);
  326. //temp
  327. m_flArrayxTemp.Add(flx);
  328. m_flArrayyTemp.Add(fly);
  329. }
  330. }
  331. void CModelCurve2AvB::CreatGraph(CArray<CPoint,CPoint>& ptArray,int nPenWidth,COLORREF color,COLORREF fillColor,SHAPE_FILLSTYLE nStyle)
  332. {
  333. //if(ptArray.GetSize()<2){
  334. // return;
  335. //}
  336. CShape::CreatGraph(ptArray,nPenWidth,color,fillColor,nStyle);
  337. int i=ptArray.GetSize();
  338. int j=0;
  339. CPoint pt;
  340. m_flArrayx.RemoveAll();
  341. m_flArrayy.RemoveAll();
  342. m_flArrayxTemp.RemoveAll();
  343. m_flArrayyTemp.RemoveAll();
  344. while(j++<i){
  345. pt=ptArray.GetAt(j-1);
  346. m_flArrayx.Add(pt.x);
  347. m_flArrayy.Add(pt.y);
  348. //temp
  349. m_flArrayxTemp.Add(pt.x);
  350. m_flArrayyTemp.Add(pt.y);
  351. }
  352. }
  353. void CModelCurve2AvB::SetPtData(CArray<float,float>& flArrayX,CArray<float,float>& flArrayY)
  354. {
  355. m_flArrayx.Copy(flArrayX);
  356. m_flArrayxTemp.Copy(flArrayX);
  357. m_flArrayy.Copy(flArrayY);
  358. m_flArrayyTemp.Copy(flArrayY);
  359. }
  360. void CModelCurve2AvB::GetPtData(CArray<float,float>& flArrayX,CArray<float,float>& flArrayY)
  361. {
  362. flArrayX.Copy(m_flArrayxTemp);
  363. flArrayY.Copy(m_flArrayyTemp);
  364. }
  365. CShape* CModelCurve2AvB::GetCopy()
  366. {
  367. CShape* pGraph=new CModelCurve2AvB(this);
  368. return pGraph;  
  369. }
  370. ////////////////////////////////////////////////////////////////////////////
  371. ////////////////////////////////////////////////////////////////////////////
  372. void CModelCurve2AvB::Move(CDC *pDC,float stepx,float stepy)
  373. {
  374. RefreshData(m_bModified);
  375. // CShape::Draw(pDC,RGB(255,255,255),RGB(255,255,255));
  376. int i=m_flArrayxTemp.GetSize();
  377. int j=0;
  378. float fx,fy;
  379. while(j++<i){
  380. fx=m_flArrayxTemp.GetAt(j-1);
  381. fy=m_flArrayyTemp.GetAt(j-1);
  382. m_flArrayx.SetAt(j-1,fx+stepx);
  383. m_flArrayy.SetAt(j-1,fy+stepy);
  384. m_flArrayxTemp.SetAt(j-1,fx+stepx);
  385. m_flArrayyTemp.SetAt(j-1,fy+stepy);
  386. }
  387. }
  388. void CModelCurve2AvB::PartMove(CDC *pDC,float PrevX,float PrevY,float CurX,float CurY)
  389. {
  390. RefreshData(m_bModified);
  391.     if(m_nSelectPtNum>-1){
  392. // CShape::Draw(pDC,RGB(255,255,255),RGB(255,255,255));
  393. m_flArrayxTemp.SetAt(m_nSelectPtNum,CurX);
  394. m_flArrayyTemp.SetAt(m_nSelectPtNum,CurY);
  395. m_flArrayx.SetAt(m_nSelectPtNum,CurX);
  396. m_flArrayy.SetAt(m_nSelectPtNum,CurY);
  397. //CShape::Draw(pDC);
  398.     }
  399. }
  400. void CModelCurve2AvB::Rotate(CDC *pDC,float CX,float CY,float flAngle)
  401. {
  402. if(m_flScaleTemp!=1){
  403. RefreshData(TRUE);
  404. }
  405. // CShape::Draw(pDC,RGB(255,255,255),RGB(255,255,255));
  406. m_ptRotateCenterTemp=CPoint(CX,CY);
  407. m_flAngleTemp=flAngle;
  408. m_bModified=TRUE;
  409. int i=m_flArrayx.GetSize();
  410. int j=0;
  411. float fx,fy,fxTemp,fyTemp;
  412. while(j++<i){
  413. fx=m_flArrayx.GetAt(j-1);
  414. fy=m_flArrayy.GetAt(j-1);
  415. fxTemp=((fx-CX)*cos(flAngle)-(fy-CY)*sin(flAngle))+CX;
  416. fyTemp=((fy-CY)*cos(flAngle)+(fx-CX)*sin(flAngle))+CY;
  417. m_flArrayxTemp.SetAt(j-1,fxTemp);
  418. m_flArrayyTemp.SetAt(j-1,fyTemp);
  419. }
  420. }
  421. void CModelCurve2AvB::Magnify(CDC *pDC,float CX,float CY,float flScale)
  422. {
  423. if(m_flAngleTemp!=0){
  424. RefreshData(TRUE);
  425. }
  426. // CShape::Draw(pDC,RGB(255,255,255),RGB(255,255,255));  
  427. m_ptMagnifyCenterTemp=CPoint(CX,CY);
  428. m_flScaleTemp=flScale;
  429. m_bModified=TRUE;
  430. int i=m_flArrayx.GetSize();
  431. int j=0;
  432. float fx,fy;
  433. while(j++<i){
  434. fx=m_flArrayx.GetAt(j-1);
  435. fy=m_flArrayy.GetAt(j-1);
  436. fx=(fx-CX)*flScale+CX;
  437. fy=(fy-CY)*flScale+CY;
  438. m_flArrayxTemp.SetAt(j-1,fx);
  439. m_flArrayyTemp.SetAt(j-1,fy);
  440. }
  441. }
  442. ///////////////////
  443. void CModelCurve2AvB::LeftToRight(CDC* pDC,CRect rect)
  444. {
  445. RefreshData(m_bModified);
  446. // CShape::Draw(pDC,RGB(255,255,255),RGB(255,255,255));
  447. int i=m_flArrayx.GetSize();
  448. for(int j=0;j<i;j++){
  449. m_flArrayx.SetAt(j,rect.left/1000.0+rect.right/1000.0-m_flArrayx.GetAt(j));
  450. m_flArrayxTemp.SetAt(j,rect.left/1000.0+rect.right/1000.0-m_flArrayxTemp.GetAt(j));
  451. }
  452. // CShape::Draw(pDC);
  453. }
  454. void CModelCurve2AvB::TopToBottom(CDC* pDC,CRect rect)
  455. {
  456. RefreshData(m_bModified);
  457. // CShape::Draw(pDC,RGB(255,255,255),RGB(255,255,255));
  458. int i=m_flArrayx.GetSize();
  459. for(int j=0;j<i;j++){
  460. m_flArrayy.SetAt(j,rect.top/1000.0+rect.bottom/1000.0-m_flArrayy.GetAt(j));
  461. m_flArrayyTemp.SetAt(j,rect.top/1000.0+rect.bottom/1000.0-m_flArrayyTemp.GetAt(j));
  462. }
  463. // CShape::Draw(pDC);
  464. }
  465. ////////////////////////////////////////////////////////////////////////////
  466. ////////////////////////////////////////////////////////////////////////////
  467. int CModelCurve2AvB::IsInRect(CRect rect)
  468. {
  469. int nRltVal=0,nTemp;
  470. int i=m_flArrayx.GetSize();
  471. int j=0;
  472. float fx1,fy1,fx2,fy2;
  473. while(++j < i){
  474. fx1=m_flArrayxTemp.GetAt(j-1);
  475. fy1=m_flArrayyTemp.GetAt(j-1);
  476. fx2=m_flArrayxTemp.GetAt(j);
  477. fy2=m_flArrayyTemp.GetAt(j);
  478. nTemp=GetLineStateToRect(fx1,fy1,fx2,fy2,rect);
  479.    nRltVal=nRltVal | nTemp;
  480. }
  481. if(nRltVal==3){
  482. nRltVal=1;
  483. }
  484. return nRltVal;
  485. }
  486. CRect CModelCurve2AvB::GetBoundaryRect()
  487. {
  488. if(m_flArrayxTemp.GetSize()==0){
  489. return CRect(0,0,0,0);
  490. }
  491. CRect rect(1000*m_flArrayxTemp.GetAt(0),1000*m_flArrayyTemp.GetAt(0),1000*m_flArrayxTemp.GetAt(0),1000*m_flArrayyTemp.GetAt(0));
  492. int i=m_flArrayxTemp.GetSize();
  493. int j=0;
  494. float fx,fy;
  495. while(j++<i){
  496. fx=1000*m_flArrayxTemp.GetAt(j-1);
  497. fy=1000*m_flArrayyTemp.GetAt(j-1);
  498. if(fx<rect.left){
  499. rect.left=fx;
  500. }else if(fx>rect.right){
  501. rect.right=fx;
  502. }
  503. if(fy<rect.top){
  504. rect.top=fy;
  505. }else if(fy>rect.bottom){
  506. rect.bottom=fy;
  507. }
  508. }
  509. return rect;
  510. }
  511. CPoint CModelCurve2AvB::GetCenterPoint()
  512. {
  513. CRect rect=GetBoundaryRect();
  514. return rect.CenterPoint();
  515. }
  516. int CModelCurve2AvB::IsPointinRegion(POINT point)
  517. {
  518. int nRltVal=0;
  519. int i=m_flArrayx.GetSize();
  520. int j=0;
  521. CPoint pt1,pt2;
  522. CRect rect;
  523. while(++j < i){
  524. pt1.x=m_flArrayxTemp.GetAt(j-1);
  525. pt1.y=m_flArrayyTemp.GetAt(j-1);
  526. pt2.x=m_flArrayxTemp.GetAt(j);
  527. pt2.y=m_flArrayyTemp.GetAt(j);
  528. rect=GetRectFromPoint(pt1,pt2);
  529. if(rect.PtInRect(point)){
  530. nRltVal|=1;
  531. break;
  532. }
  533. }
  534. return nRltVal;
  535. }
  536. //////
  537. int CModelCurve2AvB::GetPtState(float flx,float fly,float flRate)
  538. {
  539. int nRltVal=0;
  540. int i=m_flArrayx.GetSize();
  541. int j=0;
  542. CRect rect;
  543. float tmpx,tmpy;
  544. while(j++<i){
  545. tmpx=m_flArrayxTemp.GetAt(j-1);
  546. tmpy=m_flArrayyTemp.GetAt(j-1);
  547. if(IsPtInRect(tmpx-3*flRate,tmpy-3*flRate,tmpx+3*flRate,tmpy+3*flRate,flx,fly)){
  548. nRltVal|=1;
  549. m_nSelectPtNum=j-1;
  550. m_nSelectLineNum=-1;
  551. break;
  552. }
  553. }
  554. if(nRltVal==0){
  555.         m_nSelectPtNum=-1;
  556. m_nSelectLineNum=-1;
  557. }
  558. return nRltVal;
  559. }
  560. //////////////////////////////////////////////////////////////////////
  561. // MODULE   :ExPort
  562. // ABSTRACT :Export to a txt file
  563. // FUNCTION :File->Export...
  564. // NOTE     :
  565. // RETURN   :
  566. // ARGUMENTS:
  567. //              I/O           TYPE      NAME       EXPLANATION
  568. //               O            FILE*    outStream    Out put File
  569. // CREATE   :  FNST)handwolf  2004-4-14
  570. // UPDATE   :  
  571. //          : 
  572. //////////////////////////////////////////////////////////////////////
  573. void CModelCurve2AvB::ExPort(FILE* outStream)//增加导出txt功能时用
  574. {
  575. fprintf(outStream, " CModelCurve2AvB n");
  576. CShape::ExPort(outStream);
  577. int n=m_flArrayxTemp.GetSize();
  578. int i=0;
  579. fprintf(outStream, "     %d   ",n);
  580. while(i++ < n){
  581. fprintf( outStream, " %f %f",(float)m_flArrayxTemp.GetAt(i-1),(float)m_flArrayyTemp.GetAt(i-1));
  582. }  
  583. fprintf( outStream, "n");
  584. }
  585. //////////////////////////////////////////////////////////////////////
  586. // MODULE   :ImPort
  587. // ABSTRACT :ImPort from a txt file
  588. // FUNCTION :File->ImPort...
  589. // NOTE     :
  590. // RETURN   :
  591. // ARGUMENTS:
  592. //              I/O           TYPE      NAME       EXPLANATION
  593. //               I            FILE*    inStream    in put File
  594. // CREATE   :  FNST)handwolf  2004-4-14
  595. // UPDATE   :  
  596. //          : 
  597. //////////////////////////////////////////////////////////////////////
  598. void CModelCurve2AvB::ImPort(FILE* inStream)
  599. {
  600. CShape::ImPort(inStream);
  601. float fx,fy;
  602. int n;
  603. fscanf(inStream, "%d",&n);
  604. int i=0;
  605. while(i++ < n){
  606. fscanf(inStream, "%f%f",&fx,&fy);
  607. m_flArrayx.Add(fx);
  608. m_flArrayy.Add(fy);
  609. //temp
  610. m_flArrayxTemp.Add(fx);
  611. m_flArrayyTemp.Add(fy);
  612. }
  613. }
  614. CString CModelCurve2AvB::GetNameString()
  615. {
  616. CString str;
  617. str.LoadString(IDS_MODELCURVE2AVB);
  618. return str;
  619. }
  620. //////////////////////////////////////////////////////////////////////
  621. //End of File////////////////
  622. ////////////////////////////////////////////////////////////////////////////
  623. ///////////////////////////////////////////////