clipping in C++ HELP!

clipping in C++ HELP!

Post by st.. » Tue, 16 May 2000 04:00:00



can someone tell me what is wrong with this code?

#include <windows.h>
#include <math.h>
#include <stdio.h>

typedef struct
{
        unsigned all;
        unsigned left:4;
        unsigned right:4;
        unsigned bottom:4;
        unsigned top:4;

} outcode;

void clippingAlg(HDC hdc,double x0, double y0, double x1, double y1,
                                 double xmin,double xmax,double
ymin,double ymax,int value);

outcode CompOutCode( double x, double y,double xmin,double xmax,
                                        double ymin,double ymax);

void MidpointLineReal( HDC hdc,double x0,double y0,double x1,
                                          double y1, int value);

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
     {
     static char szAppName[] = "Computer Graphics Assignment" ;
     HWND        hwnd ;
     MSG         msg ;
     WNDCLASSEX  wndclass ;

     wndclass.cbSize        = sizeof (wndclass) ;
     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;
     wndclass.hIconSm       = LoadIcon (NULL, IDI_APPLICATION) ;

     RegisterClassEx (&wndclass) ;

     hwnd = CreateWindow (szAppName,         // window class name
                            "Computer Graphics Assignment
three",     // window caption
                    WS_OVERLAPPEDWINDOW,     // window style
                    CW_USEDEFAULT,           // initial x position
                    CW_USEDEFAULT,           // initial y position
                    CW_USEDEFAULT,           // initial x size
                    CW_USEDEFAULT,           // initial y size
                    NULL,                    // parent window handle
                    NULL,                    // window menu handle
                    hInstance,               // program instance handle
                            NULL) ;                          //
creation parameters

     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;

     while (GetMessage (&msg, NULL, 0, 0))
          {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
          }
     return msg.wParam ;
     }
//----------------------------------------------------------------------
-------
//----------------------------------------------------------------------
-------
//----------------------------------------------------------------------
-------
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM
lParam)
//----------------------------------------------------------------------
-------
//----------------------------------------------------------------------
-------
//----------------------------------------------------------------------
-------
     {
     HDC         hdc ;
     PAINTSTRUCT ps ;

     static int  cxChar, cxCaps, cyChar, cyClient,cxClient ;

         int  x , y, Length;
         char Buf[20];
     TEXTMETRIC  tm ;

     switch (iMsg)
          {
//----------------------------------------------------------------------
-------
          case WM_CREATE :
//----------------------------------------------------------------------
-------
               hdc = GetDC (hwnd) ;

               GetTextMetrics (hdc, &tm) ;
               cxChar = tm.tmAveCharWidth ;
               cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2 ;
               cyChar = tm.tmHeight + tm.tmExternalLeading ;

               ReleaseDC (hwnd, hdc) ;

               return 0 ;

//------------------------------------------------------------
                                case  WM_SIZE :
//-----------------------------------------------------------------
                                cxClient = LOWORD(lParam);
                                cyClient = HIWORD(lParam);

               return 0 ;

//----------------------------------------------------------------------
-------
          case WM_PAINT :
//----------------------------------------------------------------------
-------
                   hdc = BeginPaint (hwnd, &ps) ;

                           clippingAlg
(hdc,10,10,500,500,50,400,50,400,10);

                   EndPaint (hwnd, &ps) ;
               return 0 ;

//------------------------------------------------------------
                                case  WM_CHAR :
//-----------------------------------------------------------------
                                        //so that I can get 2 print outs
                           hdc = GetDC (hwnd) ;
                           InvalidateRect(hwnd,NULL,true);

                           ReleaseDC (hwnd, hdc) ;
               return 0 ;

//----------------------------------------------------------------------
-------
          case WM_DESTROY :
//----------------------------------------------------------------------
-------
                  PostQuitMessage (0) ;
               return 0 ;
          }

     return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
     }

