Rysuję sobie zwyczajny prostokąt za pomocą Polygon,
i to wychodzi do bani - obgryzione narożniki:
i co to ma być?!
Przez 30 lat nie potrafią takich prostych bagów poprawić, czy jak?
- screenshot-20210222221044.png (1 KB) - ściągnięć: 55
Wątek przeniesiony 2021-02-22 22:19 z C/C++ przez kq.
Rysuję sobie zwyczajny prostokąt za pomocą Polygon,
i to wychodzi do bani - obgryzione narożniki:
i co to ma być?!
Przez 30 lat nie potrafią takich prostych bagów poprawić, czy jak?
ewidentnie widać, że zaczynasz/kończysz 1 pixel za daleko/blisko
Prostokąty rysujemy tak:
a,b,c,d -> (a,b) i (c,d) dwa punkty po przekątnej;
zatem aby to chlapnąć polygonem robimy tak:
TPoint p[4];
p[0].x = a; p[0].y = b;
p[1].x = c; p[1].y = b;
p[2].x = c; p[2].y = d;
p[3].x = a; p[3].y = d;
// p[4].x = a; p[4].y = b; // to nic nie daje, bo polygon jest z definicji figurą zamkniętą (do linii jest Polyline);
Polygon(dc, p, 4);
i jest do bani: narożnik nadgryziony.
No, ale wiadomo że Windows wprodukowali amatorzy.
A dlaczego do prostokąta nie użyjesz https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-rectangle ?
Bo ja potrzebuję niekiedy obracać te prostokąty, więc Rectangle odpada.
masz ten prostokąt: a, b, c, d;
i chcemy go obrócić o 30 stopni, więc wystarczy przeliczyć:
p = R(30) * (x,y); // gdzie: R(f) to macierz obrotu.
Polygon(dc, p, 4); // i gotowe!
Obrys Twojego prostokąta jest grubszy niż 1 piksel.
Stąd wnoszę, że użyłeś CreatePen
, aby utworzyć taki (grubszy) pen.
Pen tworzony za pomocą CreatePen
ma zawsze zaokrąglone końcówki. Przy dwóch pikselach tego nie widać, ale gdybyś dał większą grubość, to nie miałbyś "wyżarcia", tylko narożniki zaokrąglone. Przy grubości 2 - tak mu wychodzi to zaokrąglenie.
Żeby mieć narożniki prostokątne, trzeba użyć ExtCreatePen
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-extcreatepen
z PS_ENDCAP_SQUARE|PS_JOIN_MITER
.
Do obracania:
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-setworldtransform
Zwróć uwagę, że to działa tylko w trybie GM_ADVANCED
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-setgraphicsmode
A to, że nie wygładza krawędzi ukośnych linii to też bug, czy po prostu użyłeś za mało instrukcji WinAPI?
Wiesz, że to API nie ma być idiotoodporne i właśnie dlatego jest takie szybkie? Nie robi za programistę żadnych nadmiarowych operacji.
Trzeba konkretny problem rozwiązać w konkretny sposób.
Jeśli chcesz bibliotekę, która część pracy wykona za Ciebie, to użyj Qt. https://doc.qt.io/qt-5/qpainter.html#details
kwalifika napisał(a):
Rysuję sobie zwyczajny prostokąt za pomocą Polygon,
i to wychodzi do bani - obgryzione narożniki:
i co to ma być?!
@kq dlaczego to trafiło do flame'a? Bez sensu, zaśmiecanie flame'a merytorycznymi tematami…
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.
Windows wprodukowali amatorzy.
- nie ma obowiązku korzystania z Windows.