|
Projects > GC Project > setaxis.h |
||||
|
compilation.h compilation_defs.h exp_info.h GCMainDialog.h on_apply.h setaxis.h Download gc.exe (1.63 MB) Download VC++ 8.0 Project (54.1 KB RAR Archive) GC Help
#ifndef SETAXIS_H #define SETAXIS_H
// The following function determines the number of position a double // will occupy. Precision is set to 14. This function is used to put doubles // nicely under the marks on axes. int MainDialog::gettextlength(double num,int charlen){ char numstr[25]; ostringstream num_out(numstr,25); num_out.seekp(0); num_out<<setprecision(14)<<num<<ends; CString CStr( num_out.str().data() ); return CStr.GetLength() * charlen; };
// This function does all the drawing of the axes, in different circumstances. // They may be displayed differently according to scale and position. void MainDialog::setaxis(){
CPen dotted(PS_DOT,1,RGB(128,128,128)); CPen gray_pen(0,1,RGB(128,128,128)); CFont Grid_font; Grid_font.CreateFont(13,5,0,0,FW_REGULAR,0,0,0,0,0,0,0,0,_T("System Font"));
CString tempSTR; int divider=8;
pRLE->GetWindowText(tempSTR); if(tempSTR.GetLength()>9) divider=4; if(isnum(tempSTR)) Xup=CString_to_double(tempSTR); else {astream.seekp(0); astream<<setprecision(14)<<Xup<<ends; pRLE->SetWindowText(CString(astream.str().data()));}
pLLE->GetWindowText(tempSTR); if(tempSTR.GetLength()>9) divider=4; if(isnum(tempSTR)) Xlo=CString_to_double(tempSTR); else {astream.seekp(0); astream<<setprecision(14)<<Xlo<<ends; pLLE->SetWindowText(CString(astream.str().data()));}
pULE->GetWindowText(tempSTR); if(tempSTR.GetLength()>9) divider=4; if(isnum(tempSTR)) Yup=CString_to_double(tempSTR); else {astream.seekp(0); astream<<setprecision(14)<<Yup<<ends; pULE->SetWindowText(CString(astream.str().data()));}
pDLE->GetWindowText(tempSTR); if(tempSTR.GetLength()>9) divider=4; if(isnum(tempSTR)) Ylo=CString_to_double(tempSTR); else {astream.seekp(0); astream<<setprecision(14)<<Ylo<<ends; pDLE->SetWindowText(CString(astream.str().data()));}
if(Xup<=Xlo){Xup=5;Xlo=-5;pRLE->SetWindowText(_T("5"));pLLE->SetWindowText(_T("-5"));} if(Yup<=Ylo){Yup=5;Ylo=-5;pULE->SetWindowText(_T("5"));pDLE->SetWindowText(_T("-5"));}
Xmultiplier=GridX/(Xup-Xlo); Ymultiplier=GridY/(Yup-Ylo);
double Xinterval=(Xup-Xlo)/divider; double Yinterval=(Yup-Ylo)/divider;
bool Xdotted=0; bool Ydotted=0;
double ix=0; double iy=0;
// ---------------------------------------------------------------------------------- if((Yup>=0 && Ylo>=0) || (Yup<=0 && Ylo<=0)){Xdotted=true;} if((Xup>=0 && Xlo>=0) || (Xup<=0 && Xlo<=0)){Ydotted=true;}
//Axes are displayed in gray when in theory, they are invisible.
// ---GRAY X axis-------------------------------------------------------------------- if(Xdotted){ memGrid.SelectObject(& dotted); memGrid.SetTextColor(RGB(128,128,128)); memGrid.MoveTo(0,GridY/2); memGrid.LineTo(GridX,GridY/2);
if(Xdotted && Ydotted) ix=(Xup+Xlo)/2; else ix=0; double Ypos=(Yup+Ylo)/2;
while(ix<=Xup){ix+=Xinterval;memGrid.SelectObject(& gray_pen); memGrid.MoveTo(resx(ix),resy(Ypos)+2);memGrid.LineTo(resx(ix),resy(Ypos)-3); astream.seekp(0);astream<<setprecision(14)<<ix<<ends; memGrid.SelectObject(Grid_font); memGrid.TextOut(resx(ix) - gettextlength(ix,5)/2,resy(Ypos)+3,CString(astream.str().data())); } if(Xdotted & Ydotted) ix=(Xup+Xlo)/2; else ix=0; while(ix>=Xlo){ix-=Xinterval;memGrid.SelectObject(& gray_pen); memGrid.MoveTo(resx(ix),resy(Ypos)+2);memGrid.LineTo(resx(ix),resy(Ypos)-3); astream.seekp(0);astream<<setprecision(14)<<ix<<ends; memGrid.SelectObject(Grid_font); memGrid.TextOut(resx(ix) - gettextlength(ix,5)/2,resy(Ypos)+3,CString(astream.str().data())); } } // ---GRAY Y axis--------------------------------------------------------------------
if(Ydotted){ memGrid.SelectObject(& dotted); memGrid.SetTextColor(RGB(128,128,128)); memGrid.MoveTo(GridX/2,0); memGrid.LineTo(GridX/2,GridY);
if(Xdotted && Ydotted) iy=(Yup+Ylo)/2; else iy=0; double Xpos=(Xup+Xlo)/2;
while(iy<=Yup){iy+=Yinterval;memGrid.SelectObject(& gray_pen); memGrid.MoveTo(resx(Xpos)+2,resy(iy));memGrid.LineTo(resx(Xpos)-3,resy(iy)); astream.seekp(0);astream<<setprecision(14)<<iy<<ends; memGrid.SelectObject(Grid_font); memGrid.TextOut(resx(Xpos)+5,resy(iy)-7,CString(astream.str().data())); } if(Xdotted && Ydotted) iy=(Yup+Ylo)/2; else iy=0; while(iy>=Ylo){iy-=Yinterval;memGrid.SelectObject(& gray_pen); memGrid.MoveTo(resx(Xpos)+2,resy(iy));memGrid.LineTo(resx(Xpos)-3,resy(iy)); astream.seekp(0);astream<<setprecision(14)<<iy<<ends; memGrid.SelectObject(Grid_font); memGrid.TextOut(resx(Xpos)+5,resy(iy)-7,CString(astream.str().data()));
} }
// ---------------------------------------------------------------------------------------------------------------------------- if(!Xdotted){memGrid.SelectStockObject(BLACK_PEN); memGrid.MoveTo(resx(Xlo),resy(0)); memGrid.LineTo(resx(Xup),resy(0));} if(!Ydotted){memGrid.SelectStockObject(BLACK_PEN); memGrid.MoveTo(resx(0),resy(Yup)); memGrid.LineTo(resx(0),resy(Ylo));} // ----------------------------------------------------------------------------------------------------------------------------
// ---BLACK X axis------------------------------------------------------------------- if(!Xdotted){ ix=0; memGrid.SetTextColor(RGB(0,0,0)); while(ix<=Xup){ix+=Xinterval;memGrid.MoveTo(resx(ix),resy(0)+2);memGrid.LineTo(resx(ix),resy(0)-3); astream.seekp(0);astream<<setprecision(14)<<ix<<ends; memGrid.SelectObject(Grid_font); memGrid.TextOut(resx(ix) - gettextlength(ix,5)/2,resy(0)+3,CString(astream.str().data())); } ix=0; while(ix>=Xlo){ix-=Xinterval;memGrid.MoveTo(resx(ix),resy(0)+2);memGrid.LineTo(resx(ix),resy(0)-3); astream.seekp(0);astream<<setprecision(14)<<ix<<ends; memGrid.SelectObject(Grid_font); memGrid.TextOut(resx(ix) - gettextlength(ix,5)/2,resy(0)+3,CString(astream.str().data())); } }
// ---BLACK Y axis------------------------------------------------------------------- if(!Ydotted){ iy=0; memGrid.SetTextColor(RGB(0,0,0)); while(iy<=Yup){iy+=Yinterval;memGrid.MoveTo(resx(0)+2,resy(iy));memGrid.LineTo(resx(0)-3,resy(iy)); astream.seekp(0);astream<<setprecision(14)<<iy<<ends; memGrid.SelectObject(Grid_font); memGrid.TextOut(resx(0)+5,resy(iy)-7,CString(astream.str().data())); } iy=0; while(iy>=Ylo){iy-=Yinterval;memGrid.MoveTo(resx(0)+2,resy(iy));memGrid.LineTo(resx(0)-3,resy(iy)); astream.seekp(0);astream<<setprecision(14)<<iy<<ends; memGrid.SelectObject(Grid_font); memGrid.TextOut(resx(0)+5,resy(iy)-7,CString(astream.str().data())); } }
// ---ZERO ON X&Y INTERSECTION (IF BOTH BLACK)--------------------------------------- memGrid.SelectObject(&Grid_font); if(!Ydotted && !Xdotted){memGrid.TextOut(resx(0)-8,resy(0)+1,"0");}
}
#endif
compilation.h compilation_defs.h exp_info.h GCMainDialog.h on_apply.h setaxis.h Download gc.exe (1.63 MB) Download VC++ 8.0 Project (54.1 KB RAR Archive) GC Help
Copyright © Yuri Bulankov 2002
|
||||
|
Bugs/Comments: code@compilerabuse.com Copyright (C) 2001-2006 Yuri Bulankov. All rights reserved. |
||||