jorgempaz -3 Newbie Poster

I'm working in a large program. The problem is that I have to redraw the screen from time to time. Go back to draw with SetPixel is too time consuming. With C++ I used putimage and getimage without any problem, but I can't find the equivalent instructions in windows programming or C++ Builder.

Sorry, I didn't include the edit3d-2.cpp file with functions on this post 'cause is too long.

Infinte thanks.

#include <vcl.h>
#include <windows.h>
#include <DOS.H>
#include <MEM.H>
#include <STDLIB.H>
#include <STDIO.H>
#include <CONIO.H>
#include <STRING.H>
#include <MATH.H>
#include <TIME.H>
#include <process.h>

#pragma hdrstop
#define PINTANDO_PINCEL 100
#define ID_PINTAPINCEL 101
#define ID_SCRIPT 200
#define ID_POS_SCRIPT 201
#define ID_GUARDA_TEMP_SCRIPT 202
#define ID_DIBUJALIN3D 400
#define ID_LAYER 501
#define ID_NEXTLAYER 502
#define ID_LAYER_CREA 504
#define ID_LAYER_CREA_TERMINARADIAL 505
#define ID_EDIT_LAYER_PUNTOSARADIAL 506
#define RADIALZFIJO 700
#define ID_LAYER_SHOW 800
#define ID_DEF_X 801
#define ID_DEF_Y 802
#define ID_DEF_Z 803
#define ID_AXIS_SHOW 1000
#define ID_AXIS_HIDE 1001
#define ID_ANGLEX_PLUS 1002
#define ID_ANGLEX_MINUS 1003
#define ID_ANGLEY_PLUS 1004
#define ID_ANGLEY_MINUS 1005
#define ID_ANGLEZ_PLUS 1006
#define ID_ANGLEZ_MINUS 1007
#define ID_MOVE_RIGHT 1008
#define ID_MOVE_LEFT 1009
#define ID_MOVE_DOWN 1010
#define ID_MOVE_UP 1011
#define ID_MOVE_FAREST 1012
#define ID_MOVE_NEAREST 1013
#define ID_EXAMPLE 2000
#define ID_ERASE 2001
#define ID_EXAMPLE_RESOLUTION5 2002
#define ID_SAVE_DRAW2D 3000
#define ID_SAVE_LAYER 3001
#define ID_SAVE_LAYGRP 3002
#define ID_GUARDA 3004
#define ID_EDIT 3005
#define ID_OPEN_DRAW2D 3100
#define ID_OPEN_LAYER 3101
#define ID_OPEN_LAYGRP 3102
#define ID_ABRIR_BMP 3103
#define ID_EFECTO 4000
#define ID_SCREEEN3D 5000
#define OP_MENU1 7001
#define OP_MENU2 7002
#define OP_MENU3 7003
#define OP_MENU4 7004
#define OP_MENU5 7005
#define OP_MENU6 7006
#define OP_MENU7 7007
#define OP_MENU8 7008
#define OP_MENU9 7009
#define OP_MENU10 7010
#define OP_MENU11 7011
#define OP_MENU12 7012
#define OP_MENU13 7013
#define OP_MENU14 7014
#define OP_MENU15 7015
#define OP_MENU16 7016
#define OP_MENU_LAYER1 7101
#define OP_MENU_LAYER2 7102
#define OP_MENU_LAYER3 7103
#define OP_MENU_LAYER4 7104
#define OP_MENU_LAYER5 7105
#define OP_MENU_LAYER6 7106
#define ID_CUENTAGOTAS 8000
#define ID_AIRBRUSH 8001
#define ID_PINCEL 8002
#define ID_LINEA 8003
#define ID_AIRBRUSH_EXE 8004
#define FIG_GEOM 8005
#define SECUNDARIO 8006
#define ID_FILE_EXIT 9001
#define ID_STUFF_GO 9002
#define ID_REDRAW 10000
#define ID_REDRAWALL 10001
#define ID_REDRAWMENUS 10002
#define CuadLayerX1 980
#define CuadLayerX2 1135
#define CuadLayerY1 100
#define CuadLayerY2 CuadLayerY1+200
#define CuadLayerY3 CuadLayerY2+200
#define CuadLayerY4 CuadLayerY3+200
#define CLayerYincr 30
#define xMenuLayer1 CuadLayerX1+5
#define xMenuLayer2 CuadLayerX1+25
#define xMenuLayer3 CuadLayerX1+35
#define xMenuLayer4 CuadLayerX1+55
#define xMenuLayer5 CuadLayerX1+65+10
#define xMenuLayer6 CuadLayerX1+85+10
#define xMenuLayer7 CuadLayerX1+95+10
#define xMenuLayer8 CuadLayerX1+115+10
#define xMenuLayer9 CuadLayerX1+125+20
#define xMenuLayer10 CuadLayerX1+145+20
#define xMenuLayer11 CuadLayerX1+155+20
#define xMenuLayer12 CuadLayerX1+175+20
#define yMenuLayer1 CuadLayerY1-20
#define yMenuLayer2 CuadLayerY1-2
#define yMenuLayer3 CuadLayerY2-20+CLayerYincr
#define yMenuLayer4 CuadLayerY2-2+CLayerYincr
#define yMenuLayer5 CuadLayerY3-20+CLayerYincr*2
#define yMenuLayer6 CuadLayerY3-2+CLayerYincr*2

#define GETMAXX 1150
#define GETMAXY 1150
#define WHITE 255,255,255
#define MINXDIB 5
#define MINYDIB 120
#define MAXXDIB 975
#define MAXYDIB 790
#define POS_Y_ESTADO1 40
#define CHICO 0
#define MEDIANO 1
#define GRANDE 2

#include "e:\editor3d\builder6\20ag2010\edit3d-2.cpp"

int colorMarcoMenu=1;
int anchoCuadroMenu=20;
int altoCuadroMenu=15;
int menuArribaX=10;
int menuArribaY=55;
int xM=0,yM=0;
int xMousScript=0, yMousScript=0,xMousScriptAnt=900, yMousScriptAnt=500;
int ayCambio=0;

