#include "stdafx.h" #include "xyplot.h" /* class CXYPlot { public: // data members double **M; double **lbls; int NumRows; int NumCols; // member functions CXYPlot(); ~CXYPlot(); BOOL Create(int rows, int cols); BOOL MakePlot(); BOOL ToDisk(); private: } */ CXYPlot::CXYPlot() { NumRows=0; NumCols=0; M=NULL; lbls=NULL; } CXYPlot::~CXYPlot() { if (NumRows==0) return; int i; for(i=0;iHiY) HiY=M[i][j]; if (M[i][j]SelectObject( &PlotPen ); pDC->MoveTo(0,0); pDC->LineTo(588,0); pDC->LineTo(588,343); pDC->LineTo(0,343); pDC->LineTo(0,0); pDC->MoveTo((int) OffsetX,(int) OffsetY); pDC->LineTo((int) OffsetX,(int) (OffsetY+Height)); pDC->LineTo((int) (OffsetX+Width),(int) (OffsetY+Height)); pDC->SelectObject(pOldPen); PlotPen.DeleteObject(); CFont fntArial,*pOldFont; fntArial.CreateFont(12,0,0,0,0,0,0,0,0,0,0,0,0,"Tahoma"); pOldFont=pDC->SelectObject(&fntArial); // draw those suckers... for(i=1;iSelectObject( &PlotPen ); pDC->MoveTo((int)M[0][0],(int)M[0][i]); for(j=0;jLineTo((int)M[j][0],(int)M[j][i]); pDC->SetTextColor(PenCols[i-1]); pDC->TextOut((int)(OffsetX+Width+10.),((int) OffsetY)+14*i,lbls[i],(int) strlen(lbls[i])); pDC->SelectObject(pOldPen); PlotPen.DeleteObject(); } pDC->SetTextColor(0x00000000); pDC->TextOut(200,(int) (OffsetY+Height+30),lbls[0],(int) strlen(lbls[0])); k=(int)((HiY-LoY)/dy + 0.5); if(k<4){ dy/=2.; k=(int)((HiY-LoY)/dy + 0.5); } if(k==0) k++; pDC->SetTextAlign(TA_RIGHT); for(i=0;i<=k;i++){ pDC->MoveTo((int) OffsetX,(i*(int)Height)/k +(int) OffsetY); pDC->LineTo((int) OffsetX-5,(i*(int) Height)/k+ (int) OffsetY); sprintf(s,"%.4g",HiY-((double) i)*dy); pDC->TextOut(((int) OffsetX)-10,(i*(int)Height)/k +(int) OffsetY-6,s,(int) strlen(s)); } k=(int)((HiX-LoX)/dx ); if(k<4){ dx/=2.; k=(int)((HiX-LoX)/dx ); } d=( ((double) Width) * dx/ (HiX-LoX)); pDC->SetTextAlign(TA_CENTER); for(i=0;i<=k;i++){ pDC->MoveTo((int) (((double) i)*d + OffsetX),(int) (OffsetY+Height)); pDC->LineTo((int) (((double) i)*d + OffsetX),(int) (OffsetY+Height)+5); sprintf(s,"%.4g",LoX+((double) i)*dx); pDC->TextOut((int)(((double) i)*d + OffsetX),(int) OffsetY+(int)Height+10,s,(int) strlen(s)); } pDC->SetTextAlign(TA_LEFT); pDC->SelectObject(pOldFont); } BOOL CXYPlot::ToDisk(int fileformat, CString ToFile) { FILE *fp; int i,j; CString dest_name; if((NumCols==0) || (NumRows==0)){ if (ToFile=="") MsgBox("No data to write to disk."); return FALSE; } if (ToFile=="") { CFileDialog *fname_dia=new CFileDialog( FALSE, "txt | * ", dest_name, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Text Files (*.txt) | *.txt; *.TXT | All Files (*.*) | *.*||", NULL); if(fname_dia->DoModal()==IDCANCEL){ delete[] fname_dia; return FALSE; } dest_name=fname_dia->GetPathName(); delete[] fname_dia; } else dest_name=ToFile; if((fp=fopen(dest_name,"wt"))!=NULL){ if (fileformat==0){ for(i=0;i