#include "stdafx.h" #include "bhplot.h" CBHPlot::CBHPlot() { NumRows=0; NumCols=0; NumPts=0; M=NULL; lbls=NULL; Pts=NULL; } CBHPlot::~CBHPlot() { 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... PlotPen.CreatePen(PS_SOLID,1,PenCols[1]); pOldPen=pDC->SelectObject( &PlotPen ); for(i=0;iMoveTo( (int)Pts[i].re-2, (int)Pts[i].im-2); pDC->LineTo( (int)Pts[i].re-2, (int)Pts[i].im+2); pDC->LineTo( (int)Pts[i].re+2, (int)Pts[i].im+2); pDC->LineTo( (int)Pts[i].re+2, (int)Pts[i].im-2); pDC->LineTo( (int)Pts[i].re-2, (int)Pts[i].im-2); } pDC->SelectObject(pOldPen); PlotPen.DeleteObject(); 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){ k*=2; dy/=2.; } 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) && (!logscale)){ 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); if(logscale) sprintf(s,"%g",pow((double)10,LoX+((double) i)*dx)); else sprintf(s,"%.0f",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 CBHPlot::ToDisk() { FILE *fp; int i,j; CString dest_name; if((NumCols==0) || (NumRows==0)){ MsgBox("No data to write to disk."); return FALSE; } 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; if((fp=fopen(dest_name,"wt"))!=NULL){ for(i=0;i