//------------------------- LRESULT ------------------------------------
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{

	switch(Message)
	{
		case WM_CREATE:
		{
			HMENU hMenu, hSubMenu;
			HICON hIcon, hIconSm;

			hMenu = CreateMenu();

			hSubMenu = CreatePopupMenu();
			AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "&File");
                        AppendMenu(hSubMenu, MF_STRING, ID_FILE_EXIT, "&New");
                        AppendMenu(hSubMenu, MF_STRING, ID_FILE_EXIT, "&Save");
                        AppendMenu(hSubMenu, MF_STRING, ID_FILE_EXIT, "&Save as");
                        AppendMenu(hSubMenu, MF_STRING, ID_FILE_EXIT, "&Save masque");
                        AppendMenu(hSubMenu, MF_STRING, ID_SAVE_DRAW2D, "&Save 2D Draw");
                        AppendMenu(hSubMenu, MF_STRING, ID_SAVE_LAYER, "&Save Layer");
                        AppendMenu(hSubMenu, MF_STRING, ID_SAVE_LAYGRP, "&Save Layer Group");
                        AppendMenu(hSubMenu, MF_STRING, ID_OPEN_DRAW2D, "&Open 2D Draw");
                        AppendMenu(hSubMenu, MF_STRING, ID_OPEN_LAYER, "&Open Layer");
                        AppendMenu(hSubMenu, MF_STRING, ID_FILE_EXIT, "&Import");
                        AppendMenu(hSubMenu, MF_STRING, ID_FILE_EXIT, "&Print");
                        AppendMenu(hSubMenu, MF_STRING, ID_FILE_EXIT, "&Exit");

			hSubMenu = CreatePopupMenu();
			AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "&Edit");
			AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Copy");
			AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Paste");
			AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Paste object");
			AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Insert");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Select");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Create 3d node");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Redefine 3d node");

			hSubMenu = CreatePopupMenu();
			AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "&DrawTools");
                        AppendMenu(hSubMenu, MF_STRING, ID_LINEA, "&Line");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Square");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Rectangle");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Poligon");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Circle");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Ellipse");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Sphere");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Ellipsoid");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Plane");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&X lay");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Y lay");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Z lay");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Grid");

                        hSubMenu = CreatePopupMenu();
                        AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "&PaintTools");
                        AppendMenu(hSubMenu, MF_STRING, ID_CUENTAGOTAS, "&CuentaGotas");
                        AppendMenu(hSubMenu, MF_STRING, ID_PINCEL, "&Pincel");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Water");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Oil");
                        AppendMenu(hSubMenu, MF_STRING, ID_AIRBRUSH, "&Air brush");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Erase");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Set drawing color");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Set back color");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Set fill color");

			hSubMenu = CreatePopupMenu();
			AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "&Sculpt");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Repujado sphere");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Repujado transversal bar");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Repujado cilinder");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Aspirator sphere");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Aspirator transversal bar");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Aspirator cilinder");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Cincel");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Metal brush");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Paste");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Heat");

                        hSubMenu = CreatePopupMenu();
			AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "&Layer");
                        //AppendMenu(hSubMenu, MF_STRING, ID_LAYER_CREATE, "&Create Layer");
                        AppendMenu(hSubMenu, MF_STRING, ID_LAYER_SHOW, "&Show Layer");
                        AppendMenu(hSubMenu, MF_STRING, ID_DEF_X, "&Define x");
                        AppendMenu(hSubMenu, MF_STRING, ID_DEF_Y, "&Define y");
                        AppendMenu(hSubMenu, MF_STRING, ID_DEF_Z, "&Define z");

                        hSubMenu = CreatePopupMenu();
                        AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "&Move 3d");
                        AppendMenu(hSubMenu, MF_STRING, ID_AXIS_SHOW, "&Show axis");
                        AppendMenu(hSubMenu, MF_STRING, ID_AXIS_HIDE, "&Hide axis");
                        AppendMenu(hSubMenu, MF_STRING, ID_MOVE_UP, "&Up");
                        AppendMenu(hSubMenu, MF_STRING, ID_MOVE_DOWN, "&Down");
                        AppendMenu(hSubMenu, MF_STRING, ID_MOVE_RIGHT, "&Right");
                        AppendMenu(hSubMenu, MF_STRING, ID_MOVE_LEFT, "&Left");
                        AppendMenu(hSubMenu, MF_STRING, ID_MOVE_NEAREST, "&Nearest");
                        AppendMenu(hSubMenu, MF_STRING, ID_MOVE_FAREST, "&Farest");
                        AppendMenu(hSubMenu, MF_STRING, ID_ANGLEX_PLUS, "&AngleX +");
                        AppendMenu(hSubMenu, MF_STRING, ID_ANGLEX_MINUS, "&AngleX -");
                        AppendMenu(hSubMenu, MF_STRING, ID_ANGLEY_PLUS, "&AngleY +");
                        AppendMenu(hSubMenu, MF_STRING, ID_ANGLEY_MINUS, "&AngleY -");
                        AppendMenu(hSubMenu, MF_STRING, ID_ANGLEZ_PLUS, "&AngleZ +");
                        AppendMenu(hSubMenu, MF_STRING, ID_ANGLEZ_MINUS, "&AngleZ -");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Redraw");

                        hSubMenu = CreatePopupMenu();
                        AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "&Object");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Create cube");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Create sphere");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Create ellipsoid");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Delete");

                        hSubMenu = CreatePopupMenu();
                        AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "&Script");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&New");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&See all");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Action object");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Rewind");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Choose time");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&End");

                        hSubMenu = CreatePopupMenu();
                        AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "&View");
                        AppendMenu(hSubMenu, MF_STRING, ID_SCREEEN3D, "&Screen 3d");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&RGB Pallete");
                        AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "&Objects");
                        AppendMenu(hSubMenu, MF_STRING, ID_EXAMPLE, "&Ejemplo");
                        AppendMenu(hSubMenu, MF_STRING, ID_EXAMPLE_RESOLUTION5, "&Ejem Resolution.5");
                        AppendMenu(hSubMenu, MF_STRING, ID_ERASE, "&Borra");
                        AppendMenu(hSubMenu, MF_STRING, ID_REDRAW, "&Mostrar color");
                        AppendMenu(hSubMenu, MF_STRING, ID_REDRAWMENUS, "&Mostrar menús");
                        AppendMenu(hSubMenu, MF_STRING, ID_REDRAWALL, "&Redibujar");

        		SetMenu(hwnd, hMenu);

			hIcon = (HICON)LoadImage(NULL, "menu_two.ico", IMAGE_ICON, 32, 32, LR_LOADFROMFILE);
			//hIcon = (HICON)LoadImage(NULL, "menu_two.bmp", IMAGE_ICON, 32, 32, LR_LOADFROMFILE);
			if(hIcon) {SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);}
			else {MessageBox(hwnd, "Could not load large icon! Is it in the current working directory?", "Error", MB_OK | MB_ICONERROR);}
			hIconSm = (HICON)LoadImage(NULL, "menu_two.ico", IMAGE_ICON, 16, 16, LR_LOADFROMFILE);
			//hIcon = (HICON)LoadImage(NULL, "menu_two.bmp", IMAGE_ICON, 16, 16, LR_LOADFROMFILE);
			if(hIconSm){SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)hIconSm);}
			else{MessageBox(hwnd, "Could not load small icon! Is it in the current working directory?", "Error", MB_OK | MB_ICONERROR);}
		}
		break;
		case WM_COMMAND:
			switch(LOWORD(wParam))
			{

                                case ID_SAVE_DRAW2D:procesoGlobal= ID_SAVE_DRAW2D; break;
                                case ID_SAVE_LAYER:procesoGlobal= ID_SAVE_LAYER; break;
                                case ID_SAVE_LAYGRP:procesoGlobal= ID_SAVE_LAYGRP; break;
                                case ID_OPEN_LAYER:procesoGlobal= ID_OPEN_LAYER; break;

                                case ID_OPEN_DRAW2D:procesoGlobal= ID_OPEN_DRAW2D; break;

				case ID_FILE_EXIT:PostMessage(hwnd, WM_CLOSE, 0, 0); break;
				case ID_STUFF_GO: procesoGlobal= 0;MessageBox(hwnd, "You clicked 1!", "Woo!", MB_OK); break;
                                case ID_CUENTAGOTAS:procesoGlobal= ID_CUENTAGOTAS; break;
                                case ID_AIRBRUSH:procesoGlobal= ID_AIRBRUSH; break;
                                case ID_PINCEL:procesoGlobal= ID_PINCEL; break;
                                case ID_LINEA:procesoGlobal= ID_LINEA; break;

                                case ID_LAYER:procesoGlobal= ID_LAYER; break;

                                case ID_MOVE_NEAREST:procesoGlobal= ID_MOVE_NEAREST; break;
                                case ID_MOVE_FAREST:procesoGlobal= ID_MOVE_FAREST; break;
                                case ID_MOVE_RIGHT: procesoGlobal= ID_MOVE_RIGHT; break;
                                case ID_MOVE_LEFT:  procesoGlobal= ID_MOVE_LEFT; break;
                                case ID_ANGLEX_PLUS: procesoGlobal= ID_ANGLEX_PLUS; break;
                                case ID_ANGLEX_MINUS:procesoGlobal= ID_ANGLEX_MINUS; break;
                                case ID_ANGLEY_PLUS: procesoGlobal= ID_ANGLEY_PLUS; break;
                                case ID_ANGLEY_MINUS:procesoGlobal= ID_ANGLEY_MINUS; break;
                                case ID_ANGLEZ_PLUS: procesoGlobal= ID_ANGLEZ_PLUS; break;
                                case ID_ANGLEZ_MINUS:procesoGlobal= ID_ANGLEZ_MINUS; break;
                                case ID_MOVE_DOWN:procesoGlobal= ID_MOVE_DOWN; break;
                                case ID_MOVE_UP:procesoGlobal= ID_MOVE_UP; break;
                                case ID_EXAMPLE:procesoGlobal= ID_EXAMPLE; break;
                                case ID_EXAMPLE_RESOLUTION5:procesoGlobal= ID_EXAMPLE_RESOLUTION5; break;
                                case ID_ERASE:procesoGlobal= ID_ERASE; break;
				case ID_AXIS_SHOW: procesoGlobal= ID_AXIS_SHOW; break;
				case ID_AXIS_HIDE: procesoGlobal= ID_AXIS_HIDE; break;
                                case ID_LAYER_SHOW: procesoGlobal= ID_LAYER_SHOW; break;
                                case ID_REDRAWALL: procesoGlobal= ID_REDRAWALL; break;
                                case ID_REDRAW: procesoGlobal= ID_REDRAW; break;
                                case ID_REDRAWMENUS: procesoGlobal= ID_REDRAWMENUS; break;
                                case ID_SCREEEN3D:
                                spawnl(P_NOWAITO, "Screen3d.exe", "Screen3d.exe", NULL);
                                break;
			}
		break;
		case WM_CLOSE:	DestroyWindow(hwnd);break;
                case WM_DESTROY:PostQuitMessage(0);break;
