Projects > GC Project > setaxis.h

Home | Projects | Links

 

GC PROJECT

  

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

 

Get WinRAR

 

 

Copyright © Yuri Bulankov 2002

 

Bugs/Comments: code@compilerabuse.com

Copyright (C) 2001-2006 Yuri Bulankov. All rights reserved.