如何在JavaFX中在线框模式和实心模式之间切换

huangapple go评论102阅读模式
英文:

How to change between wireframe and solid in javafx

问题

3D软件允许用户动态更改绘图模式。这可以在JavaFX上实现吗?

英文:

3d software allow user to change draw mode dinamically. It can be implemented on javafx ?

答案1

得分: 4

以下是您要翻译的内容:

使用单选按钮更改绘制模式

如何在JavaFX中在线框模式和实心模式之间切换

在这种方法中,Box 实例使用单选按钮更改其 DrawMode

这是一个可以尝试的 JavaFX 单一类。

App.java

  1. public class App extends Application {
  2. @Override
  3. public void start(Stage stage) {
  4. var perspective = new PerspectiveCamera(true);
  5. perspective.setNearClip(0.1);
  6. perspective.setFarClip(500);
  7. perspective.setTranslateZ(-150);
  8. Shape3D cube = new Box(50, 50, 50);
  9. cube.setCullFace(CullFace.NONE);
  10. cube.setMaterial(new PhongMaterial(Color.CORAL));
  11. var toggleGroup = new ToggleGroup();
  12. var solid = new RadioButton("实心");
  13. solid.setToggleGroup(toggleGroup);
  14. solid.setSelected(true);
  15. var wire = new RadioButton("线框");
  16. wire.setToggleGroup(toggleGroup);
  17. var hBox = new HBox(solid, wire);
  18. toggleGroup.selectedToggleProperty().addListener((o) -> {
  19. Toggle selectedToggle = toggleGroup.getSelectedToggle();
  20. if (selectedToggle == solid) {
  21. cube.setDrawMode(DrawMode.FILL);
  22. }
  23. if (selectedToggle == wire) {
  24. cube.setDrawMode(DrawMode.LINE);
  25. }
  26. });
  27. var group3d = new Group(perspective, cube);
  28. var subscene = new SubScene(group3d, 300, 400, true, SceneAntialiasing.BALANCED);
  29. subscene.setCamera(perspective);
  30. var stack = new StackPane(subscene, hBox);
  31. stage.setScene(new Scene(stack, 300, 400));
  32. stage.show();
  33. }
  34. public static void main(String[] args) {
  35. launch();
  36. }
  37. }
英文:

Changing draw mode with radio buttons

如何在JavaFX中在线框模式和实心模式之间切换

In this approach a Box instance change its DrawMode with radiobuttons.

This is a single class javafx you can try .

App.java

  1. public class App extends Application {
  2. @Override
  3. public void start(Stage stage) {
  4. var perspective = new PerspectiveCamera(true);
  5. perspective.setNearClip(0.1);
  6. perspective.setFarClip(500);
  7. perspective.setTranslateZ(-150);
  8. Shape3D cube = new Box(50, 50, 50);
  9. cube.setCullFace(CullFace.NONE);
  10. cube.setMaterial(new PhongMaterial(Color.CORAL));
  11. var toggleGroup = new ToggleGroup();
  12. var solid = new RadioButton("solid");
  13. solid.setToggleGroup(toggleGroup);
  14. solid.setSelected(true);
  15. var wire = new RadioButton("wireframe");
  16. wire.setToggleGroup(toggleGroup);
  17. var hBox = new HBox(solid, wire);
  18. toggleGroup.selectedToggleProperty().addListener((o) -> {
  19. Toggle selectedToggle = toggleGroup.getSelectedToggle();
  20. if (selectedToggle == solid) {
  21. cube.setDrawMode(DrawMode.FILL);
  22. }
  23. if (selectedToggle == wire) {
  24. cube.setDrawMode(DrawMode.LINE);
  25. }
  26. });
  27. var group3d = new Group(perspective, cube);
  28. var subscene = new SubScene(group3d, 300, 400, true, SceneAntialiasing.BALANCED);
  29. subscene.setCamera(perspective);
  30. var stack = new StackPane(subscene, hBox);
  31. stage.setScene(new Scene(stack, 300, 400));
  32. stage.show();
  33. }
  34. public static void main(String[] args) {
  35. launch();
  36. }
  37. }

huangapple
  • 本文由 发表于 2023年1月9日 09:57:49
  • 转载请务必保留本文链接:https://go.coder-hub.com/75052569.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定