//BEGIN MOUSE EVENTS--------------------------------------------
                case WM_PAINT:
                        procesoGlobal= ID_REDRAW;
                break;

                case WM_LBUTTONDOWN:
                        flag = true;
                        xMouse = LOWORD(lParam);
                        yMouse = HIWORD(lParam);

                        // LAYERS DERECHA --------------------------------------------------------
                        if(xMouse>xMenuLayer1&&yMouse>yMenuLayer1&&xMouse<xMenuLayer2&&yMouse<yMenuLayer2)
                        procesoGlobal=OP_MENU_LAYER1;
                        if(xMouse>xMenuLayer3&&yMouse>yMenuLayer1&&xMouse<xMenuLayer4&&yMouse<yMenuLayer2)
                        procesoGlobal=OP_MENU_LAYER2;
                        if(xMouse>xMenuLayer5&&yMouse>yMenuLayer1&&xMouse<xMenuLayer6&&yMouse<yMenuLayer2)
                        procesoGlobal=OP_MENU_LAYER3;
                        if(xMouse>xMenuLayer7&&yMouse>yMenuLayer1&&xMouse<xMenuLayer8&&yMouse<yMenuLayer2)
                        procesoGlobal=OP_MENU_LAYER4;
                        if(xMouse>xMenuLayer9&&yMouse>yMenuLayer1&&xMouse<xMenuLayer10&&yMouse<yMenuLayer2)
                        procesoGlobal=OP_MENU_LAYER5;
                        if(xMouse>xMenuLayer11&&yMouse>yMenuLayer1&&xMouse<xMenuLayer12&&yMouse<yMenuLayer2)
                        procesoGlobal=OP_MENU_LAYER6;

                        // MOVIMIENTO --------------------------------------------------------
                        colorMarcoMenu=1;
                        anchoCuadroMenu=20;
                        altoCuadroMenu=15;
                        menuArribaX=10;
                        menuArribaY=55;
                        register int con;
                        for(con=0;con<17;con++)
                	{
                        int xm1, ym1, xm2, ym2;
                        xm1=menuArribaX+con*anchoCuadroMenu*2+1;
                        xm2=menuArribaX+con*anchoCuadroMenu*2+36+1;
                        ym1=menuArribaY+2;
                        ym2=menuArribaY+18+2;
                        if(xMouse>xm1&&yMouse>ym1&&xMouse<xm2&&yMouse<ym2)
                	switch(con){
		                case 0:  break;
                		case 1:  break;
		                case 2:procesoGlobal=ID_MOVE_FAREST; break;
                		case 3:procesoGlobal=ID_MOVE_NEAREST;break;
		                case 4:procesoGlobal=ID_MOVE_LEFT; break;
                		case 5:procesoGlobal=ID_MOVE_RIGHT; break;
		                case 6:procesoGlobal=ID_MOVE_UP; break;
                		case 7:procesoGlobal=ID_MOVE_DOWN; break;
		                case 8:procesoGlobal=ID_ANGLEX_PLUS; break;
                		case 9:procesoGlobal=ID_ANGLEX_MINUS; break;
		                case 10:procesoGlobal=ID_ANGLEY_PLUS; break;
                		case 11:procesoGlobal=ID_ANGLEY_MINUS; break;
		                case 12:procesoGlobal=ID_ANGLEZ_PLUS; break;
                		case 13:procesoGlobal=ID_ANGLEZ_MINUS; break;
		                case 14: break;
                		case 15:procesoGlobal=ID_EXAMPLE; break;
		                case 16: procesoGlobal=ID_ERASE; break;
                		}
                	}

                        // HERRAMIENTAS PRINCIPAL --------------------------------------------------------
                        colorMarcoMenu=1;
                        anchoCuadroMenu=20;
                        altoCuadroMenu=15;
                        menuArribaX=10;
                        menuArribaY=2;
                	for(con=0;con<28;con++)
                	{
                        int xm1, ym1, xm2, ym2;
                        xm1=menuArribaX+con*anchoCuadroMenu*2+1;
                        xm2=menuArribaX+con*anchoCuadroMenu*2+37+1;
                        ym1=menuArribaY+2;
                        ym2=menuArribaY+19+2;
                        if(xMouse>xm1&&yMouse>ym1&&xMouse<xm2&&yMouse<ym2)
                	switch(con){
		                case 0: procesoGlobal=ID_SCRIPT; break;
                		case 1: break;
		                case 2: /*procesoGlobal=ID_GUARDA;*/ break;
                		case 3: break;
		                case 4:procesoGlobal=OP_MENU14; break;//principalTool=ID_PINCEL;
                		case 5:procesoGlobal=ID_EFECTO;  principalTool=ID_EFECTO; break;//dibuja20x38(efecto,con,0);
		                case 6:procesoGlobal=OP_MENU13; break;//principalTool=ID_AIRBRUSH;
                                case 7:{procesoGlobal=ID_CUENTAGOTAS;//CUENTAGOTAS
                                        lastTool=principalTool;
                                        principalTool=ID_CUENTAGOTAS;
                                        }break;
                                case 8: break;//dibuja20x38(goma,con,0);
                                //case 9:procesoGlobal=ID_LINEA; break;//LINEA//principalTool=ID_LINEA;
                                case 9: procesoGlobal=FIG_GEOM; principalTool=FIG_GEOM; break;//LINEA//principalTool=ID_LINEA;
                                case 10:break;//dibuja20x38(rectangle,con,0);
                                case 11:break;//dibuja20x38(ellipse,con,0);
                                case 12:break; //dibuja20x38(polig,con,0);
                                case 13:break;
                                case 14:break;//dibuja20x38(screen3D,con,0);
                                case 15:break;//dibuja20x38(screen3D,con,0);
                                case 16:procesoGlobal= ID_LAYER_SHOW;break;//procesoGlobal=ID_LAYER;
                                case 17://procesoGlobal=ID_LAYER;//LAYER//dibuja20x38(layer,con,0);
                                        //procesoGlobal= ID_NEXTLAYER;
                                        //procesoGlobal= ID_LAYER_SHOW;
                                        procesoGlobal= ID_OPEN_LAYER;
                                        break;

//---------------------- HERRAMIENTAS SECUNDARIO -------------------------------------
                                case 19:                                                       //rejilla, radial, siguiente, incremento, color
                                       switch(principalTool)                                   // cuadrado, redondo, rastrillo, diag izq, diag der, ovalado
                                                {
                                                case ID_PINCEL: dibujaSIoNO=1;outext("brocha              ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_GUARDA: dibujaSIoNO=1;outext("guardar 2d          ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_LAYER: dibujaSIoNO=1; outext("rejilla             ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_EDIT: dibujaSIoNO=1;  outext("editar layer        ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_EFECTO: dibujaSIoNO=1;outext("contraste           ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;
                                case 20:
                                       switch(principalTool)
                                                {
                                                case ID_PINCEL: dibujaSIoNO=1;outext("acuarela            ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_GUARDA: dibujaSIoNO=1;outext("guarda 3d           ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_LAYER: dibujaSIoNO=1; outext("radial              ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_EDIT: dibujaSIoNO=1;  outext("editar script       ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_EFECTO: dibujaSIoNO=1;outext("resta               ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;
                                case 21:
                                       switch(principalTool)
                                                {
                                                case ID_PINCEL: dibujaSIoNO=1;outext("oleo                ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_GUARDA: dibujaSIoNO=1;outext("guarda layer        ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_LAYER: dibujaSIoNO=1; outext("radial z fijo       ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;secondaryTool= RADIALZFIJO;procesoGlobal=RADIALZFIJO;break;
                                                case ID_EFECTO: dibujaSIoNO=1;outext("negativo            ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;
                                case 22:
                                       switch(principalTool)
                                                {
                                                case ID_PINCEL: principalTool=ID_AIRBRUSH;procesoGlobal=OP_MENU13;
                                                        ayCambio=1;
                                                        dibujaSIoNO=1;outext("air brush           ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;//principalTool=ID_AIRBRUSH;
                                                case ID_GUARDA: dibujaSIoNO=1;outext("guarda grupo layers ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_LAYER: dibujaSIoNO=1; outext("incremento layer z  ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_EFECTO: dibujaSIoNO=1;outext("alargar pincelada   ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;
                                case 23:
                                       switch(principalTool)
                                                {
                                                case ID_PINCEL: dibujaSIoNO=1;outext("pastel              ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_GUARDA: dibujaSIoNO=1;outext("guarda bmp          ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_LAYER_CREA_TERMINARADIAL:
                                                case ID_LAYER: dibujaSIoNO=1; outext("crea nodos radiales ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;
                                                        //xM=xMouse;yM=yMouse;
                                                        procesoGlobal=ID_LAYER_CREA;//ly.creaLayerRadial();
                                                        break;
                                                } break;

                                case 24:
                                       switch(principalTool)
                                                {
                                                case ID_PINCEL: dibujaSIoNO=1;outext("gis                 ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_GUARDA: dibujaSIoNO=1;outext("guarda script       ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_LAYER: dibujaSIoNO=1; outext("incremento radial  ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;

                                case 25:
                                       switch(principalTool)
                                                {
                                                case ID_PINCEL: dibujaSIoNO=1;outext("carboncillo        ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_LAYER: dibujaSIoNO=1; outext("valor z individual ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;
                                case 26:
                                       switch(principalTool)
                                                {
                                                case ID_LAYER: dibujaSIoNO=1; outext("abre layer original ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;
                                                procesoGlobal=ID_EDIT_LAYER_PUNTOSARADIAL; break;
                                                } break;
                                case 27:
                                       switch(principalTool)
                                                {
                                                case ID_LAYER: dibujaSIoNO=1; outext("suaviza color x100 ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;


                                }
                        }

                        // PRINCIPAL ABAJO --------------------------------------------------------
                        colorMarcoMenu=1;
                        anchoCuadroMenu=20;
                        altoCuadroMenu=15;
                        //menuArribaX=170;
                        menuArribaY=24;

                	for(con=0;con<4;con++)
                	{
                        int xm1, ym1, xm2, ym2;
                        xm1=menuArribaX+con*anchoCuadroMenu*2+1;    // 10 + 2*20*2 + 3
                        xm2=menuArribaX+con*anchoCuadroMenu*2+38; // 10 + 2*20*2 +38 = 128
                        ym1=menuArribaY+2;
                        ym2=menuArribaY+19+2;

                        if(xMouse>xm1&&yMouse>ym1&&xMouse<xm2&&yMouse<ym2)
                	switch(con){
		                case 0: break;
                		case 1: break;
                		case 2: procesoGlobal=ID_GUARDA; principalTool=ID_GUARDA; break; // 97 27
                		case 3: break;
                                }
                        }

                        // VALORES ARRIBA --------------------------------------------------------
                	for(con=8;con<36;con++)
                	{
                        int xm1, ym1, xm2, ym2;
                        xm1=menuArribaX+con*anchoCuadroMenu+1;    // 10 + 2*20 +1 = 51
                        xm2=menuArribaX+con*anchoCuadroMenu+18+1; // 10 + 2*20 +19= 69
                        ym1=menuArribaY+2;
                        ym2=menuArribaY+19+2;

                        if(xMouse>xm1&&yMouse>ym1&&xMouse<xm2&&yMouse<ym2)
                	switch(con){
		                case 8:procesoGlobal=OP_MENU15; break;//dibuja10x10(masGrandePincel,con,0);
                                case 9:procesoGlobal=OP_MENU16; break;//dibuja10x10(masChicoPincel,con,0);
		                case 10: break;//dibuja10x10(masGrandePincel,con,0);
                                case 11: break;//dibuja10x10(masChicoPincel,con,0);
                                case 12: dimAirBrush+=3; break;//cantAirBrush=20,
                                case 13: if(dimAirBrush>3)dimAirBrush-=3; break;//dibuja10x10(masChicoPincel,con,0);
                                case 14: break;//dibuja10x10(masGrandePincel,con,0);
                                case 15: break;//dibuja10x10(masChicoPincel,con,0);
                                case 16: break;//dibuja10x10(masGrandePincel,con,0);
                                case 17: break;//dibuja10x10(masChicoPincel,con,0);
                                case 18: break;//dibuja10x10(masGrandePincel,con,0);
                                case 19: break;//dibuja10x10(masChicoPincel,con,0);
                                case 20: break;//dibuja10x10(masGrandePincel,con,0);
                                case 21: break;//dibuja10x10(masChicoPincel,con,0);
                                case 22: break;//dibuja10x10(masGrandePincel,con,0);
                                case 23: break;//dibuja10x10(masChicoPincel,con,0);
                                case 24: break;//dibuja10x10(masGrandePincel,con,0);
                                case 25: break;//dibuja10x10(masChicoPincel,con,0);

                                case 30:procesoGlobal=OP_MENU4;break;//dibuja10x10(masRojo10,con,0);
                                case 31:procesoGlobal=OP_MENU5;break;//dibuja10x10(masVerde10,con,0);
                                case 32:procesoGlobal=OP_MENU6;break;//dibuja10x10(masAzul10,con,0);
                                case 33:procesoGlobal=OP_MENU10;break;//dibuja10x10(menosRojo10,con,0);
                                case 34:procesoGlobal=OP_MENU11;break;//dibuja10x10(menosVerde10,con,0);
                                case 35:procesoGlobal=OP_MENU12;break;//dibuja10x10(menosAzul10,con,0);
                                }
                        }

                        // VALORES ABAJO --------------------------------------------------------
                        menuArribaY=39;
                        menuArribaX=170;
                	for(con=0;con<28;con++)
                	{
                        int xm1, ym1, xm2, ym2;
                        xm1=menuArribaX+con*anchoCuadroMenu+1;   // 613 41 ::: 10 + 22*20 + 1 = 451
                        xm2=menuArribaX+con*anchoCuadroMenu+18+1;          // 170 + 440 + 1 = 611 // 613 - 441 = 172
                        ym1=menuArribaY+2;
                        ym2=menuArribaY+19+2;
                        if(xMouse>xm1&&yMouse>ym1&&xMouse<xm2&&yMouse<ym2)
                	switch(con){
		                case 0: break;//dibuja10x10(masGrandePincel,con,0);
                                case 1: break;//dibuja10x10(masChicoPincel,con,0);
		                case 2: break;//dibuja10x10(masGrandePincel,con,0);
                                case 3: break;//dibuja10x10(masChicoPincel,con,0);
                                case 4: cantAirBrush+=15; break;//dibuja10x10(masGrandePincel,con,0);
                                case 5: if(cantAirBrush>15) cantAirBrush-=15; break;//dibuja10x10(masChicoPincel,con,0);
                                case 6: break;//dibuja10x10(masGrandePincel,con,0);
                                case 7: break;//dibuja10x10(masChicoPincel,con,0);

                                case 22: procesoGlobal=OP_MENU1; break;//dibuja10x10(masRojo1,con,0);
                                case 23: procesoGlobal=OP_MENU2;break;//dibuja10x10(masVerde1,con,0);
                                case 24: procesoGlobal=OP_MENU3;break;//dibuja10x10(masAzul1,con,0);
                                case 25: procesoGlobal=OP_MENU7;
                                         //if(ActRed>0)ActRed--; color = RGB(ActRed,ActGreen,ActBlue);
                                         break;//dibuja10x10(menosRojo1,con,0);
                                case 26: procesoGlobal=OP_MENU8;
                                         //if(ActGreen>0)ActGreen--; color = RGB(ActRed,ActGreen,ActBlue);
                                         break;//dibuja10x10(menosVerde1,con,0);
                                case 27: procesoGlobal=OP_MENU9;
                                         //if(ActBlue>0)ActBlue--; color = RGB(ActRed,ActGreen,ActBlue);
                                         break;//dibuja10x10(menosAzul1,con,0);
                                }
                        }

                        // PRINCIPAL TOOL --------------------------------------------------------
                        if(xMouse>MINXDIB&&xMouse<MAXXDIB&&yMouse>MINYDIB&&yMouse<MAXYDIB)
                        switch(principalTool)
                           {
                           case ID_SCRIPT:
                                xMousScriptAnt=xMousScript; yMousScriptAnt=yMousScript;
                                xMousScript= xMouse;yMousScript= yMouse; //procesoGlobal= ID_POS_SCRIPT;
                                linea2D(GUARDA,xMousScriptAnt+1,yMousScriptAnt+1,xMousScript+1,yMousScript+1,ActRed, ActGreen, ActBlue);
                                procesoGlobal=ID_GUARDA_TEMP_SCRIPT;
                                break;
                           case ID_AIRBRUSH:
                                procesoGlobal=ID_AIRBRUSH_EXE;
                                //dibujaSIoNO=0;
                                //airBrush(0, cantAirBrush, dimAirBrush, color, xMouse, yMouse);
                                break;
                           case ID_CUENTAGOTAS:
                                {
                                colores cols;
                                cols=get_pixel(xMouse, yMouse);
                                ActBlue=cols.blueCol;
                                ActGreen=cols.greenCol;
                                ActRed=cols.redCol;
                                color=RGB(ActRed,ActGreen,ActBlue);
                                principalTool=lastTool;
                                } //principalTool=0;
                                break;
                           case ID_PINCEL:
                                //pincel(0,gruesoPincel,color, xMouse, yMouse);
                                procesoGlobal=ID_PINTAPINCEL;
                                break;
                           case ID_LINEA:
                                numPointsLine++;
                                pointX[numPointsLine]=xMouse;
                                pointY[numPointsLine]=yMouse;
                                if(pointX[numPointsLine]==pointX[numPointsLine-1]&&pointY[numPointsLine]==pointY[numPointsLine-1])
                                        {principalTool=0; numPointsLine=0; break;}

                                if(numPointsLine>1&&numPointsLine<MAXLINEASTODO)
                                        linea2D(GUARDA,pointX[numPointsLine-1],pointY[numPointsLine-1],pointX[numPointsLine],pointY[numPointsLine],ActRed, ActGreen, ActBlue);
                                        //displayLineYX(GUARDA,pointX[numPointsLine-1],pointY[numPointsLine-1],pointX[numPointsLine],pointY[numPointsLine],ActRed, ActGreen, ActBlue);
                                        //lineaPuntual2D(GUARDA,pointX[numPointsLine-1],pointY[numPointsLine-1],pointX[numPointsLine],pointY[numPointsLine],ActRed, ActGreen, ActBlue);
                                        //lineaPuntual2D(GUARDA,100,100,200,200,ActRed, ActGreen, ActBlue);
                                break;

                           case ID_LAYER://xM= coordX*factorConvLayer; yM= 777-coordY*factorConvLayer
                                pointX[numPointsLayer]=(double)xMouse/factorConvLayer;
                                pointY[numPointsLayer]=(double)((double)(777-yMouse))/factorConvLayer;
                                pointZ[numPointsLayer]=incrLayerZ;
                                arrXMouse[numPointsLayer]=(double)xMouse;
                                arrYMouse[numPointsLayer]=(double)yMouse;

                                if(numPointsLayer>0)
                                if(pointX[numPointsLayer]==pointX[numPointsLayer-1]&&pointY[numPointsLayer]==pointY[numPointsLayer-1])
                                        {FILE *out;
                                        if ((out = fopen("layerTemp.txt", "a"))== NULL)
                                           {fprintf(stderr, "Cannot open layerTemp.txt.");return 1;}
                                        int i=0;
                                        while( i<numPointsLayer )
                                                fprintf(out,"%f,%f,%f\n",pointX[i],pointY[i],pointZ[i++]);
                                        fclose(out);
                                        principalTool=0; numPointsLayer=0;
                                        break;
                                        }
                                if(numPointsLayer>0&&numPointsLayer<MAXLINEASTODO)
                                        {
                                        linea2D(GUARDA,arrXMouse[numPointsLayer-1],arrYMouse[numPointsLayer-1],arrXMouse[numPointsLayer],arrYMouse[numPointsLayer],ActRed, ActGreen, ActBlue);
                                        procesoGlobal=ID_DIBUJALIN3D;
                                        break;
                                        }
                                numPointsLayer++;
                                break;

                           case ID_LAYER_CREA: xM=xMouse;yM=yMouse; procesoGlobal=ID_LAYER_CREA_TERMINARADIAL; break;
                           }
                        break;
                case WM_RBUTTONDOWN:
                        flag = true;
                        xMouse = LOWORD(lParam);
                        yMouse = HIWORD(lParam);
                        break;
                case WM_LBUTTONUP: flag = false;  break;  // Sets the flag to false so that we know the right mouse button was released
                case WM_RBUTTONUP: flag = false;  break;  // Controls the mouse movement and shows its current position on the Window title
                case WM_MOUSEMOVE:
                        if(flag)
                        {
                        AnsiString strTitle;
                        xMouse = LOWORD(lParam);
                        yMouse = HIWORD(lParam);
                        switch(principalTool)
                           {
                           case 0: break;
                           case ID_SCRIPT:
                                xMousScriptAnt=xMousScript; yMousScriptAnt=yMousScript;
                                xMousScript= xMouse;yMousScript= yMouse; //procesoGlobal= ID_POS_SCRIPT;
                                linea2D(GUARDA,xMousScriptAnt+1,yMousScriptAnt+1,xMousScript+1,yMousScript+1,ActRed, ActGreen, ActBlue);
                                procesoGlobal=ID_GUARDA_TEMP_SCRIPT;
                                break;
                           case ID_AIRBRUSH: procesoGlobal=ID_AIRBRUSH_EXE; break;
                           case ID_PINCEL:
                                procesoGlobal=PINTANDO_PINCEL;
                                break;
                           }
                        }
                        else
                        {
                        AnsiString strTitle;
                        xMouse = LOWORD(lParam);
                        yMouse = HIWORD(lParam);
                        }
                break;

//END MOUSE EVENTS--------------------------------------------

                //case 'k': dibujaSIoNO=1; outext("herr k              ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0; break;
                //case VK_RETURN:dibujaSIoNO=1; outext("herr k              ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0; break;
                //
                //case OnKeyDown:dibujaSIoNO=1; outext("herr k              ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0; break;

		default: return DefWindowProc(hwnd, Message, wParam, lParam);
	}
	return 0;
};

//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
	LPSTR lpCmdLine, int nCmdShow){

	WNDCLASSEX wc;
	HWND hwnd;
	MSG Msg;
        TerceraDimension td;
        GraficosMenu gm;
        Layer lay;
        Colors col;
        Fonts fs;
        Redibuja rd;
        Script sc;
        Dibujando db;

        wc.cbSize	 = sizeof(WNDCLASSEX);
	wc.style	 = 0;
	wc.lpfnWndProc	 = WndProc;
	wc.cbClsExtra	 = 0;
	wc.cbWndExtra	 = 0;
	wc.hInstance	 = hInstance;
	wc.hIcon	 = NULL;
	wc.hCursor	 = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wc.lpszMenuName  = NULL;
	wc.lpszClassName = g_szClassName;
	wc.hIconSm	 = NULL;

	if(!RegisterClassEx(&wc))
	{
		MessageBox(NULL, "Window Registration Failed!", "Error!",
			MB_ICONEXCLAMATION | MB_OK);
		return 0;
	}
	hwnd = CreateWindowEx(
		WS_EX_CLIENTEDGE,
		g_szClassName,
		"Editor 3d",
		WS_OVERLAPPEDWINDOW,
                CW_USEDEFAULT, CW_USEDEFAULT, GETMAXX, GETMAXY,
		NULL, NULL, hInstance, NULL);
	if(hwnd == NULL)
	{
		MessageBox(NULL, "Window Creation Failed!", "Error!",
			MB_ICONEXCLAMATION | MB_OK);
		return 0;
	}
	ShowWindow(hwnd, nCmdShow);
	UpdateWindow(hwnd);

td.distejpanx1 = 50;
td.distejpanz1 = 3;
td.distejpany1 = 0;
td.angejex=3.141592654/8.0;
//td.angejex=3.141592654;


ActRed=0, ActGreen=0, ActBlue=0;
color = RGB(ActRed,ActGreen,ActBlue);

td.alf_iGl=0;      td.bet_iGl=PI/2;td.gam_iGl=PI/2;
td.alf_jGl=PI/2;   td.bet_jGl=0;   td.gam_jGl=PI/2;
td.alf_kGl=PI+PI/2;td.bet_kGl=PI/2;td.gam_kGl=0;
td.alf_iRel=0;      td.bet_iRel=PI/2;td.gam_iRel=PI/2;
td.alf_jRel=PI/2;   td.bet_jRel=0;   td.gam_jRel=PI/2;
td.alf_kRel=PI/2;   td.bet_kRel=PI/2;td.gam_kRel=0;
td.xAbs=0;td.yAbs=0;td.zAbs=0;

td.alf_iAnt=td.alf_iGl;td.bet_iAnt=td.bet_iGl;td.gam_iAnt=td.gam_iGl;
td.alf_jAnt=td.alf_jGl;td.bet_jAnt=td.bet_jGl;td.gam_jAnt=td.gam_jGl;
td.alf_kAnt=td.alf_kGl;td.bet_kAnt=td.bet_kGl;td.gam_kAnt=td.gam_kGl;

cantAirBrush=150, dimAirBrush=10;

int axR=5,axB=20,axG=20;
int axRR=5,axRB=20,axRG=20;
int i=0,j=0;
/*
xMenu1=15;yMenu1=15; xMenu2=33;yMenu2=33;
xMenu3=35;yMenu3=15; xMenu4=53;yMenu4=33;
xMenu5=55;yMenu5=15; xMenu6=73;yMenu6=33;
xMenu7=75;yMenu7=15; xMenu8=93;yMenu8=33;
xMenu9=95;yMenu9=15; xMenu10=113;yMenu10=33;
xMenu11=115;yMenu11=15; xMenu12=133;yMenu12=33;

xMenu15=15;yMenu15=35; xMenu16=33;yMenu16=53;
xMenu17=35;yMenu17=35; xMenu18=53;yMenu18=53;
xMenu19=55;yMenu19=35; xMenu20=73;yMenu20=53;
xMenu21=75;yMenu21=35; xMenu22=93;yMenu22=53;
xMenu23=95;yMenu23=35; xMenu24=113;yMenu24=53;
xMenu25=115;yMenu25=35; xMenu26=133;yMenu26=53;*/

xMenu13=135;yMenu13=15; xMenu14=153;yMenu14=53;

numPointsLine=0;
numPointsLayer=0;

for(i=0;i<MAXLINEASTODO;i++)
        {pointX[i]=0; pointY[i]=0; pointZ[i]=0;}

dibujaSIoNO=0;

int dibujaLinea=0;
int herramienta=0;

        {

        int i=0,j=0;
        matRed=(int**)malloc(GETMAXY*sizeof(int*));
        for(i=0;i<GETMAXX;i++)
	        matRed[i]=(int*)malloc(GETMAXX*sizeof(int));

        matGreen=(int**)malloc(GETMAXY*sizeof(int*));
        for(i=0;i<GETMAXX;i++)
	        matGreen[i]=(int*)malloc(GETMAXX*sizeof(int));

        matBlue=(int**)malloc(GETMAXY*sizeof(int*));
        for(i=0;i<GETMAXX;i++)
	        matBlue[i]=(int*)malloc(GETMAXX*sizeof(int));

        int e=255;
        for(i=0;i<GETMAXY;i++)
	        for(j=0;j<GETMAXX;j++)
		        {
			matRed[i][j]=e;
                        matGreen[i][j]=e;
                        matBlue[i][j]=e;
        		}
        }

procesoGlobal= ID_REDRAWMENUS;
int xMouseAnt=0, yMouseAnt=0;
int posTextMouseX=10,posTextMouseY=53;
int escribio=0;
int ActRedAnt=0,ActGreenAnt=0,ActBlueAnt=0;
lay.incrNodosRadiales=.05;

	while(GetMessage(&Msg, NULL, 0, 0) > 0)
	{
		TranslateMessage(&Msg);
		DispatchMessage(&Msg);
                dibujaSIoNO=0;

                colorMarcoMenu=1;
                anchoCuadroMenu=20;
                altoCuadroMenu=15;
                menuArribaX=10;
                menuArribaY=55;

                if(xMouse>MINXDIB&&xMouse<MAXXDIB&&yMouse>MINYDIB&&yMouse<MAXYDIB)
                        {dibujaSIoNO=1;outext("                    ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;}

                if((xMouse!=xMouseAnt)||(yMouse!=yMouseAnt))
                        {
                        int i,j;
                        dibujaSIoNO=1;
                        for(i=posTextMouseX;i<posTextMouseX+80;i++)
                        for(j=posTextMouseY+4;j<posTextMouseY+16;j++)
                                put_pixel(200,200,200,i,j);
                        fs.outextInt(xMouse,posTextMouseX,posTextMouseY,0,0,0);
                        fs.outextInt(yMouse,posTextMouseX+50,posTextMouseY,0,0,0);
                        xMouseAnt=xMouse;yMouseAnt=yMouse;
                        dibujaSIoNO=0;
                        }

                        // ETIQUETAS DEL MENÚ ----------------------------------------------
                        colorMarcoMenu=1;
                        anchoCuadroMenu=20;
                        altoCuadroMenu=15;
                        menuArribaX=10;
                        menuArribaY=55;
                        register int con;
                        for(con=0;con<17;con++)
                	{
                        int xm1, ym1, xm2, ym2;
                        xm1=menuArribaX+con*anchoCuadroMenu*2+1;
                        xm2=menuArribaX+con*anchoCuadroMenu*2+36+1;
                        ym1=menuArribaY+2;
                        ym2=menuArribaY+18+2;
                        if(xMouse>xm1&&yMouse>ym1&&xMouse<xm2&&yMouse<ym2)
                	switch(con){
		                case 0:  break;
                		case 1:  break;
		                case 2:if(escribio==1)break;escribio=1;dibujaSIoNO=1;outext("+ lejos             ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                		case 3:if(escribio==2)break;escribio=2;dibujaSIoNO=1;outext("+ cerca             ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
		                case 4:if(escribio==3)break;escribio=3;dibujaSIoNO=1;outext("izquierda           ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                		case 5:if(escribio==4)break;escribio=4;dibujaSIoNO=1;outext("derecha             ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
		                case 6:if(escribio==5)break;escribio=5;dibujaSIoNO=1;outext("arriba              ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                		case 7:if(escribio==6)break;escribio=6;dibujaSIoNO=1;outext("abajo               ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
//		                case 8:  break;
//                		case 9:  break;
		                case 8:if(escribio==7)break;escribio=7;dibujaSIoNO=1;outext("angulo x +          ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                		case 9:if(escribio==8)break;escribio=8;dibujaSIoNO=1;outext("angulo x -          ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
		                case 10:if(escribio==9)break;escribio=9;dibujaSIoNO=1;outext("angulo y +          ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                		case 11:if(escribio==10)break;escribio=10;dibujaSIoNO=1;outext("angulo x -          ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
		                case 12:if(escribio==11)break;escribio=11;dibujaSIoNO=1;outext("angulo z +          ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                		case 13:if(escribio==12)break;escribio=12;dibujaSIoNO=1;outext("angulo z -          ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
		                case 14: break;
                		case 15:if(escribio==13)break;escribio=13;dibujaSIoNO=1;outext("ejemplo             ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
		                case 16:if(escribio==14)break;escribio=14;dibujaSIoNO=1;outext("borra ejemplo       ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                		}
                	}
                        // HERRAMIENTAS PRINCIPAL --------------------------------------------------------
                        colorMarcoMenu=1;
                        anchoCuadroMenu=20;
                        altoCuadroMenu=15;
                        menuArribaX=10;
                        menuArribaY=2;
                	for(con=0;con<28;con++)
                	{
                        int xm1, ym1, xm2, ym2;
                        xm1=menuArribaX+con*anchoCuadroMenu*2+1;
                        xm2=menuArribaX+con*anchoCuadroMenu*2+37+1;
                        ym1=menuArribaY+2;
                        ym2=menuArribaY+19+2;
                        if(xMouse>xm1&&yMouse>ym1&&xMouse<xm2&&yMouse<ym2)
                	switch(con){
		                case 0: if(escribio==15)break;escribio=15;dibujaSIoNO=1;outext("script              ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                		case 1: if(escribio==16)break;escribio=16;break;
		                case 2: if(escribio==17)break;escribio=17;/*procesoGlobal=ID_GUARDA;*/ break;
                		case 3: if(escribio==18)break;escribio=18;break;
		                case 4:if(escribio==19)break;escribio=19;dibujaSIoNO=1;outext("pincel              ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                		case 5:if(escribio==20)break;escribio=20;dibujaSIoNO=1;outext("efecto              ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
		                case 6:if(escribio==21)break;escribio=21;dibujaSIoNO=1;outext("air brush           ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                case 7:if(escribio==22)break;escribio=22;dibujaSIoNO=1;outext("cuenta gotas        ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                case 8:if(escribio==23)break;escribio=23;dibujaSIoNO=1;outext("goma                ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                case 9:if(escribio==24)break;escribio=24;dibujaSIoNO=1;outext("figuras geometricas ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                case 10:if(escribio==25)break;escribio=25;break;//dibuja20x38(rectangle,con,0);
                                case 11:if(escribio==26)break;escribio=26;break;//dibuja20x38(ellipse,con,0);
                                case 12:if(escribio==27)break;escribio=27;break; //dibuja20x38(polig,con,0);
                                case 13:if(escribio==28)break;escribio=28;break;
                                case 14:if(escribio==29)break;escribio=29;break;//dibuja20x38(screen3D,con,0);
                                case 15:if(escribio==30)break;escribio=30;break;//dibuja20x38(screen3D,con,0);
                                case 16:if(escribio==31)break;escribio=31;dibujaSIoNO=1;outext("layer               ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                case 17:if(escribio==32)break;escribio=32;dibujaSIoNO=1;outext("abre layer screen   ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                }

                        //---------------------- HERRAMIENTAS SECUNDARIO -------------------------------------
                        if(xMouse>xm1+7&&yMouse>ym1&&xMouse<xm2+7&&yMouse<ym2)
                	switch(con){
                                case 19:                                                       //rejilla, radial, siguiente, incremento, color
                                       switch(principalTool)                                   // cuadrado, redondo, rastrillo, diag izq, diag der, ovalado
                                                {
                                                case ID_PINCEL: if(escribio==33)break;escribio=33;dibujaSIoNO=1;outext("pincel cuadrado     ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_GUARDA: if(escribio==34)break;escribio=34;dibujaSIoNO=1;outext("guardar 2d          ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_LAYER: if(escribio==35)break;escribio=35;dibujaSIoNO=1; outext("rejilla             ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_EDIT: if(escribio==36)break;escribio=36;dibujaSIoNO=1;  outext("editar layer        ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_EFECTO: if(escribio==37)break;escribio=37;dibujaSIoNO=1;outext("contraste           ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;
                                case 20:
                                       switch(principalTool)
                                                {
                                                case ID_PINCEL: if(escribio==38)break;escribio=38;dibujaSIoNO=1;outext("pincel redondo      ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_GUARDA: if(escribio==39)break;escribio=39;dibujaSIoNO=1;outext("guarda 3d           ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_LAYER: if(escribio==40)break;escribio=40;dibujaSIoNO=1; outext("radial              ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_EDIT: if(escribio==41)break;escribio=41;dibujaSIoNO=1;  outext("editar script       ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_EFECTO: if(escribio==42)break;escribio=42;dibujaSIoNO=1;outext("resta               ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;
                                case 21:
                                       switch(principalTool)
                                                {
                                                case ID_PINCEL: if(escribio==43)break;escribio=43;dibujaSIoNO=1;outext("pincel rastrillo    ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_GUARDA: if(escribio==44)break;escribio=44;dibujaSIoNO=1;outext("guarda layer        ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_LAYER: if(escribio==45)break;escribio=45;dibujaSIoNO=1; outext("siguiente layer     ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_EFECTO: if(escribio==46)break;escribio=46;dibujaSIoNO=1;outext("negativo            ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;
                                case 22:
                                       switch(principalTool)
                                                {
                                                case ID_PINCEL: if(escribio==47)break;escribio=47;dibujaSIoNO=1;outext("pincel diagonal izq ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_GUARDA: if(escribio==48)break;escribio=48;dibujaSIoNO=1;outext("guarda grupo layers ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_LAYER: if(escribio==49)break;escribio=49;dibujaSIoNO=1; outext("incremento layer z  ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_EFECTO: if(escribio==50)break;escribio=50;dibujaSIoNO=1;outext("alargar pincelada   ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;
                                case 23:
                                       switch(principalTool)
                                                {
                                                case ID_PINCEL: if(escribio==51)break;escribio=51;dibujaSIoNO=1;outext("pincel diagonal der ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_GUARDA: if(escribio==52)break;escribio=52;dibujaSIoNO=1;outext("guarda bmp          ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                //case ID_LAYER_CREA_TERMINARADIAL:
                                                case ID_LAYER: if(escribio==53)break;escribio=53;dibujaSIoNO=1; outext("pts layer radial    ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;

                                case 24:
                                       switch(principalTool)
                                                {
                                                case ID_PINCEL: if(escribio==54)break;escribio=54;dibujaSIoNO=1;outext("pincel ovalado hor  ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_GUARDA: if(escribio==55)break;escribio=55;dibujaSIoNO=1;outext("guarda script       ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_LAYER: if(escribio==56)break;escribio=56;dibujaSIoNO=1; outext("incremento radial   ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;

                                case 25:
                                       switch(principalTool)
                                                {
                                                case ID_PINCEL: if(escribio==57)break;escribio=57;dibujaSIoNO=1;outext("pincel ovalado vert",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                case ID_LAYER: if(escribio==58)break;escribio=58;dibujaSIoNO=1; outext("valor z individual ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;
                                case 26:
                                       switch(principalTool)
                                                {
                                                case ID_LAYER: if(escribio==59)break;escribio=59;dibujaSIoNO=1; outext("abre layer original ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;
                                case 27:
                                       switch(principalTool)
                                                {
                                                case ID_LAYER: if(escribio==60)break;escribio=60;dibujaSIoNO=1; outext("suaviza color x100 ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                                                } break;

                                }
                        }

                        // HERRAMIENTAS EN VALORES ARRIBA PRINCIPAL --------------------------------------------------------
                        colorMarcoMenu=1;
                        anchoCuadroMenu=20;
                        altoCuadroMenu=15;
                        //menuArribaX=170;
                        menuArribaY=24;

                	for(con=0;con<4;con++)
                	{
                        int xm1, ym1, xm2, ym2;
                        xm1=menuArribaX+con*anchoCuadroMenu*2+1;    // 10 + 2*20*2 + 3
                        xm2=menuArribaX+con*anchoCuadroMenu*2+38; // 10 + 2*20*2 +38 = 128
                        ym1=menuArribaY+2;
                        ym2=menuArribaY+19+2;

                        if(xMouse>xm1&&yMouse>ym1&&xMouse<xm2&&yMouse<ym2)
                	switch(con){
		                case 0: break;
                		case 1: break;
                		case 2: if(escribio==56)break;escribio=56;dibujaSIoNO=1; outext("guardar             ",10,POS_Y_ESTADO1,0,0,0);dibujaSIoNO=0;break;
                		case 3: break;
                                }
                        }

                //=================================================================================================
                //===================================