FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Rotar BitMap para brujula GPS
Posts: 166
Joined: Mon Dec 12, 2005 09:56 AM
Rotar BitMap para brujula GPS
Posted: Thu Aug 02, 2012 04:18 PM
Hola a todos,

¿ Hay alguna manera de rotar un Bitmap ?

Estoy haciendo una aplicación para GPS y de momento me funciona bien. El GPS manda cadenas NMEA a un puerto serie virtual (el GPS es USB) y así obtengo los datos de altitud, longitud, altura, velocidad, rumbo, nº de satelites, precisión y muestro la posición sobre un mapa de Google, de momento me funciona muy bien aunque tengo pendiente aun de conseguir cargar mapas OpenStreetMap offline, para que el mapa se vea sin acceso a internet. El caso es que el GPS me manda la variación magnetica y quiero aprovechar ese dato para mostrar una brújula, pero para ello debo saber antes como rotar su dibujo:


Ya se que no es un tema habitual, pero con FW se puede hacer todo :-)

De momento lo llevo así (la velocidad y rumbo no sale porque estoy parado):


Gracias de antemano, aunque me voy de vacaciones intentaré seguir el post.
Posts: 632
Joined: Thu Jan 19, 2006 10:45 AM
Re: Rotar BitMap para brujula GPS
Posted: Sat Aug 04, 2012 11:29 AM

Vi ejemplos de movimientos de las agujas del reloj de C5, supongo que se podría utilizar algún ejemplo para hacer lo mismo.

Saludos



Andrés González desde Mallorca
Posts: 145
Joined: Wed Nov 03, 2010 09:16 AM
Re: Rotar BitMap para brujula GPS
Posted: Sun Aug 05, 2012 04:51 PM

Esta es la rutina que gira lo que estés pintando en un DC en un momento dado

Un saludo

include "fivewin.ch"

static oWnd
static nAngle := 0

function main()

DEFINE WINDOW oWnd TITLE "Rotando bitmap"

   oWnd:bKeyDown := {|nKey,nFlags| oWnd:cTitle := "Rotando bitmap. " + str(nKey), if( nKey == 37, nAngle -= 5, if( nKey == 39, nAngle += 5, nil) ), oWnd:Refresh() }

ACTIVATE WINDOW oWnd ON PAINT Pinta(hDC)

return 0

function pinta( hDC )
local hBitmap := ReadBitmap(hDC, "compass.bmp" )
local i

if hBitmap != 0
// el tamaño del bitmap es 211 x 211
i = Begin_Rotate( hDC, nAngle, 211/2, 211/2 )
DrawBitmap( hDC, hBitmap, 0, 0 )
End_Rotate(hDC, i )

DeleteObject( hBitmap )

endif

return nil

pragma BEGINDUMP

include <hbapi.h>

include <windows.h>

include <math.h>

HB_FUNC( BEGIN_ROTATE )
{
HDC hDc = (HDC) hb_parnl( 1 );
int nGraphicsMode = SetGraphicsMode(hDc, GM_ADVANCED);
XFORM xform;
double fangle;
int m_iAngle = hb_parni( 2 );

POINT centerPt;
centerPt.y = hb_parni( 3 );
centerPt.x = hb_parni( 4 );

if ( m_iAngle != 0 )
{
fangle = (double)m_iAngle / 180 * 3.1415926;
xform.eM11 = (float)cos(fangle);
xform.eM12 = (float)sin(fangle);
xform.eM21 = (float)-sin(fangle);
xform.eM22 = (float)cos(fangle);
xform.eDx = (float)(centerPt.x - cos(fangle)centerPt.x + sin(fangle)centerPt.y);
xform.eDy = (float)(centerPt.y - cos(fangle)centerPt.y - sin(fangle)centerPt.x);

   SetWorldTransform(hDc, &amp;xform);

}
hb_retni( nGraphicsMode );

}

HB_FUNC( END_ROTATE )
{
HDC hDc = (HDC) hb_parnl( 1 );
XFORM xform;
int nGraphicsMode = hb_parni( 2 );

xform.eM11 = (float)1.0;
xform.eM12 = (float)0;
xform.eM21 = (float)0;
xform.eM22 = (float)1.0;
xform.eDx = (float)0;
xform.eDy = (float)0;

SetWorldTransform(hDc, &amp;xform);
SetGraphicsMode(hDc, nGraphicsMode);
hb_ret();

}

pragma ENDDUMP

Paco García
Posts: 166
Joined: Mon Dec 12, 2005 09:56 AM
Re: Rotar BitMap para brujula GPS
Posted: Mon Aug 27, 2012 04:22 PM

Muchas gracias a ambos, despues de las vacaciones he probado el código que ha incluido Paco y funciona bien, me falta hacer que funcione en un dialogo de recursos, pero en la ventana principal va bien.

Saludos

Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Rotar BitMap para brujula GPS
Posted: Mon Aug 27, 2012 08:22 PM
Hola, baja esta fuentes de un reloj analogo,,, puede servirte..
Salu2

https://rapidshare.com/files/449953331/reloj.zip
Posts: 392
Joined: Tue Jul 29, 2008 01:55 PM
Re: Rotar BitMap para brujula GPS
Posted: Fri Sep 07, 2012 02:03 AM

Hola Sebastián

Pregunta: que dispositivo GPS estas usando para hacer pruebas con tu apliacacion?

Gracias

Saludos

Visite Chiapas, el paraiso de México.
Posts: 166
Joined: Mon Dec 12, 2005 09:56 AM
Re: Rotar BitMap para brujula GPS
Posted: Fri Sep 21, 2012 03:13 PM
devtuxtla wrote:Hola Sebastián

Pregunta: que dispositivo GPS estas usando para hacer pruebas con tu apliacacion?

Gracias

Saludos



Perdona por tardar tanto en responder, estoy utilizando este:
http://www.ebay.es/itm/GPS-Receiver-USB-DONGLE-SAT-NAV-ON-PC-Netbook-Laptop-/300558586966?pt=UK_In_Car_Technology&hash=item45fab01456

Aunque este al final no envía la variación magnetica, esos datos en el código NMea que envía al puerto están siempre vacíos :-)

Continue the discussion