2016-04-03 15 views
0

Dies ist wahrscheinlich die einfachste Frage überhaupt. Ich habe einen JavaFx Canvas Setup wie folgt aus:.Entfernen von Ausschnitt aus GraphicsContext

Canvas canvas = new Canvas(300, 300); 
    GraphicsContext context = canvas.getGraphicsContext2D(); 

    // make a big rectangle 
    context.setFill(Color.BLUE); 
    context.fillRect(50, 50, 200, 200); 

    // clip 
    context.beginPath(); 
    context.rect(100, 100, 100, 100); 
    context.closePath(); 
    context.clip(); 

    // so now this draws a clipped smaller rectangle 
    context.setFill(Color.RED); 
    context.fillRect(50, 50, 200, 200); 

    context.removeClip(); // ??? 

    // remove clip so this white rectangle is shown 
    context.setStroke(Color.WHITE); 
    context.setLineWidth(3); 
    context.strokeRect(75, 75, 150, 150); 

Ich versuchte GraphicsContext#restore() (das alles, aber das Clipping wieder her und einen rechteckigen Pfad beginnend bei 0 Erstellen | 0 und mit der Größe der Leinwand und ruft clip() wieder

Wie entferne ich aus einem GraphicsContext?

+1

Ich benutze keine Leinwand, daher bin ich mir nicht sicher, aber es sieht aus wie ['context.restore()'] (http://docs.oracle.com/javase/8/javafx/ api/javafx/scene/canvas/GraphicsContext.html # restore--) sollte den Clip entfernen. Sie müssen/context.save() 'aufrufen, bevor Sie' clip() 'aufrufen, um einige andere Werte beizubehalten, die von' restore() 'zurückgesetzt werden. –

+0

In der Tat müssen Sie zuerst save() aufrufen, bevor Sie restore() aufrufen können. Dies ist aus der Dokumentation der Wiederherstellungsmethode. "Wenn der Stapel leer ist, wird nichts geändert." – mipa

Antwort

2

Das Clipping Verhalten in JavaFX Clipping schwierig ist, gelinde gesagt. „entfernen Sie sagen Clipping?“ Wie wäre es damit.

public void start(Stage primaryStage) throws Exception { 
    Pane root = new Pane(); 
    Canvas canvas = new Canvas(); 
    canvas.setHeight(400); 
    canvas.setWidth(400); 

    GraphicsContext graphics = canvas.getGraphicsContext2D(); 
    //graphics.save(); 
    graphics.beginPath(); 
    graphics.rect(0,0,200,200); 
    graphics.clip(); 
    graphics.setFill(Color.RED); 
    graphics.fillOval(100, 100, 200, 200); 

    //graphics.restore(); 
    graphics.beginPath(); 
    graphics.rect(200,200,200,200); 
    graphics.clip(); 

    graphics.setFill(Color.BLUE); 
    graphics.fillOval(100, 100, 200, 200); 

    root.getChildren().add(canvas); 
    Scene scene = new Scene(root, 400, 400); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

Wenn ich das auf meinem Computer mache, bekomme ich nur einen blauen Kreis. Keine Überschneidungen. Jemand könnte ein rotes Viertel eines Kreises und ein blaues Viertel eines Kreises erwarten. Nee. Heben Sie die Kommentare zum Speichern und Wiederherstellen auf, und es verhält sich wie erwartet.

Verwandte Themen