這個職位是一個套件來回答我要提問時作:Transforming a shape仿射變換的圖形,沒有文字和標籤
這裏是像我想:
這裏是生成一個簡單的程序,就像你看到文本被旋轉一樣。我想水平文本:
畫布進行縮放,平移,旋轉,做拉伸,因此不horizontaly顯示文本和字體大小必須極度降低(1.4)。該程序是用Java編寫的(awt和JavaFX),但問題不在於語言或技術相關,因此任何建議都是值得歡迎的。
這裏是簡單的程序:
import javafx.application.Application;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.TextAlignment;
import javafx.stage.Stage;
public class TransRotScale extends Application {
private static void drawGraph(GraphicsContext g) {
//---
g.scale(10.0, 10.0);
g.rotate(Math.toDegrees(Math.atan2(-15.0, 40.0)));
g.translate(-8, -10);
//---
g.setStroke(Color.DARKRED);
g.setLineWidth(LINE_WIDTH);
g.strokeLine(10, 20, 10, 30);
g.strokeLine(10, 30, 50, 30);
g.strokeLine(50, 30, 50, 35);
//---
g.setFill(Color.BLACK);
g.fillOval(50-ENDPOINT_RADIUS, 35-ENDPOINT_RADIUS,
ENDPOINT_DIAMETER, ENDPOINT_DIAMETER);
g.fillOval(10-ENDPOINT_RADIUS, 20-ENDPOINT_RADIUS,
ENDPOINT_DIAMETER, ENDPOINT_DIAMETER);
//---
g.setFill(Color.LIGHTSALMON);
g.fillOval(10-ENDPOINT_RADIUS, 30-ENDPOINT_RADIUS,
ENDPOINT_DIAMETER, ENDPOINT_DIAMETER);
g.fillOval(50-ENDPOINT_RADIUS, 30-ENDPOINT_RADIUS,
ENDPOINT_DIAMETER, ENDPOINT_DIAMETER);
//---
g.setStroke(Color.DARKGRAY);
g.setFont(Font.font(Font.getDefault().getFamily(), 1.4));
g.setLineWidth(0.1);
g.setTextAlign(TextAlignment.CENTER);
g.setTextBaseline(VPos.BOTTOM);
g.strokeText("[10, 20]", 10, 20-ENDPOINT_RADIUS);
g.setTextBaseline(VPos.TOP);
g.strokeText("[10, 30]", 10, 30+ENDPOINT_RADIUS);
g.setTextBaseline(VPos.BOTTOM);
g.strokeText("[50, 30]", 50, 30-ENDPOINT_RADIUS);
g.setTextBaseline(VPos.TOP);
g.strokeText("[50, 35]", 50, 35+ENDPOINT_RADIUS);
}
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane bp = new BorderPane();
Canvas canvas = new Canvas(540, 240);
bp.setCenter(canvas);
drawGraph(canvas.getGraphicsContext2D());
primaryStage.setScene(new Scene(bp));
primaryStage.centerOnScreen();
primaryStage.show();
}
public static final double ENDPOINT_RADIUS = 2.0;
public static final double ENDPOINT_DIAMETER = 2.0*ENDPOINT_RADIUS;
public static final double LINE_WIDTH = 1.0;
public static void main(String[] args) {
launch();
}
}
在用於顯示第一圖像(目標)中的程序,我使用兩個畫布,第一畫布縮放,平移,旋轉,以進行繪製而沒有任何文本,第二個畫布僅用於水平繪製標籤,使用java.awt.geom.AffineTransform
來計算座標以匹配顯示在第一個畫布中的項目。兩幅油畫都疊加顯示,透明。
上午,你看OBJECTPROPERTY rotationAxisProperty(),它定義該節點的旋轉軸。 JavaFX的Node類的?這是一個屬性,你可以設置爲一個線,通過圓的中心,並將文本節點的旋轉屬性綁定到一些值... –
@AlexanderKirov:我已經爲你發佈了一個答案,請檢查它。 – Aubin