Foros del Web » Programación para mayores de 30 ;) » Programación General »

Programcion de graficos..

Estas en el tema de Programcion de graficos.. en el foro de Programación General en Foros del Web. Hola que tal queria ver si alguie sabe bien del tema, queria meterme con programacion mas del tipo grafico pero no de juegos exactamente mas ...
  #1 (permalink)  
Antiguo 28/05/2011, 23:59
 
Fecha de Ingreso: junio-2009
Mensajes: 117
Antigüedad: 14 años, 10 meses
Puntos: 3
Programcion de graficos..

Hola que tal queria ver si alguie sabe bien del tema, queria meterme con programacion mas del tipo grafico pero no de juegos exactamente mas de este tipo:

http://www.softdistrict.com/wp-conte...l-software.jpg

por ejemplo software del tipo medico q se manejan con graficos, imagenes etc, o tambin tipo esto:

http://home.pacbell.net/mariusm/netstumbler_big.jpg
la ventanita de abajo que tiene el grafico


no se si me explico, directx no creo q sea la solucion.
Pero bueno.
__________________
Sitio: www.qubitek.com.ar
Uso: www.docstorus.com para mis documentos.
  #2 (permalink)  
Antiguo 29/05/2011, 11:01
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Programcion de graficos..

Existen librerías gráficas para la mayoría de los lenguajes de programación, la mayoría están orientadas a juegos, pero no significa que no puedan ser usados para otros fines, he visto aplicaciones del tipo que mencionas hechas con pygame una librería para desarrollo de juegos en python, y lo mismo con Java2D.

Por ejemplo en pyton está pygame, pyOpengl e incluso puedes usar wxPython. En java como te comenté puedes usar Java2D, Java3D, JOGL, JGL. También hay librerías multiplataforma como SDL, que además la puedes usar en varios lenguajes.

Saludos
__________________
Grupo Telegram Docker en Español
  #3 (permalink)  
Antiguo 29/05/2011, 20:19
 
Fecha de Ingreso: agosto-2009
Mensajes: 23
Antigüedad: 14 años, 8 meses
Puntos: 2
De acuerdo Respuesta: Programcion de graficos..

Holas;

Algo importante, en que lenguaje estas programando visual basic, c++, delphi, cual????.

Si quieres graficos del tipo medico, estos se obtienen mediante algoritmos matematicos bastantes complejos para obtener este tipo de imagen, mostrarlas en el form, el imprimir es algo mas facil, ya que solo lees los puntos su color y de ahi a un archivo de imagen.

Si es en WINAPI, debes manejar las separaciones de ecritorios, definir tamaño, ubicación, todo eso en el procedimiento paint WM_PAINT.

En el otro tipo de graficos de tipo barras, puntos, etc. es el mismo principio que el anterior caso, con la salvedad, que este es más facil de realizar, los ejes, tipo de puntos, crus estrellas, color, etc. Es programado en el evento WM_PAINT, escoger el tipo de brocha, colores, inicio y fin de punto, los numeros de klos ejes, titulos de ejes en sentido vertival u horizontal, todo se programa desde codigo.

En este sentido al realizarlo en WINAPI o Win32 en C ó C++, es más facil que en visual basic que necesitas de activeX, en winapi solo utilizas el kernel del windows para realizarlo en cuanto al personalizarlo.

Este es un ejemplo de graficar con WinApi y utilizando funciones de C y C++:

Código PHP:
#include <windows.h>
#include <cmath>
#include <cstdlib>
#include "app.h"
#include "win.h"

LRESULT CALLBACK WindowProcedure (HWNDUINTWPARAMLPARAM);

