PDA

View Full Version : drawing lines



makveli
11-08-2003, 03:45 PM
lets say i wanted to show a white line in dos how would i do it?

Salem
11-08-2003, 03:53 PM
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.

makveli
11-08-2003, 03:59 PM
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

gustavosserra
11-08-2003, 04:04 PM
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.

Salem
11-08-2003, 04:09 PM
I'd go with the libsdl option

makveli
11-08-2003, 04:15 PM
SDL 1.0
SDL 1.2
SDL CVS
Games
Demos
Applications
Libraries
wich one of those do i download?

Salem
11-09-2003, 02:21 AM
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.

Lurker
11-09-2003, 08:02 PM
cout << "-----------------------------------------------";
:p :D .

VirtualAce
11-10-2003, 08:17 AM
Use Bresehnam's algorithm.

256 color mode line drawing


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.

makveli
11-10-2003, 02:48 PM
where is the top of the program
#include ect...
int main();
where is that part of it

Salem
11-10-2003, 02:59 PM
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?

makveli
11-10-2003, 03:06 PM
:confused: i dont understand i have something called opengl on the dev-c++ and that displays graphics


/**************************
* 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

VirtualAce
11-11-2003, 03:22 AM
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?
:confused:


http://cboard.cprogramming.com/showthread.php?s=&threadid=46011&highlight=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.