void clippingAlg(HDC hdc,double x0, double y0, double x1, double y1,
                                 double xmin,double xmax,double
ymin,double ymax,int value)
{
        bool accept, done;
        outcode outcode0,outcode1,outcodeOut;
        double x,y;

        accept =false;
        done = false;
        outcode0 = CompOutCode(x0,y0,xmin,xmax,ymin,ymax);
        outcode1 = CompOutCode(x0,y0,xmin,xmax,ymin,ymax);
        do
        {
                if(outcode0.all == outcode1.all == 0)
                {
                        accept = true;
                        done = true;
                }
                else if((outcode0.all&outcode1.all)!=0)
                        done =true;
                else
                {
                        if(outcode1.all !=0)
                                outcodeOut = outcode0;
                        else
                                outcodeOut = outcode1;
                        if(outcodeOut.top)
                        {
                                x = x0+(x1-x0)*(ymax-y0)/(y1-y0);
                                y = ymax;
                        }
                        else
                        if(outcodeOut.bottom)
                        {
                                x = x0+(x1-x0)*(ymin-y0)/(y1-y0);
                                y = ymin;
                        }
                        else
                        if(outcodeOut.right)
                        {
                                y = y0+(y1-y0)*(xmax-x0)/(x1-x0);
                                x = xmax;
                        }
                        else
                        if(outcodeOut.left)
                        {
                                y = y0+(y1-y0)*(xmin-x0)/(x1-x0);
                                x = xmin;
                        }

                        if(outcodeOut.all == outcode0.all)
                        {
                                x0 = x;
                                y0 = y;
                                outcode0 = CompOutCode
(x0,y0,xmin,xmax,ymin,ymax);
                        }
                        else
                        {
                                x1 = x;
                                y1 = y;
                                outcode1 = CompOutCode
(x1,y1,xmin,xmax,ymin,ymax);
                        }
                }
        }
        while(!done);
        if(accept)
                MidpointLineReal(hdc,x0,y0,x1,y1,value);

}

outcode CompOutCode( double x, double y,double xmin,double xmax,
                                        double ymin,double ymax)
{
        outcode code;
        code.top=0,code.bottom=0,code.left=0,code.right=0,code.all=0;
        if(y > ymax)
        {
                code.top =8;
                code.all+=code.top;
        }
        else if(y < ymin)
        {
                code.bottom =4;
                code.all+=code.bottom;
        }
        if(x>xmax)
        {
                code.right =2;
                code.all+=code.right;
        }
        else if(x<xmin)
        {
                code.left = 1;
                code.all+=code.left;
        }
        return code;

}

void MidpointLineReal( HDC hdc,double x0,double y0,double x1,double y1,
int value)
{
        double dx, dy, incrE, incrNE,d,x,y;

        dx = x1 - x0;
        dy = y1 - y0;
        d = dy*2-dx;
        incrE = dy*2;
        incrNE = (dy - dx) *2;
        x = x0;
        y = y0;
    SetPixel(hdc,x,y,value);
//      WritePixel(x, y, value);
        while(x<x1)
        {
                if(d<= 0)
                {
                        d+=incrE;
                        x++;
                }
                else
                {
                        d+=incrE;
                        x++;
                        y++;
                }
                SetPixel(hdc,x,y,value);
        //      WritePixel(x, y, value);
        }

}

THANKS..

Sent via Deja.com http://www.deja.com/
Before you buy.

 
 
 

clipping in C++ HELP!

Post by Andrew Vidle » Tue, 16 May 2000 04:00:00


Hi,

Quote:> can someone tell me what is wrong with this code?

<*BIG* Snip>

Yup, there''s virtually no comments in it and it's too long for anyone to
even bother looking at.

HTH

Andrew Vidler.

 
 
 

clipping in C++ HELP!

Post by Swam » Tue, 16 May 2000 04:00:00


LOL!  Great answer!
 
 
 

clipping in C++ HELP!

Post by bo » Tue, 16 May 2000 04:00:00


Quote:>can someone tell me what is wrong with this code?

This is what is wrong with it:

#include <windows.h>

bob

 
 
 

clipping in C++ HELP!

Post by Swam » Tue, 16 May 2000 04:00:00


Once, again, LOL!
 
 
 

clipping in C++ HELP!

Post by John William » Wed, 17 May 2000 04:00:00



> Hi,

> > can someone tell me what is wrong with this code?
> <*BIG* Snip>

> Yup, there''s virtually no comments in it and it's too long for anyone to
> even bother looking at.

Oh, and the other major problem is the presence of "Computer Graphics
Assignment 3" in the code...

So, who's volunteering to do this guy's homework for him? :)

JW

 
 
 

clipping in C++ HELP!

Post by Swam » Wed, 17 May 2000 04:00:00


Da noyv a sum peeple!  Bob and "slack" live.