2012-09-21 16 views
6

Teraz jestem chwytając GraphicsContext dla mojego węzła canvas i stara sięJak powiększać węzeł JavaFX 2 Canvas?

gc.scale(2, 2); 

na moim canvas Mam kilka metod tuzin dostępny. Więc wiem, że musi być coś, co można powiększyć. Jednak moja próba nie powoduje wyraźnego "powiększania" lub "powiększania". Czy jest coś, co muszę wywoływać, aby to zastosować lub przerysować?

Odpowiedz

5

Myślę, że gc.scale(2,2) przeskaluje kolejne rzeczy rysowane na płótnie o współczynnik 2, a nie istniejące już rysunki.

Jeśli chcesz przeskalować płótno, możesz ustawić transformację na płótnie, a nie na kontekście graficznym.

canvas.setScaleX(2); 
canvas.setScaleY(2); 

Jeśli chcesz skalowane płótno zostać uwzględnione w obliczeniach układ dla menedżerów układ wtedy można zawinąć go w grupie i jeśli chcesz, aby powiększyć podobny wpływ na przeskalowane płótnie gdzie części płótna są przycinane , możesz umieścić płótno w ScrollPane i zdefiniować do niego widok lub ustawić klip na węźle canvas.

Aktualizacja omówić intesywność wystawia

Aby uniknąć problemów intesywność na powiększeniu, myślę, że trzeba będzie prowadzić rejestr wszystkich poleceń graficznych, jakie zostały przedstawione do tej pory, a następnie, gdy chcesz zmienić współczynnik powiększenia, wyczyść płótno, zastosuj nową skalę do obszaru roboczego, a następnie powtórz wszystkie polecenia graficzne. Być może jakiś format, taki jak svg, może być używany do nagrywania poleceń graficznych.

Albo możesz po prostu użyć wykresu sceny i narysować na nim zamiast płótna, wtedy też nie będziesz mieć problemów z pixelowaniem.

Myślę, że ważną rzeczą, aby pamiętać, jest to, że płótno ma być rodzajem trybie bezpośrednim ogniem i zapomnieć rzeczy, zamiast służby zatrzymanych tryb rysowania jak wykresie sceny.

+0

tak, to działa. Sorta. Wszystko w pikselach jest bardzo złe. Ponieważ linie są po prostu wektorami, zastanawiam się, czy istnieje sposób na "przerysowanie" wszystkiego w powiększeniu, które ustawiasz? Wiem, że udało mi się to zrobić, gdy użyłem zwykłego obiektu grupowego kontra płótna. Wyglądało to tak: private void reDrawPreview() { dla (Węzeł n: canvsGroup.getChildren()) { Linia nd = (Linia) n; nd.setStrokeWidth (Draw2d.getStrokeWeight()); } – ril3y

+0

przykro mi z powodu formatowania .. nie wiesz, jak sformatować kod w komentarzach? – ril3y

+0

Możesz zobaczyć, jak to działało w tym filmie o 3:36. http://www.youtube.com/watch?v=kdJZbVO4E4Q&feature=g-upl – ril3y