char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hinstHINSTANCE hPrevInstanceLPSTR lpszArgumentint CmdShow)
{
    
MSG msg;
    
//
    
if(!InitApp(hinst,(WNDPROCWindowProcedure,(LPCTSTRszClassName));
    
//
    
if(!InitInstance(hinst,CmdShow,(LPCTSTR)szClassName,650,550));
    
//
    
while (GetMessage (&msgNULL00)) { TranslateMessage(&msg); DispatchMessage(&msg); }
    
//
    
return msg.wParam
}
//-------------------------------------------------------------------------------------------
LRESULT CALLBACK WindowProcedure (HWND hwndUINT messageWPARAM wParamLPARAM lParam)
{
    
    switch (
message)
    {
        case 
WM_CREATE:
            
//-- Etiquetas
            
lbl[0] = MakeControl(3,"Grafico ScattertPlot",5,10,130,18,0,hwnd);
            
//-- Comandos
            
cmd[0] = MakeControl(1,"Graficar",5,100,80,20,100,hwnd);
            
//wnTexto = true;
            
break;
        case 
WM_COMMAND:
            switch(
LOWORD(wParam))
            {
                case 
100:
                    
RECT r;
                    
grafActivo true;
                    
GetClientRect(hwnd, &r);
                    
InvalidateRect(hwnd, &rTRUE);
                    
//graficar(hdc,hwnd);
                    
break;
                case 
110:
                    
RECT r1;
                    
wnTexto true;
                    
GetClientRect(hwnd, &r1);
                    
InvalidateRect(hwnd, &r1TRUE);
                    break;
            }
            break;
        case 
WM_PAINT:
            
hdc BeginPaint(hwnd,&ps);
            if(
wnTexto)
            {
                
texto(hwnd,hdc);
            }
            if(
grafActivo)
            {
                
graficar(hdc,hwnd);
                
//texto(hwnd,hdc);
            
}
            
EndPaint(hwnd,&ps);
            break;
        case 
WM_DESTROY:
            
PostQuitMessage (0);
            break;
        default:
            return 
DefWindowProc (hwndmessagewParamlParam);
    }

    return 
0;

En WM_PAINT, es donde dibujas sobre cualquier control o ventana, se un boton, label, textbox, lo que sea, en visual basic es batsnate mas engorroso tienes que llamar a a las api, etccccc.

Con esto dibujas en una zona determinada de tu form o ventana principal y el resto lo llenas de controles, tal como aparece en la foto de medicina:

Código PHP:
if(grafActivo)
            {
                
graficar(hdc,hwnd);
                
//texto(hwnd,hdc);
            

A continuacion el codigo para dibujar el grafico y las coordenas del dispositivo de contexto en donde dibujaras:

Código PHP:
/*--- Graficar Datos ---*/
void graficar(HDC hdcHWND hwnd)
{
    
//hdc = GetDC(hwnd);
    //COLORREF SetPixel(HDC hdc, int X, int Y, COLORREF crColor);
    
SetMapMode(hdc,MM_ISOTROPIC);
    
SetWindowExtEx(hdc,640,400,NULL);
    
SetViewportExtEx(hdc,550,450,NULL);
    
SetViewportOrgEx(hdc,150,0,NULL);
    
//-eje x / y
    
hCPp CreatePen(PS_SOLID,1,RGB(0,0,255));
    
SelectObject(hdc,hCPp);
    
MoveToEx(hdc,100,50,NULL);
    
LineTo(hdc,100,350);
    
LineTo(hdc,500,350);
    
//-- título gráfico
    /* 1. Fuente Coordenadas X*/
    
hFuente CreateFont(16,12,0,0,FW_BOLD,FALSE,FALSE,FALSE,OEM_CHARSET,
                
OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
                
DEFAULT_PITCH,"Verdana");
    
SetTextColor(hdc,RGB(136106106));
    
TextOut(hdc,(300-(strlen(titulo)*10/2)),15,titulo,strlen(titulo));
    
//-- etiqueta eje X
    
TextOut(hdc,(300-(strlen(label_x)*10/2)),365,label_x,strlen(label_x));
    
//-- marca eje X
    
TextOut(hdc,(500-(2*12/2)),355,"100",3);
    
//-- marca eje Y
    
TextOut(hdc,(90-3*12),45,"100",3);
    
/* 2. Fuente Coordenadas X*/
    
hFuente CreateFont(16,10,900,900,FW_BOLD,FALSE,FALSE,FALSE,OEM_CHARSET,
                 
OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
                 
DEFAULT_PITCH,"Verdana");
    
SelectObject(hdc,hFuente);
    
TextOut(hdc,50,200+(strlen(label_y)*10/2),label_y,strlen(label_y));
    
//-eje x
    
xDat 140;
    for(
i=0;i<10;i++)
    {
       
yDat 350;
       
MoveToEx(hdc,xDat,yDat,NULL);
       
yDat 356;
       
LineTo(hdc,xDat,yDat);
       
xDat+=40;
    }
    
//- eje y
    
yDat 50;
    for(
i=0;i<10;i++)
    {
        
xDat 100;
        
MoveToEx(hdc,xDat,yDat,NULL);
        
xDat 94;
        
LineTo(hdc,xDat,yDat);
        
yDat += 30;
    }
    
//--- Desarrollo Ecuación --------
    /*  Colocar puntos  */
    /*for(i=10;i < 340;i++)
    {
        SetPixel(hdc,100+i,350-(int)(0.0023*(i*i)),RGB(0,0,0));
    }*/
    /*SetPixel(hdc,100+40,350-50,RGB(0,0,0));
    SetPixel(hdc,100+80,350-108,RGB(0,0,0));
    SetPixel(hdc,100+120,350-23,RGB(0,0,0));*/
    
SetBkMode(hdc,TRANSPARENT);
    
SetTextColor(hdc,RGB(220,147,0));
    
TextOut(hdc,(int)(100+40*400/100)-5,(int)(350-10*300/100)+7,"x",1); // 
    
TextOut(hdc,(int)(100+45*400/100)-5,(int)(350-55*300/100)+7,"x",1); // 
    
TextOut(hdc,(int)(100+70*400/100)-5,(int)350-(25*300/100)+7,"x",1);
    
//TextOut(hdc,140+162,350-153,"x",1);
    //--------------------------------
    
DeleteObject(hCPp);
    
DeleteObject(hFuente);
    
//ValidateRect(hwnd,NULL);
    //ReleaseDC(hwnd,hdc);

Con esta funcion dibujas el grafico y estas instrucciones, será donde coloques tu grafico con coordenadas dentro de tu ventana:

Código PHP:
SetMapMode(hdc,MM_ISOTROPIC);
    
SetWindowExtEx(hdc,640,400,NULL);
    
SetViewportExtEx(hdc,550,450,NULL);
    
SetViewportOrgEx(hdc,150,0,NULL); 
SetMapMode= tipo de unidades logicas a manejar, cm, [pulgadas, pixel, etc.
SetWindowExtEx y SetViewportExtEx= corresponden al tamaño que tendra tu grafico y las coordenas donde se dibujará tu gráfico.

Debes saber el uso de las siguientes funciones:

CreatePen
SelectObject
MoveToEx
LineTo
CreateFont
SetTextColor
TextOut
SetPixel
SetBkMode
SetTextColor
DeleteObject
ReleaseDC
BeginPaint
EndPaint
GetClientRect
InvalidateRect
RECT

Aqui tengo el codigo que van en commandbutton y cuando se activa, tira el valor del grafico a True y este dibuja donde le indique:

Código PHP:
case 100:
                    
RECT r;
                    
grafActivo true;
                    
GetClientRect(hwnd, &r);
                    
InvalidateRect(hwnd, &rTRUE);
                    
//graficar(hdc,hwnd);
                    
break; 
grafactivo si te fijas esta en WM_PAINT, de esta manera se dibuja, ahora, lo interesante es que puedes tener varios graficos mostrando datos diferentes y todos actualizandose en tiempo real, si llegan los datos por puerto serial, webcam, etc, con esto llegas fácilmente a ,lo que quieres tal como se muestra en el primer link de lo que quieres.

Suerte.....
  #4 (permalink)  
Antiguo 06/07/2011, 09:54
 
Fecha de Ingreso: junio-2009
Mensajes: 117
Antigüedad: 14 años, 10 meses
Puntos: 3
Respuesta: Programcion de graficos..

nostromos muchas gracias muy bien explicado, estuve practicando un pco con el gdi con c# y pude hacer algunas cosas con c++ todabia no me meti mucho, pero bueno gracias nuevamente.
__________________
Sitio: www.qubitek.com.ar
Uso: www.docstorus.com para mis documentos.

Etiquetas: graficos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:56.