Thread: drawing lines

  1. #1
    Registered User
    Join Date
    Nov 2003
    Posts
    43

    drawing lines

    lets say i wanted to show a white line in dos how would i do it?

  2. #2
    and the hat of int overfl Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    39,660
    You provide more information than a terse 1-line statement of what you want to achieve.

    Like which operating system and compiler you're using.
    Be very sure - that nice black box in the middle of your XP system is not DOS - it's a console.
    If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
    If at first you don't succeed, try writing your phone number on the exam paper.

  3. #3
    Registered User
    Join Date
    Nov 2003
    Posts
    43
    i have dev-c++ i have windows xp(home edition)
    lets say i want to show graphics, so the easist graphic to do is probally a strait line am i right?
    and what is the source code if i wanted the line is dos or console mode

  4. #4
    Disturbed Boy gustavosserra's Avatar
    Join Date
    Apr 2003
    Posts
    244
    Dev C++ does not provide any lib to use graphics, at least not one of the leatest version. You should look for specialized graphics libraries like: www.libsdl.org or any ASM routines, altough I do not know if Dev supports assembly.
    Nothing more to tell about me...
    Happy day =)

  5. #5
    and the hat of int overfl Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    39,660
    I'd go with the libsdl option
    If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
    If at first you don't succeed, try writing your phone number on the exam paper.

  6. #6
    Registered User
    Join Date
    Nov 2003
    Posts
    43
    SDL 1.0
    SDL 1.2
    SDL CVS
    Games
    Demos
    Applications
    Libraries
    wich one of those do i download?

  7. #7
    and the hat of int overfl Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    39,660
    As I recall, there is a menu option in the current dev-c+++ which allows you to download pre-configured additional packages. Libsdl is mentioned in this list.
    If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
    If at first you don't succeed, try writing your phone number on the exam paper.

  8. #8
    The Defective GRAPE Lurker's Avatar
    Join Date
    Feb 2003
    Posts
    949
    cout << "-----------------------------------------------";
    .
    Do not make direct eye contact with me.

  9. #9
    Registered User VirtualAce's Avatar
    Join Date
    Aug 2001
    Posts
    9,607
    Use Bresehnam's algorithm.

    256 color mode line drawing
    Code:
    void Line(int x1,int y1,int x2,int y2,BYTE color)
    {
      int diffx=x2-x1;
      int diffy=y2-y1;
      int xunit=1;
      int yunit=SCREENMAXY;
      int length=0;
      unsigned int offset=y1*SCREENMAXY+x1;
      int eterm=0;
      
      if (diffx<0)
      {
         diffx=-diffx;
         xunit=-xunit;
      }
      if (diffy<0)
      {
        diffy=-diffy;
        yunit=-yunit;
      }
    
      if (diffx<diffy)
      {
         length=diffx+1;
         for (int i=0;i<length;i++)
         {
            Screen[offset]=color;
            offset+=xunit;
            eterm+=diffx;
            if (eterm>diffy)
            {
               eterm-=diffx;
               offset+=yunit;
            }
          }
       }  
        else
       {
          length=diffy+1;
          for (int i=0;i<length;i++)
          {
             Screen[offset]=color;
             offset+=yunit;
             eterm+=diffy;
             if (eterm>0)
             {
                eterm-=diffy;
                offset+=xunit;
             }
          }
       }
    }

    If this does not work correctly then I've confused the eterm+=diffx and if (eterm) sections. I always get them mixed up. If it does not produce correct lines let me know.

    Test by doing this:

    Line(0,0,centerx,centery,1);
    Line(0,maxy,centerx,centery,2);
    Line(maxx,0,centerx,centery,3);
    Line(maxx,maxy,centerx,centery,4);

    Should be an X on the screen with:

    Upper left line is dark blue
    Upper right line is cyan
    Lower left line is green
    Lower right line is dark red

    All should meet in the center of the screen.
    Last edited by VirtualAce; 11-10-2003 at 11:26 AM.

  10. #10
    Registered User
    Join Date
    Nov 2003
    Posts
    43
    where is the top of the program
    #include ect...
    int main();
    where is that part of it

  11. #11
    and the hat of int overfl Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    39,660
    That's only of any use to you if you're actually implementing a graphics library yourself.

    Have you managed to get libsdl installed yet?
    If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
    If at first you don't succeed, try writing your phone number on the exam paper.

  12. #12
    Registered User
    Join Date
    Nov 2003
    Posts
    43
    i dont understand i have something called opengl on the dev-c++ and that displays graphics
    Code:
    /**************************
     * Includes
     *
     **************************/
    
    #include <windows.h>
    #include <gl/gl.h>
    
    
    /**************************
     * Function Declarations
     *
     **************************/
    
    LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
    WPARAM wParam, LPARAM lParam);
    void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC);
    void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC);
    
    
    /**************************
     * WinMain
     *
     **************************/
    
    int WINAPI WinMain (HINSTANCE hInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine,
                        int iCmdShow)
    {
        WNDCLASS wc;
        HWND hWnd;
        HDC hDC;
        HGLRC hRC;        
        MSG msg;
        BOOL bQuit = FALSE;
        float theta = 0.0f;
    
        /* register window class */
        wc.style = CS_OWNDC;
        wc.lpfnWndProc = WndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hInstance;
        wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
        wc.hCursor = LoadCursor (NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
        wc.lpszMenuName = NULL;
        wc.lpszClassName = "GLSample";
        RegisterClass (&wc);
    
        /* create main window */
        hWnd = CreateWindow (
          "GLSample", "OpenGL Sample", 
          WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,
          0, 0, 256, 256,
          NULL, NULL, hInstance, NULL);
    
        /* enable OpenGL for the window */
        EnableOpenGL (hWnd, &hDC, &hRC);
    
        /* program main loop */
        while (!bQuit)
        {
            /* check for messages */
            if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
            {
                /* handle or dispatch messages */
                if (msg.message == WM_QUIT)
                {
                    bQuit = TRUE;
                }
                else
                {
                    TranslateMessage (&msg);
                    DispatchMessage (&msg);
                }
            }
            else
            {
                /* OpenGL animation code goes here */
    
                glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
                glClear (GL_COLOR_BUFFER_BIT);
    
                glPushMatrix ();
                glRotatef (theta, 0.0f, 0.0f, 1.0f);
                glBegin (GL_TRIANGLES);
                glColor3f (1.0f, 0.0f, 0.0f);   glVertex2f (0.0f, 1.0f);
                glColor3f (0.0f, 1.0f, 0.0f);   glVertex2f (0.87f, -0.5f);
                glColor3f (0.0f, 0.0f, 1.0f);   glVertex2f (-0.87f, -0.5f);
                glEnd ();
                glPopMatrix ();
    
                SwapBuffers (hDC);
    
                theta += 1.0f;
                Sleep (1);
            }
        }
    
        /* shutdown OpenGL */
        DisableOpenGL (hWnd, hDC, hRC);
    
        /* destroy the window explicitly */
        DestroyWindow (hWnd);
    
        return msg.wParam;
    }
    
    
    /********************
     * Window Procedure
     *
     ********************/
    
    LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
                              WPARAM wParam, LPARAM lParam)
    {
    
        switch (message)
        {
        case WM_CREATE:
            return 0;
        case WM_CLOSE:
            PostQuitMessage (0);
            return 0;
    
        case WM_DESTROY:
            return 0;
    
        case WM_KEYDOWN:
            switch (wParam)
            {
            case VK_ESCAPE:
                PostQuitMessage(0);
                return 0;
            }
            return 0;
    
        default:
            return DefWindowProc (hWnd, message, wParam, lParam);
        }
    }
    
    
    /*******************
     * Enable OpenGL
     *
     *******************/
    
    void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC)
    {
        PIXELFORMATDESCRIPTOR pfd;
        int iFormat;
    
        /* get the device context (DC) */
        *hDC = GetDC (hWnd);
    
        /* set the pixel format for the DC */
        ZeroMemory (&pfd, sizeof (pfd));
        pfd.nSize = sizeof (pfd);
        pfd.nVersion = 1;
        pfd.dwFlags = PFD_DRAW_TO_WINDOW | 
          PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
        pfd.iPixelType = PFD_TYPE_RGBA;
        pfd.cColorBits = 24;
        pfd.cDepthBits = 16;
        pfd.iLayerType = PFD_MAIN_PLANE;
        iFormat = ChoosePixelFormat (*hDC, &pfd);
        SetPixelFormat (*hDC, iFormat, &pfd);
    
        /* create and enable the render context (RC) */
        *hRC = wglCreateContext( *hDC );
        wglMakeCurrent( *hDC, *hRC );
    
    }
    
    
    /******************
     * Disable OpenGL
     *
     ******************/
    
    void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC)
    {
        wglMakeCurrent (NULL, NULL);
        wglDeleteContext (hRC);
        ReleaseDC (hWnd, hDC);
    }
    That is the default code lets say instead of that which is a rotating triangle wat would be the code of a simple line

  13. #13
    Registered User VirtualAce's Avatar
    Join Date
    Aug 2001
    Posts
    9,607
    That's only of any use to you if you're actually implementing a graphics library yourself.

    lets say i wanted to show a white line in dos how would i do it?

    Did I miss something?



    http://cboard.cprogramming.com/showt...light=VGA+unit

    This is a very simple VGA unit. It only has basic functionality but it will get you started. Otherwise if you don't want to create your own then get a library. However if you have no idea what is going on in the graphics getting a third party library will only serve to confuse you.
    Last edited by VirtualAce; 11-11-2003 at 03:26 AM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Drawing lines
    By rudyman in forum C Programming
    Replies: 2
    Last Post: 05-01-2008, 02:32 PM
  2. drawing basic lines....
    By 1dayprogrammer in forum C++ Programming
    Replies: 10
    Last Post: 02-23-2008, 04:07 PM
  3. Drawing lines
    By Punkture in forum C Programming
    Replies: 2
    Last Post: 05-05-2003, 05:30 PM
  4. Drawing lines and ellipses with DirectDraw
    By Hunter2 in forum Game Programming
    Replies: 9
    Last Post: 01-08-2003, 01:25 PM
  5. drawing lines
    By bluehead in forum C++ Programming
    Replies: 1
    Last Post: 11-23-2001, 01:22 PM