Ich denke, dass gc.scale(2,2)
die nächsten Dinge, die Sie auf der Leinwand zeichnen, um einen Faktor von 2 skalieren wird, nicht vorhandene Sachen, die Sie bereits gezeichnet haben.
Wenn Sie die Arbeitsfläche skalieren möchten, können Sie eine Transformation auf der Arbeitsfläche und nicht den Grafikkontext festlegen.
canvas.setScaleX(2);
canvas.setScaleY(2);
Wenn Sie wollen, dass die skalierte Leinwand in Layout-Berechnungen für Layout-Manager reflektiert werden, dann können Sie es in einer Gruppe wickeln, und wenn Sie auf der skalierten Leinwand vergrößern ähnlichen Effekt wollen, wo Teile der Leinwand werden abgeschnitten Dann können Sie entweder die Leinwand in ein ScrollPane platzieren und ein Ansichtsfenster für sie definieren oder einen Clip auf dem Arbeitsflächenknoten festlegen.
aktualisieren pixellation zu diskutieren gibt
Um pixellation Fragen auf Vergrößerung zu vermeiden, ich denke, Sie eine Aufzeichnung aller der Grafikbefehle zu halten, müssen die bisher gezogen wurden, dann, wenn Sie ändern möchten, Ziehen Sie den Zoomfaktor zurück, löschen Sie die Zeichenfläche, wenden Sie die neue Skalierung auf die Zeichenfläche an und wiederholen Sie dann alle Grafikbefehle. Vielleicht könnte ein Format wie Svg verwendet werden, um die Grafikbefehle aufzuzeichnen.
Oder Sie können einfach das Szenen-Diagramm verwenden und statt dessen auf eine Leinwand zeichnen, dann haben Sie auch keine Pixelierungsprobleme.
Ich denke, die wichtige Sache, die hier zu beachten ist, ist, dass Leinwand eine Art sofortiger Modus Feuer und vergessen Sache sein sollte, anstatt ein beibehaltener Modus Zeichnungsdienst wie der Szene Graph.
ja, das funktioniert. Sorta. Es verpixelt alles ziemlich schlecht. Da Linien nur Vektoren sind, frage ich mich, ob es einen Weg gibt, alles in der von Ihnen eingestellten Vergrößerung neu zu zeichnen? Ich weiß, ich konnte dies tun, wenn ich nur ein einfaches Gruppenobjekt vs Leinwand verwendet. Es sah so aus: private void reDrawPreview() { für (Knoten n: canvsGroup.getChildren()) { Zeile nd = (Linie) n; nd.setStrokeWidth (Draw2d.getStrokeWeight()); } – ril3y
Sorry über die Formatierung .. nicht sicher, wie man Code in Kommentaren formatiert? – ril3y
Sie können in diesem Video sehen, wie es bei 3:36 funktionierte. http://www.youtube.com/watch?v=kdJZbVO4E4Q&feature=g-upl – ril3y