PDA

View Full Version : C++ reversare l'asse Y


misterx
03-04-2003, 20:28
qual'è l'api di windows responsabile?

vi prego, non proponetemi soluzioni algebrico-matematiche, ne ho già le tasche piene

sto scrivendo un programma che di funzioni matematiche ne è pieno a bizzeffe ed un piccolo aiuto dalle API non può guastare

grazie

verloc
04-04-2003, 06:40
Che io sappia non esiste :D

cionci
04-04-2003, 07:47
Non è che potresti spiegarmi meglio cosa intendi ?

misterx
04-04-2003, 08:04
nel normale piano cartesiano, la direzione dell'asse delle X+ è verso destra e l'asse delle Y+ verso l'alto: significa che digitando Y=+200, dovrebbe venire disegnato un punto fuori dallo schermo

Nel mondo dell'informatica, l'asse delle X+ segue la regola del piano cartesiano mentre l'asse delle Y+ è diretto verso il basso (non ne ho mai compreso il motivo)

ho trovato queste API ma non le ho mai usate

SetMapMode(hDC, MM_ISOTROPIC);
SetWindowExtEx(hDC, 64, 64, NULL);
SetViewportExtEx(hDC, GetDeviceCaps(hDC, LOGPIXELSX),
GetDeviceCaps(hDC, LOGPIXELSY), NULL);

se già le conoscete: dite


spero di essere stato chiaro

cionci
04-04-2003, 11:35
int SetMapMode(
HDC hdc, // handle to device context
int fnMapMode // new mapping mode
);

MM_LOMETRIC Each logical unit is mapped to 0.1 millimeter. Positive x is to the right; positive y is up.

Comunque se vuoi continuare a lvaorare in pixel...ti basta una cosa del genere...

inline LONG _y(LONG y, HWND wnd = INVALID_HANDLE_VALUE)
{
static LONG clientHeight = 0;
if(wnd != INVALID_HANDLE_VALUE)
{
RECT r;
if(!GetClientRect(wnd, &r))
return -1;
clientHeight = r.bottom - r.top;
}
return clientHeight - y;
}

verloc
04-04-2003, 14:57
Originally posted by "misterx"


ho trovato queste API ma non le ho mai usate

SetMapMode(hDC, MM_ISOTROPIC);
SetWindowExtEx(hDC, 64, 64, NULL);
SetViewportExtEx(hDC, GetDeviceCaps(hDC, LOGPIXELSX),
GetDeviceCaps(hDC, LOGPIXELSY), NULL);

se già le conoscete: dite


spero di essere stato chiaro

:eek:

Ti avevo capito subito Misterix.
Devi disegnare qualcosa in real-world?
Se si ,te lo dico subito:ti conviene usare un componente.Perche prima o poi dovresti maneggiare zoom pan etc

misterx
04-04-2003, 19:46
anch'io concordo con l'uso dei componenti ma non sempre: finisci, a volte, per non approfondire gli argomenti.


Dopo aver dato fondo al Win32SDK, ho assemblato questo codice ma: funziona solo con windows NT; avessi letto prima le "Quick info"

mi torna errore 120

chi ha tale SO, se vuole, provi

morale: non so se è il metodo giusto

leggo ora sul sito di Microsoft che sotto win2k funziona


HDC hDC;
XFORM xForm;

hDC = GetDC(Handle);

if(!SetMapMode(hDC, MM_LOMETRIC))
return;

xForm.eM11 = (FLOAT) -1.0;
xForm.eM12 = (FLOAT) 0.0;
xForm.eM21 = (FLOAT) 0.0;
xForm.eM22 = (FLOAT) -1.0;
xForm.eDx = (FLOAT) 0.0;
xForm.eDy = (FLOAT) 0.0;

if(!SetWorldTransform(hDC, &xForm))

// bla bla bla

cionci
05-04-2003, 10:05
Originally posted by "misterx"

Dopo aver dato fondo al Win32SDK, ho assemblato questo codice ma: funziona solo con windows NT; avessi letto prima le "Quick info"

mi torna errore 120
Che dice se metti questo codice nella gestione dell'errore ?

LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
0, // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );

misterx
05-04-2003, 10:15
questo

cionci
05-04-2003, 10:21
Oh che bello ;) Quindi considerano Win9x/Me ancora a 16 bit ?!?!?!?! Incredibile :)

misterx
05-04-2003, 17:55
per me è un messaggio di errore depistante

cmq, troverò un'altra strada: basta avere un pò di pazienza

Ciao

verloc
06-04-2003, 16:39
Come al solito cerchi una cosa e ne trovi un'altra...
E' il tuo giorno fortunato:

http://www.visualcomponentlibrary.com/bcb/gdi/transform.htm


Oh ma hai proprio culo!
http://www.visualcomponentlibrary.com/bcb/gdi/gdicoord.htm

statte buon... :D

PS.Si l'ho detto...ho detto culo (V.Sgarbi)

misterx
06-04-2003, 19:45
Originally posted by "verloc"

Come al solito cerchi una cosa e ne trovi un'altra...
E' il tuo giorno fortunato:

http://www.visualcomponentlibrary.com/bcb/gdi/transform.htm


Oh ma hai proprio culo!
http://www.visualcomponentlibrary.com/bcb/gdi/gdicoord.htm

statte buon... :D

PS.Si l'ho detto...ho detto culo (V.Sgarbi)


vedi che scava scava qualcosa c'è?

grazie verloc, domani ci dò un'occhiata molto da vicino :)


alle volte un po di c@@@o non guasta :D

verloc
07-04-2003, 07:05
Sappi però che usualmente non si disegna real-world in questo modo.
Lo so che fare le trasformazioni è un incubo,ma per capire le operazioni elementari devi andare al link delphi che ho postato ad un forumista
sul 3D.Cerca nelle mie ultime risposte.
In particolare devi vedere vedere l'esempio sul centroide di un poligono.

http://homepages.borland.com/efg2lab/Graphics/index.html

questo è l'esempio su come si trasforma.

http://homepages.borland.com/efg2lab/Graphics/PolygonArea.ZIP

misterx
07-04-2003, 12:11
Momentaneamente non ho necessità di elevate prestazioni del codice; grazie infinite per tutte le info che mi hai fornito sino ad ora


P.S.
ho passato il tuo link ad un forum di BCB da me frequentato e mi hanno fatto i complimenti per la qualità di tale sito (veramente fantastico!!!)

Tali complimenti li rigiro tutti a te in quanto il merito è esclusivamente tuo ;)

ottimo lavoro verloc!!!!! :)

verloc
07-04-2003, 15:59
Quale forum? Bytamyn C?

Mi interessa!

misterx
07-04-2003, 16:05
Originally posted by "verloc"

Quale forum? Bytamyn C?

Mi interessa!

esatto :)

misterx
08-04-2003, 19:33
trovato

verloc
09-04-2003, 07:25
Originally posted by "misterx"

trovato
cosa ? :)

misterx
09-04-2003, 19:55
Originally posted by "verloc"


cosa ? :)


purtroppo mi sono sbagliato, non ho trovato niente

sto cercando di imitare la bacchetta magica di photoshop

non è affatto banalissimo, ma sono sulla giusta strada