Three.js - вращение сферы вокруг определенной оси

Если вы просто измеряете шрифт по умолчанию без CSS:

  1. Поместите String для измерения в текстовом объекте.
  2. Получите ширину макета текстового объекта

Если вам нужно применить CSS:

  1. Поместите строку, подлежащую измерению в текстовом объекте.
  2. Создайте throwaway Сцена и поместите объект Text в сцену.
  3. Сделайте снимок текста (если вы используете Java 7) или вызовите applyCss для Java 8.
  4. Получить ширину границ макета текстового объекта.

Это работает, потому что он заставляет макет передать текст, который вычисляет его границы макета. Сцена на шаге 2 требуется, потому что это именно то, как работает процессор CSS (для того, чтобы выполнять свою работу, нужен узел, который должен быть расположен в Сцене). Определенно прочитайте связанный javadoc для applyCss, если вы хотите понять дальнейшую обработку.

Пример кода

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.text.Text;
import javafx.stage.Stage;

// displays the width in pixels of an arbitrary piece of text.
public class MeasureText extends Application {
  public static void main(String[] args) { launch(args); }
  @Override public void start(Stage stage) throws Exception {
    final Text text = new Text("XYZZY");
    new Scene(new Group(text));

    // java 7 => 
    //    text.snapshot(null, null);
    // java 8 =>
    text.applyCss(); 

    final double width = text.getLayoutBounds().getWidth();

    stage.setScene(new Scene(new Label(Double.toString(width))));
    stage.show();
  }
}

Пример выходного файла программы (отображает ширину в пикселях произвольного фрагмента текста ):

Sample Program Output [/g1]

Как (если вообще) это изменится, если текст будет напечатан в графическом контексте с заданным шрифтом?

blockquote>

Применить шрифт к текстовому объекту, содержащему одно и то же сообщение, которое вы будете рисовать на холсте. В отличие от того, когда вы измеряете текст, нанесенный на график сцены, элементы, нанесенные на холст, не применяют к ним CSS, поэтому вам не нужно размещать объект Text в сцене и применять CSS к нему перед измерением текста. Вы можете измерить границы макета вашего текстового объекта, и он будет таким же, как границы текста, нанесенного в холсте с тем же шрифтом.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.*;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.scene.text.*;
import javafx.stage.Stage;

// displays the width in pixels of an arbitrary piece of text (which has been plotted on a canvas).
public class MeasureText extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        final String msg = "XYZZY";
        final Text text = new Text(msg);
        Font font = Font.font("Arial", 20);
        text.setFont(font);

        final double width = text.getLayoutBounds().getWidth();

        Canvas canvas = new Canvas(200, 50);
        GraphicsContext gc = canvas.getGraphicsContext2D();
        gc.setFont(font);
        gc.fillText(msg, 0, 40);

        stage.setScene(new Scene(
                new VBox(new Label(Double.toString(width)), canvas))
        );
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

13
задан karlosss 1 May 2013 в 14:56
поделиться