View Full Version : C++ reversare l'asse Y
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
Che io sappia non esiste :D
Non è che potresti spiegarmi meglio cosa intendi ?
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
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;
}
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
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
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 );
Oh che bello ;) Quindi considerano Win9x/Me ancora a 16 bit ?!?!?!?! Incredibile :)
per me è un messaggio di errore depistante
cmq, troverò un'altra strada: basta avere un pò di pazienza
Ciao
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)
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
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
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!!!!! :)
Quale forum? Bytamyn C?
Mi interessa!
Originally posted by "verloc"
Quale forum? Bytamyn C?
Mi interessa!
esatto :)
Originally posted by "misterx"
trovato
cosa ? :)
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
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.