Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

QT GraphicScene, kako obrnuti smjer y ose

[es] :: C/C++ programiranje :: QT GraphicScene, kako obrnuti smjer y ose

[ Pregleda: 1043 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Sale_123
C++ Developer
Wien

Član broj: 23293
Poruke: 219
*.cust.tele2.at.



+120 Profil

icon QT GraphicScene, kako obrnuti smjer y ose26.06.2010. u 00:59 - pre 168 meseci
Da budem iskren, skoro sam se poceo baviti QT-m, do sad sam se bavio javom. Problem je sledeci, kako okrenuti smjer ose y?

Problem sam isti imao sa javom, ali sam to rijesio tako sto sam kreirao dvije kopije Graphics2D objekta, i kod jednog sam obrnuo y osu, tako sto sam skalirao matricu (AffineTransform) sa (1,-1), jos je pomjerio na dole za visinu prozora.

Drugi Graphics2D objekt kod koga nije bila izokrenuta y osa sam koristio za iscrtavanje tekstova. E sad, prije ispisa teksta, morao sam uzeti neku koordinatu, pomnoziti je sa matricom prvog Graphics2D objekta, da bi dobio tacnu lokaciju, u onda na toj lokaciji iscrtavati tekst. Iscrtavanje grafickih oblika je bilo jednostavno, samo pozivanje funkcije draw.

Medjutim, kada bi htio da pomjeram objekte u takvoj sceni, prvo sam koordinate misa morao da pomnozim sa inverznom matricom prvog Graphics2D objekta, da bi dobio tacnu koordinatu na modelu.

Ovaj nacin mi je nekako "prljav". I lose su performanse.

Onda sam poceo da gledam sta QT ima da ponudi. Moram da priznam da je framework zaista fantasticno uradjen i da je bas jednostavan za koristenje. Medjutim, QT isto koristi sistem, gdje je tacka 0,0 u gornjem lijevom uglu, i pozitivni smjer ose y je na dole. Mjenjanje smjera ose y u samom GraphicsScene cinilo mi se kao prevelik posao i cinio mi se upitan, pa sam poceo da pisem sam svoj widget.

Medjutim, princip koji sam koristio u javi ovde nije funkcionisano. Dva QPainter-a izgleda da djele zajednicku matricu za transformacije, tako da promjena matrice u jednom painteru utice na drugi, i tekst se iscrtava naopako. Jedini nacin koji bi mogao da implementiram svoj widget je da za svaki graficki oblik vrsim obrtanje smeja y ose, a kad dodje tekst na red, onda da vracam osu y u normalu. Bojim se da bi ovo moglo isto biti sporo.

Za sad mi se jedino opengl vrti u glavi kao elegantno rjesenje. Neka druga ideja?
...
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
212.200.65.*



+2790 Profil

icon Re: QT GraphicScene, kako obrnuti smjer y ose26.06.2010. u 01:17 - pre 168 meseci
Pa, već ti je bilo odgovoreno. Evo i ovde

Code:
void MainWindow::paintEvent(QPaintEvent *)
{
    QGraphicsScene s;
    QPainter p(this);
    QRect r = rect();

    p.setTransform(QTransform(1, 0, 0, 0, -1, 0, 0, r.height() - 1, 1));
    s.addRect(10,10,250,150);
    s.addLine(1,1,2,2);
    s.render(&p, r, r);

    QPainter q(this);
    q.drawText(t.map(QPointF(30,20)), "Ana voli Milovana");
}


Crtanje u prozor se vrši onako kako ti hoćeš. Poenta je u transformaciji koju zadaješ painteru u koji vršiš renderovanje.

[Ovu poruku je menjao Nedeljko dana 26.06.2010. u 02:32 GMT+1]
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Sale_123
C++ Developer
Wien

Član broj: 23293
Poruke: 219
*.cust.tele2.at.



+120 Profil

icon Re: QT GraphicScene, kako obrnuti smjer y ose26.06.2010. u 01:34 - pre 168 meseci
Citat:
Nedeljko: Pa, već ti je bilo odgovoreno. Evo i ovde


Nisam vidio dok sam otvarao temu ;-). Evo sad cu da isprobam.
...
 
Odgovor na temu

[es] :: C/C++ programiranje :: QT GraphicScene, kako obrnuti smjer y ose

[ Pregleda: 1043 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.