JavaFX:如何在GraphicsContext上绘制路径



JavaFX在GraphicsContext和高级Path节点上提供了低级路径绘制方法。

我想将形状存储在类中并在GraphicsContext中绘制它们。Path课对我来说似乎很方便。我知道,它旨在用作场景图中的节点,但它包含我需要的所有绘图元素。

我正在寻找一种类似的方法 GraphicsContext.fillPath(Path)但是没有。

我是否必须手动迭代Path元素并将它们转换为低级GraphicsContext方法,还是我错过了什么?

我是否必须手动迭代 Path 元素并将它们转换为低级 GraphicsContext 方法?

是的。 您需要编写一个转换器来获取从Path中提取的数据并调用适当的图形上下文方法(请参阅路径渲染方法),例如beginPath()moveTo()lineTo()closePath()fillstroke()等。


与其使用路径,不如使用 SVGPath 。 将 SVGPath 从场景图节点数据转换为 GraphicsContext 方法很容易 - 您只需执行gc.appendSVGPath(svgPath.getContent())即可。

我知道

,它来得有点晚了,但这里有一个简单的通用解决方案......

由于类的类型Path Node ,因此可以在特定Path上使用方法Node.snapshot(),然后将生成的WritableImage传递给GraphicsContext.drawImage()

下面是如何实现此目的的简单代码片段:

public void start(Stage primaryStage) {
    Pane pane = new Pane();
    Canvas canvas = new Canvas(70, 70);
    GraphicsContext gc = canvas.getGraphicsContext2D();
    pane.getChildren().add(canvas);
    Scene scene = new Scene(pane, 70, 70);
    primaryStage.setScene(scene);
    
    Path path = new Path(
            new MoveTo(10,10), 
            new LineTo(60,60), 
            new LineTo(60, 10), 
            new ClosePath());
    path.setStroke(Color.BLACK);
    path.setStrokeWidth(2.0);
    Bounds pathBounds = path.getLayoutBounds();
    WritableImage snapshot = new WritableImage(
            (int) pathBounds.getWidth(), (int) pathBounds.getHeight());
    SnapshotParameters snapshotParams = new SnapshotParameters();
    snapshot = path.snapshot(snapshotParams, snapshot);
    gc.drawImage(snapshot, pathBounds.getMinX(), pathBounds.getMinY());
    
    primaryStage.show();
}

相关内容

  • 没有找到相关文章

最新更新