changeset 4277:6c8c11e19315

3DViewer: Added near and far clipping panes. Added node selection in hierarchy.
author Alexander Kouznetsov
date Thu, 11 Jul 2013 16:49:50 -0700
parents 4afa0f85a7b3
children c6a7452039b6
files apps/experiments/3DViewer/src/main/java/com/javafx/experiments/jfx3dviewer/ContentModel.java apps/experiments/3DViewer/src/main/java/com/javafx/experiments/jfx3dviewer/SettingsController.java apps/experiments/3DViewer/src/main/resources/com/javafx/experiments/jfx3dviewer/settings.fxml
diffstat 3 files changed, 333 insertions(+), 306 deletions(-) [+]
line wrap: on
line diff
--- a/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/jfx3dviewer/ContentModel.java	Thu Jul 11 16:03:05 2013 -0700
+++ b/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/jfx3dviewer/ContentModel.java	Thu Jul 11 16:49:50 2013 -0700
@@ -36,7 +36,6 @@
 import javafx.beans.property.SimpleObjectProperty;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
-import javafx.event.EventHandler;
 import javafx.scene.AmbientLight;
 import javafx.scene.Group;
 import javafx.scene.Node;
@@ -44,8 +43,6 @@
 import javafx.scene.PerspectiveCamera;
 import javafx.scene.PointLight;
 import javafx.scene.SubScene;
-import javafx.scene.input.MouseEvent;
-import javafx.scene.input.ScrollEvent;
 import javafx.scene.paint.Color;
 import javafx.scene.paint.PhongMaterial;
 import javafx.scene.shape.Box;
@@ -57,6 +54,9 @@
 import com.javafx.experiments.shape3d.PolygonMeshView;
 import com.javafx.experiments.shape3d.SubdivisionMesh;
 import javafx.beans.property.ObjectProperty;
+import javafx.event.EventHandler;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.input.ScrollEvent;
 
 /**
  * 3D Content Model for Viewer App. Contains the 3D scene and everything related to it: light, cameras etc.
@@ -148,6 +148,7 @@
         subScene.setFill(Color.ALICEBLUE);
 
         // CAMERA
+        camera.setNearClip(0.0001); // TODO: Workaround as per RT-31255
         camera.getTransforms().addAll(
                 yUpRotate,
                 cameraXRotate,
@@ -157,14 +158,6 @@
                 cameraLookZRotate);
         subScene.setCamera(camera);
         root3D.getChildren().add(camera);
-
-        cameraPosition.zProperty().addListener(new ChangeListener<Number>() {
-            @Override
-            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
-                System.out.println("z = " + newValue);
-            }
-        });
-
         root3D.getChildren().add(autoScalingGroup);
 
         // SCENE EVENT HANDLING FOR CAMERA NAV
@@ -200,6 +193,8 @@
         sessionManager.bind(cameraPosition.zProperty(), "cameraPosition.z");
         sessionManager.bind(cameraXRotate.angleProperty(), "cameraXRotate");
         sessionManager.bind(cameraYRotate.angleProperty(), "cameraYRotate");
+        sessionManager.bind(camera.nearClipProperty(), "cameraNearClip");
+        sessionManager.bind(camera.farClipProperty(), "cameraFarClip");
     }
 
     public boolean getAmbientLightEnabled() {
--- a/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/jfx3dviewer/SettingsController.java	Thu Jul 11 16:03:05 2013 -0700
+++ b/apps/experiments/3DViewer/src/main/java/com/javafx/experiments/jfx3dviewer/SettingsController.java	Thu Jul 11 16:49:50 2013 -0700
@@ -47,7 +47,9 @@
 import javafx.scene.control.ToggleGroup;
 import javafx.scene.paint.Color;
 import com.javafx.experiments.shape3d.SubdivisionMesh;
+import javafx.beans.binding.Bindings;
 import javafx.beans.binding.ObjectBinding;
+import javafx.beans.property.DoubleProperty;
 import javafx.event.EventHandler;
 import javafx.scene.Node;
 import javafx.scene.Parent;
@@ -109,6 +111,10 @@
     public ListView<Transform> transformsList;
     public TitledPane x6;
     public Label selectedNodeLabel;
+    public Slider nearClipSlider;
+    public Slider farClipSlider;
+    public Label nearClipLabel;
+    public Label farClipLabel;
     
     @Override public void initialize(URL location, ResourceBundle resources) {
         // keep one pane open always
@@ -225,6 +231,12 @@
         // wire up settings in CAMERA
         fovSlider.setValue(contentModel.getCamera().getFieldOfView());
         contentModel.getCamera().fieldOfViewProperty().bind(fovSlider.valueProperty());
+        nearClipSlider.setValue(Math.log10(contentModel.getCamera().getNearClip()));
+        farClipSlider.setValue(Math.log10(contentModel.getCamera().getFarClip()));
+        nearClipLabel.textProperty().bind(Bindings.format(nearClipLabel.getText(), contentModel.getCamera().nearClipProperty()));
+        farClipLabel.textProperty().bind(Bindings.format(farClipLabel.getText(), contentModel.getCamera().farClipProperty()));
+        contentModel.getCamera().nearClipProperty().bind(new Power10DoubleBinding(nearClipSlider.valueProperty()));
+        contentModel.getCamera().farClipProperty().bind(new Power10DoubleBinding(farClipSlider.valueProperty()));
 
         hierarachyTreeTable.rootProperty().bind(new ObjectBinding<TreeItem<Node>>() {
 
@@ -394,19 +406,35 @@
                     getChildren().add(new TreeItemImpl(n));
                 }
             }
-//            node.setOnMouseClicked(new EventHandler<MouseEvent>() {
-//
-//                @Override
-//                public void handle(MouseEvent t) {
-//                    System.out.println("node.setOnMouseClicked t = " + t);
-//                    TreeItem<Node> parent = getParent();
-//                    while (parent != null) {
-//                        parent.setExpanded(true);
-//                        parent = parent.getParent();
-//                    }
-//                    hierarachyTreeTable.getSelectionModel().select(TreeItemImpl.this);
-//                }
-//            });
+            node.setOnMouseClicked(new EventHandler<MouseEvent>() {
+
+                @Override
+                public void handle(MouseEvent t) {
+                    TreeItem<Node> parent = getParent();
+                    while (parent != null) {
+                        parent.setExpanded(true);
+                        parent = parent.getParent();
+                    }
+                    hierarachyTreeTable.getSelectionModel().select(TreeItemImpl.this);
+                    hierarachyTreeTable.scrollTo(hierarachyTreeTable.getSelectionModel().getSelectedIndex());
+                    t.consume();
+                }
+            });
+        }
+    }
+
+    private class Power10DoubleBinding extends DoubleBinding {
+
+        private DoubleProperty prop;
+
+        public Power10DoubleBinding(DoubleProperty prop) {
+            this.prop = prop;
+            bind(prop);
+        }
+
+        @Override
+        protected double computeValue() {
+            return Math.pow(10, prop.getValue());
         }
     }
 }
--- a/apps/experiments/3DViewer/src/main/resources/com/javafx/experiments/jfx3dviewer/settings.fxml	Thu Jul 11 16:03:05 2013 -0700
+++ b/apps/experiments/3DViewer/src/main/resources/com/javafx/experiments/jfx3dviewer/settings.fxml	Thu Jul 11 16:49:50 2013 -0700
@@ -1,282 +1,286 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-Copyright (c) 2010, 2013 Oracle and/or its affiliates.
-All rights reserved. Use is subject to license terms.
-
-This file is available and licensed under the following license:
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in
-   the documentation and/or other materials provided with the distribution.
- - Neither the name of Oracle Corporation nor the names of its
-   contributors may be used to endorse or promote products derived
-   from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--->
-<?import java.lang.*?>
-<?import java.net.*?>
-<?import java.util.*?>
-<?import javafx.geometry.*?>
-<?import javafx.scene.control.*?>
-<?import javafx.scene.control.MenuBar?>
-<?import javafx.scene.control.ToolBar?>
-<?import javafx.scene.layout.*?>
-<?import javafx.scene.paint.*?>
-<?import com.javafx.experiments.shape3d.*?>
-<?scenebuilder-stylesheet viewer.css?>
-<!--suppress JavaFxUnresolvedStyleClassReference -->
-
-<Accordion fx:id="settings" minWidth="0.0" prefHeight="798.0" prefWidth="279.0" xmlns:fx="http://javafx.com/fxml" fx:controller="com.javafx.experiments.jfx3dviewer.SettingsController">
-  <expandedPane>
-    <TitledPane fx:id="x5" animated="false" expanded="true" text="Hierarchy">
-      <content>
-        <TreeTableView fx:id="hierarachyTreeTable" editable="true" prefHeight="200.0" prefWidth="200.0">
-          <columns>
-            <TreeTableColumn fx:id="nodeColumn" editable="false" prefWidth="75.0" sortable="false" text="Node" />
-            <TreeTableColumn fx:id="idColumn" editable="false" prefWidth="75.0" text="Id" />
-            <TreeTableColumn fx:id="visibilityColumn" editable="true" text="Visibility" />
-            <TreeTableColumn fx:id="widthColumn" editable="false" text="W" />
-            <TreeTableColumn fx:id="heightColumn" editable="false" text="H" />
-            <TreeTableColumn fx:id="depthColumn" editable="false" text="D" />
-          </columns>
-        </TreeTableView>
-      </content>
-    </TitledPane>
-  </expandedPane>
-  <panes>
-    <TitledPane fx:id="x4" animated="false" expanded="false" text="Options">
-      <content>
-        <GridPane hgap="5.0" styleClass="settings" vgap="5.0">
-          <children>
-            <Label text="Show Axis:" GridPane.columnIndex="0" GridPane.rowIndex="0" />
-            <Label text="Y Up:" GridPane.columnIndex="0" GridPane.rowIndex="1" />
-            <CheckBox fx:id="showAxisCheckBox" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="0" />
-            <CheckBox fx:id="yUpCheckBox" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="1" />
-            <Label text="Scale to Fit" GridPane.columnIndex="0" GridPane.rowIndex="2" />
-            <CheckBox id="yUpCheckBox" fx:id="scaleToFitCheckBox" mnemonicParsing="false" selected="true" text="" GridPane.columnIndex="1" GridPane.rowIndex="2" />
-            <Label text="Background Color" GridPane.columnIndex="0" GridPane.rowIndex="3" />
-            <ColorPicker fx:id="backgroundColorPicker" GridPane.columnIndex="1" GridPane.rowIndex="3" />
-            <Label text="Wireframe" GridPane.columnIndex="0" GridPane.rowIndex="4" />
-            <CheckBox fx:id="wireFrameCheckbox" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="4" />
-            <Label text="Subdivision level" GridPane.columnIndex="0" GridPane.rowIndex="5" />
-            <HBox prefHeight="-1.0" prefWidth="-1.0" GridPane.columnIndex="1" GridPane.rowIndex="5">
-              <children>
-                <ToggleButton mnemonicParsing="false" selected="true" styleClass="left-pill" text="None" userData="0">
-                  <toggleGroup>
-                    <ToggleGroup fx:id="subdivisionLevelGroup" />
-                  </toggleGroup>
-                </ToggleButton>
-                <ToggleButton mnemonicParsing="false" styleClass="center-pill" text="1" toggleGroup="$subdivisionLevelGroup" userData="1" />
-                <ToggleButton mnemonicParsing="false" styleClass="center-pill" text="2" toggleGroup="$subdivisionLevelGroup" userData="2" />
-                <ToggleButton mnemonicParsing="false" styleClass="right-pill" text="3" toggleGroup="$subdivisionLevelGroup" userData="3" />
-              </children>
-            </HBox>
-            <Label text="Creases (Boundary Rules)" GridPane.columnIndex="0" GridPane.rowIndex="6" />
-            <HBox prefHeight="-1.0" prefWidth="-1.0" GridPane.columnIndex="1" GridPane.rowIndex="6">
-              <children>
-                <ToggleButton mnemonicParsing="false" selected="true" styleClass="left-pill" text="Edges">
-                  <toggleGroup>
-                    <ToggleGroup fx:id="subdivisionBoundaryGroup" />
-                  </toggleGroup>
-                  <userData>
-                    <SubdivisionMesh.BoundaryMode fx:value="CREASE_EDGES"/>
-                  </userData>
-                  <tooltip>
-                    <Tooltip text="Only edges at the boundary are treated as creases" />
-                  </tooltip>
-                </ToggleButton>
-                <ToggleButton mnemonicParsing="false" styleClass="right-pill" text="All" toggleGroup="$subdivisionBoundaryGroup">
-                  <userData>
-                    <SubdivisionMesh.BoundaryMode fx:value="CREASE_ALL"/>
-                  </userData>
-                  <tooltip>
-                    <Tooltip text="Edges and points at the boundary are treated as creases" />
-                  </tooltip>
-                </ToggleButton>
-              </children>
-            </HBox>
-            <Label text="Smooth Texture Map" GridPane.columnIndex="0" GridPane.rowIndex="7" />
-            <HBox prefHeight="-1.0" prefWidth="-1.0" GridPane.columnIndex="1" GridPane.rowIndex="7">
-              <children>
-                <ToggleButton mnemonicParsing="false" selected="true" styleClass="left-pill" text="None">
-                  <toggleGroup>
-                    <ToggleGroup fx:id="subdivisionSmoothGroup" />
-                  </toggleGroup>
-                  <userData>
-                    <SubdivisionMesh.MapBorderMode fx:value="NOT_SMOOTH"/>
-                  </userData>
-                  <tooltip>
-                    <Tooltip text="Keeps the same uvs for all control points" />
-                  </tooltip>
-                </ToggleButton>
-                <ToggleButton mnemonicParsing="false" styleClass="center-pill" text="Internal" toggleGroup="$subdivisionSmoothGroup">
-                  <userData>
-                    <SubdivisionMesh.MapBorderMode fx:value="SMOOTH_INTERNAL"/>
-                  </userData>
-                  <tooltip>
-                    <Tooltip text="Smooths uvs of points at corners" />
-                  </tooltip>
-                </ToggleButton>
-                <ToggleButton mnemonicParsing="false" styleClass="right-pill" text="All" toggleGroup="$subdivisionSmoothGroup">
-                  <userData>
-                    <SubdivisionMesh.MapBorderMode fx:value="SMOOTH_ALL"/>
-                  </userData>
-                  <tooltip>
-                    <Tooltip text="Smooths uvs of points at boundaries" />
-                  </tooltip>
-                </ToggleButton>
-              </children>
-            </HBox>
-            <Region maxHeight="1.7976931348623157E308" prefHeight="-1.0" prefWidth="-1.0" GridPane.columnIndex="0" GridPane.rowIndex="8" />
-          </children>
-          <columnConstraints>
-            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
-            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
-          </columnConstraints>
-          <padding>
-            <Insets bottom="8.0" left="8.0" right="8.0" top="8.0" fx:id="x3" />
-          </padding>
-          <rowConstraints>
-            <RowConstraints minHeight="10.0" prefHeight="-1.0" vgrow="SOMETIMES" />
-            <RowConstraints minHeight="10.0" prefHeight="-1.0" vgrow="SOMETIMES" />
-            <RowConstraints minHeight="10.0" prefHeight="-1.0" vgrow="SOMETIMES" />
-            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-            <RowConstraints minHeight="10.0" vgrow="ALWAYS" />
-          </rowConstraints>
-        </GridPane>
-      </content>
-    </TitledPane>
-    <TitledPane fx:id="x2" animated="false" text="Lights">
-      <content>
-        <ScrollPane fitToWidth="true" prefHeight="200.0" prefWidth="200.0">
-          <content>
-            <GridPane hgap="5.0" padding="$x3" styleClass="settings" vgap="5.0">
-              <children>
-                <Label text="Color:" GridPane.columnIndex="0" GridPane.rowIndex="2" />
-                <Label maxWidth="1.7976931348623157E308" styleClass="settings-header" text="Ambient" GridPane.columnIndex="0" GridPane.columnSpan="2147483647" GridPane.hgrow="ALWAYS" GridPane.rowIndex="0" />
-                <ColorPicker fx:id="ambientColorPicker" GridPane.columnIndex="1" GridPane.rowIndex="2" />
-                <Label text="Enabled" GridPane.columnIndex="0" GridPane.rowIndex="1" />
-                <CheckBox fx:id="ambientEnableCheckbox" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="1" />
-                <Label text="Color:" GridPane.columnIndex="0" GridPane.rowIndex="5" />
-                <ColorPicker id="ambientColorPicker" fx:id="light1ColorPicker" GridPane.columnIndex="1" GridPane.rowIndex="5" />
-                <Label maxWidth="1.7976931348623157E308" styleClass="settings-header" text="Light 1 (Camera)" GridPane.columnIndex="0" GridPane.columnSpan="2" GridPane.hgrow="ALWAYS" GridPane.rowIndex="3" />
-                <Label text="Enabled" GridPane.columnIndex="0" GridPane.rowIndex="4" />
-                <CheckBox fx:id="light1EnabledCheckBox" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="4" />
-                <Label text="Lock to Camera" GridPane.columnIndex="0" GridPane.rowIndex="6" />
-                <CheckBox fx:id="light1followCameraCheckBox" mnemonicParsing="false" selected="true" text="" GridPane.columnIndex="1" GridPane.rowIndex="6" />
-                <Label text="X" GridPane.columnIndex="0" GridPane.rowIndex="7" />
-                <Slider fx:id="light1x" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="7" />
-                <Label text="Y" GridPane.columnIndex="0" GridPane.rowIndex="8" />
-                <Slider fx:id="light1y" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="8" />
-                <Label text="Z" GridPane.columnIndex="0" GridPane.rowIndex="9" />
-                <Slider fx:id="light1z" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="9" />
-                <Label maxWidth="1.7976931348623157E308" styleClass="settings-header" text="Light 2" GridPane.columnIndex="0" GridPane.columnSpan="2" GridPane.hgrow="ALWAYS" GridPane.rowIndex="10" />
-                <Label text="Enabled" GridPane.columnIndex="0" GridPane.rowIndex="11" />
-                <CheckBox fx:id="light2EnabledCheckBox" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="11" />
-                <Label text="X" GridPane.columnIndex="0" GridPane.rowIndex="13" />
-                <Slider fx:id="light2x" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="13" />
-                <Label text="Y" GridPane.columnIndex="0" GridPane.rowIndex="14" />
-                <Slider fx:id="light2y" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="14" />
-                <Label text="Z" GridPane.columnIndex="0" GridPane.rowIndex="15" />
-                <Slider fx:id="light2z" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="15" />
-                <Label maxWidth="1.7976931348623157E308" styleClass="settings-header" text="Light 3" GridPane.columnIndex="0" GridPane.columnSpan="2" GridPane.hgrow="ALWAYS" GridPane.rowIndex="16" />
-                <Label text="Enabled" GridPane.columnIndex="0" GridPane.rowIndex="17" />
-                <CheckBox fx:id="light3EnabledCheckBox" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="17" />
-                <Label text="Lock to Camera" GridPane.columnIndex="0" GridPane.rowIndex="19" />
-                <Slider fx:id="light3x" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="19" />
-                <Label text="Y" GridPane.columnIndex="0" GridPane.rowIndex="20" />
-                <Slider fx:id="light3y" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="20" />
-                <Label text="Z" GridPane.columnIndex="0" GridPane.rowIndex="21" />
-                <Slider fx:id="light3z" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="21" />
-                <Label text="Color:" GridPane.columnIndex="0" GridPane.rowIndex="12" />
-                <ColorPicker fx:id="light2ColorPicker" GridPane.columnIndex="1" GridPane.rowIndex="12" />
-                <Label text="Color" GridPane.columnIndex="0" GridPane.rowIndex="18" />
-                <ColorPicker fx:id="light3ColorPicker" GridPane.columnIndex="1" GridPane.rowIndex="18" />
-              </children>
-              <columnConstraints>
-                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
-                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
-              </columnConstraints>
-              <rowConstraints>
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
-              </rowConstraints>
-            </GridPane>
-          </content>
-        </ScrollPane>
-      </content>
-    </TitledPane>
-    <TitledPane fx:id="x1" animated="false" text="Camera">
-      <content>
-        <GridPane hgap="5.0" padding="$x3" styleClass="settings" vgap="5.0">
-          <children>
-            <Label text="Field of view:" GridPane.columnIndex="0" GridPane.rowIndex="0" />
-            <Slider fx:id="fovSlider" majorTickUnit="40.0" max="180.0" min="0.0" minorTickCount="4" showTickLabels="true" showTickMarks="true" GridPane.columnIndex="1" GridPane.rowIndex="0" />
-          </children>
-          <columnConstraints>
-            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
-            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
-          </columnConstraints>
-          <rowConstraints>
-            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
-          </rowConstraints>
-        </GridPane>
-      </content>
-    </TitledPane>
-    <fx:reference source="x5" />
-    <TitledPane fx:id="x6" animated="false" expanded="false" text="Transforms">
-      <content>
-        <VBox>
-          <children>
-            <Label fx:id="selectedNodeLabel"/>
-            <ListView fx:id="transformsList" prefHeight="200.0" prefWidth="200.0">
-                <VBox.vgrow>ALWAYS</VBox.vgrow>
-            </ListView>
-          </children>
-        </VBox>
-      </content>
-    </TitledPane>
-  </panes>
-</Accordion>
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Copyright (c) 2010, 2013 Oracle and/or its affiliates.
+All rights reserved. Use is subject to license terms.
+
+This file is available and licensed under the following license:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ - Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the distribution.
+ - Neither the name of Oracle Corporation nor the names of its
+   contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<?import java.lang.*?>
+<?import java.net.*?>
+<?import java.util.*?>
+<?import javafx.geometry.*?>
+<?import javafx.scene.control.*?>
+<?import javafx.scene.control.MenuBar?>
+<?import javafx.scene.control.ToolBar?>
+<?import javafx.scene.layout.*?>
+<?import javafx.scene.paint.*?>
+<?import com.javafx.experiments.shape3d.*?>
+<?scenebuilder-stylesheet viewer.css?>
+<!--suppress JavaFxUnresolvedStyleClassReference -->
+
+<Accordion fx:id="settings" minWidth="0.0" prefHeight="798.0" prefWidth="279.0" xmlns:fx="http://javafx.com/fxml" fx:controller="com.javafx.experiments.jfx3dviewer.SettingsController">
+  <expandedPane>
+    <TitledPane fx:id="x5" animated="false" expanded="true" text="Hierarchy">
+      <content>
+        <TreeTableView fx:id="hierarachyTreeTable" editable="true" prefHeight="200.0" prefWidth="200.0">
+          <columns>
+            <TreeTableColumn fx:id="nodeColumn" editable="false" prefWidth="75.0" sortable="false" text="Node" />
+            <TreeTableColumn fx:id="idColumn" editable="false" prefWidth="75.0" text="Id" />
+            <TreeTableColumn fx:id="visibilityColumn" editable="true" text="Visibility" />
+            <TreeTableColumn fx:id="widthColumn" editable="false" text="W" />
+            <TreeTableColumn fx:id="heightColumn" editable="false" text="H" />
+            <TreeTableColumn fx:id="depthColumn" editable="false" text="D" />
+          </columns>
+        </TreeTableView>
+      </content>
+    </TitledPane>
+  </expandedPane>
+  <panes>
+    <TitledPane fx:id="x4" animated="false" expanded="false" text="Options">
+      <content>
+        <GridPane hgap="5.0" styleClass="settings" vgap="5.0">
+          <children>
+            <Label text="Show Axis:" GridPane.columnIndex="0" GridPane.rowIndex="0" />
+            <Label text="Y Up:" GridPane.columnIndex="0" GridPane.rowIndex="1" />
+            <CheckBox fx:id="showAxisCheckBox" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="0" />
+            <CheckBox fx:id="yUpCheckBox" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="1" />
+            <Label text="Scale to Fit" GridPane.columnIndex="0" GridPane.rowIndex="2" />
+            <CheckBox id="yUpCheckBox" fx:id="scaleToFitCheckBox" mnemonicParsing="false" selected="true" text="" GridPane.columnIndex="1" GridPane.rowIndex="2" />
+            <Label text="Background Color" GridPane.columnIndex="0" GridPane.rowIndex="3" />
+            <ColorPicker fx:id="backgroundColorPicker" GridPane.columnIndex="1" GridPane.rowIndex="3" />
+            <Label text="Wireframe" GridPane.columnIndex="0" GridPane.rowIndex="4" />
+            <CheckBox fx:id="wireFrameCheckbox" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="4" />
+            <Label text="Subdivision level" GridPane.columnIndex="0" GridPane.rowIndex="5" />
+            <HBox prefHeight="-1.0" prefWidth="-1.0" GridPane.columnIndex="1" GridPane.rowIndex="5">
+              <children>
+                <ToggleButton mnemonicParsing="false" selected="true" styleClass="left-pill" text="None" userData="0">
+                  <toggleGroup>
+                    <ToggleGroup fx:id="subdivisionLevelGroup" />
+                  </toggleGroup>
+                </ToggleButton>
+                <ToggleButton mnemonicParsing="false" styleClass="center-pill" text="1" toggleGroup="$subdivisionLevelGroup" userData="1" />
+                <ToggleButton mnemonicParsing="false" styleClass="center-pill" text="2" toggleGroup="$subdivisionLevelGroup" userData="2" />
+                <ToggleButton mnemonicParsing="false" styleClass="right-pill" text="3" toggleGroup="$subdivisionLevelGroup" userData="3" />
+              </children>
+            </HBox>
+            <Label text="Creases (Boundary Rules)" GridPane.columnIndex="0" GridPane.rowIndex="6" />
+            <HBox prefHeight="-1.0" prefWidth="-1.0" GridPane.columnIndex="1" GridPane.rowIndex="6">
+              <children>
+                <ToggleButton mnemonicParsing="false" selected="true" styleClass="left-pill" text="Edges">
+                  <toggleGroup>
+                    <ToggleGroup fx:id="subdivisionBoundaryGroup" />
+                  </toggleGroup>
+                  <userData>
+                    <SubdivisionMesh.BoundaryMode fx:value="CREASE_EDGES"/>
+                  </userData>
+                  <tooltip>
+                    <Tooltip text="Only edges at the boundary are treated as creases" />
+                  </tooltip>
+                </ToggleButton>
+                <ToggleButton mnemonicParsing="false" styleClass="right-pill" text="All" toggleGroup="$subdivisionBoundaryGroup">
+                  <userData>
+                    <SubdivisionMesh.BoundaryMode fx:value="CREASE_ALL"/>
+                  </userData>
+                  <tooltip>
+                    <Tooltip text="Edges and points at the boundary are treated as creases" />
+                  </tooltip>
+                </ToggleButton>
+              </children>
+            </HBox>
+            <Label text="Smooth Texture Map" GridPane.columnIndex="0" GridPane.rowIndex="7" />
+            <HBox prefHeight="-1.0" prefWidth="-1.0" GridPane.columnIndex="1" GridPane.rowIndex="7">
+              <children>
+                <ToggleButton mnemonicParsing="false" selected="true" styleClass="left-pill" text="None">
+                  <toggleGroup>
+                    <ToggleGroup fx:id="subdivisionSmoothGroup" />
+                  </toggleGroup>
+                  <userData>
+                    <SubdivisionMesh.MapBorderMode fx:value="NOT_SMOOTH"/>
+                  </userData>
+                  <tooltip>
+                    <Tooltip text="Keeps the same uvs for all control points" />
+                  </tooltip>
+                </ToggleButton>
+                <ToggleButton mnemonicParsing="false" styleClass="center-pill" text="Internal" toggleGroup="$subdivisionSmoothGroup">
+                  <userData>
+                    <SubdivisionMesh.MapBorderMode fx:value="SMOOTH_INTERNAL"/>
+                  </userData>
+                  <tooltip>
+                    <Tooltip text="Smooths uvs of points at corners" />
+                  </tooltip>
+                </ToggleButton>
+                <ToggleButton mnemonicParsing="false" styleClass="right-pill" text="All" toggleGroup="$subdivisionSmoothGroup">
+                  <userData>
+                    <SubdivisionMesh.MapBorderMode fx:value="SMOOTH_ALL"/>
+                  </userData>
+                  <tooltip>
+                    <Tooltip text="Smooths uvs of points at boundaries" />
+                  </tooltip>
+                </ToggleButton>
+              </children>
+            </HBox>
+            <Region maxHeight="1.7976931348623157E308" prefHeight="-1.0" prefWidth="-1.0" GridPane.columnIndex="0" GridPane.rowIndex="8" />
+          </children>
+          <columnConstraints>
+            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
+            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
+          </columnConstraints>
+          <padding>
+            <Insets bottom="8.0" left="8.0" right="8.0" top="8.0" fx:id="x3" />
+          </padding>
+          <rowConstraints>
+            <RowConstraints minHeight="10.0" prefHeight="-1.0" vgrow="SOMETIMES" />
+            <RowConstraints minHeight="10.0" prefHeight="-1.0" vgrow="SOMETIMES" />
+            <RowConstraints minHeight="10.0" prefHeight="-1.0" vgrow="SOMETIMES" />
+            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+            <RowConstraints minHeight="10.0" vgrow="ALWAYS" />
+          </rowConstraints>
+        </GridPane>
+      </content>
+    </TitledPane>
+    <TitledPane fx:id="x2" animated="false" text="Lights">
+      <content>
+        <ScrollPane fitToWidth="true" prefHeight="200.0" prefWidth="200.0">
+          <content>
+            <GridPane hgap="5.0" padding="$x3" styleClass="settings" vgap="5.0">
+              <children>
+                <Label text="Color:" GridPane.columnIndex="0" GridPane.rowIndex="2" />
+                <Label maxWidth="1.7976931348623157E308" styleClass="settings-header" text="Ambient" GridPane.columnIndex="0" GridPane.columnSpan="2147483647" GridPane.hgrow="ALWAYS" GridPane.rowIndex="0" />
+                <ColorPicker fx:id="ambientColorPicker" GridPane.columnIndex="1" GridPane.rowIndex="2" />
+                <Label text="Enabled" GridPane.columnIndex="0" GridPane.rowIndex="1" />
+                <CheckBox fx:id="ambientEnableCheckbox" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="1" />
+                <Label text="Color:" GridPane.columnIndex="0" GridPane.rowIndex="5" />
+                <ColorPicker id="ambientColorPicker" fx:id="light1ColorPicker" GridPane.columnIndex="1" GridPane.rowIndex="5" />
+                <Label maxWidth="1.7976931348623157E308" styleClass="settings-header" text="Light 1 (Camera)" GridPane.columnIndex="0" GridPane.columnSpan="2" GridPane.hgrow="ALWAYS" GridPane.rowIndex="3" />
+                <Label text="Enabled" GridPane.columnIndex="0" GridPane.rowIndex="4" />
+                <CheckBox fx:id="light1EnabledCheckBox" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="4" />
+                <Label text="Lock to Camera" GridPane.columnIndex="0" GridPane.rowIndex="6" />
+                <CheckBox fx:id="light1followCameraCheckBox" mnemonicParsing="false" selected="true" text="" GridPane.columnIndex="1" GridPane.rowIndex="6" />
+                <Label text="X" GridPane.columnIndex="0" GridPane.rowIndex="7" />
+                <Slider fx:id="light1x" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="7" />
+                <Label text="Y" GridPane.columnIndex="0" GridPane.rowIndex="8" />
+                <Slider fx:id="light1y" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="8" />
+                <Label text="Z" GridPane.columnIndex="0" GridPane.rowIndex="9" />
+                <Slider fx:id="light1z" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="9" />
+                <Label maxWidth="1.7976931348623157E308" styleClass="settings-header" text="Light 2" GridPane.columnIndex="0" GridPane.columnSpan="2" GridPane.hgrow="ALWAYS" GridPane.rowIndex="10" />
+                <Label text="Enabled" GridPane.columnIndex="0" GridPane.rowIndex="11" />
+                <CheckBox fx:id="light2EnabledCheckBox" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="11" />
+                <Label text="X" GridPane.columnIndex="0" GridPane.rowIndex="13" />
+                <Slider fx:id="light2x" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="13" />
+                <Label text="Y" GridPane.columnIndex="0" GridPane.rowIndex="14" />
+                <Slider fx:id="light2y" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="14" />
+                <Label text="Z" GridPane.columnIndex="0" GridPane.rowIndex="15" />
+                <Slider fx:id="light2z" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="15" />
+                <Label maxWidth="1.7976931348623157E308" styleClass="settings-header" text="Light 3" GridPane.columnIndex="0" GridPane.columnSpan="2" GridPane.hgrow="ALWAYS" GridPane.rowIndex="16" />
+                <Label text="Enabled" GridPane.columnIndex="0" GridPane.rowIndex="17" />
+                <CheckBox fx:id="light3EnabledCheckBox" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="17" />
+                <Label text="Lock to Camera" GridPane.columnIndex="0" GridPane.rowIndex="19" />
+                <Slider fx:id="light3x" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="19" />
+                <Label text="Y" GridPane.columnIndex="0" GridPane.rowIndex="20" />
+                <Slider fx:id="light3y" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="20" />
+                <Label text="Z" GridPane.columnIndex="0" GridPane.rowIndex="21" />
+                <Slider fx:id="light3z" majorTickUnit="20.0" max="20.0" min="-20.0" minorTickCount="5" showTickLabels="true" showTickMarks="false" value="0.0" GridPane.columnIndex="1" GridPane.rowIndex="21" />
+                <Label text="Color:" GridPane.columnIndex="0" GridPane.rowIndex="12" />
+                <ColorPicker fx:id="light2ColorPicker" GridPane.columnIndex="1" GridPane.rowIndex="12" />
+                <Label text="Color" GridPane.columnIndex="0" GridPane.rowIndex="18" />
+                <ColorPicker fx:id="light3ColorPicker" GridPane.columnIndex="1" GridPane.rowIndex="18" />
+              </children>
+              <columnConstraints>
+                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
+                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
+              </columnConstraints>
+              <rowConstraints>
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
+              </rowConstraints>
+            </GridPane>
+          </content>
+        </ScrollPane>
+      </content>
+    </TitledPane>
+    <TitledPane fx:id="x1" animated="false" text="Camera">
+      <content>
+        <GridPane hgap="5.0" padding="$x3" styleClass="settings" vgap="5.0">
+          <children>
+            <Label text="Field of view:" GridPane.columnIndex="0" GridPane.rowIndex="0" />
+            <Slider fx:id="fovSlider" majorTickUnit="40.0" max="180.0" min="0.0" minorTickCount="4" showTickLabels="true" showTickMarks="true" GridPane.columnIndex="1" GridPane.rowIndex="0" />
+            <Label fx:id="nearClipLabel" text="Near clipping pane: &#10;   %.5f" GridPane.columnIndex="0" GridPane.rowIndex="1" />
+            <Slider fx:id="nearClipSlider" majorTickUnit="1" max="5" min="-5" minorTickCount="4" showTickLabels="true" showTickMarks="true" GridPane.columnIndex="1" GridPane.rowIndex="1" />
+            <Label fx:id="farClipLabel" text="Far clipping pane: &#10;   %.5f" GridPane.columnIndex="0" GridPane.rowIndex="2" />
+            <Slider fx:id="farClipSlider" majorTickUnit="1" max="5" min="-5" minorTickCount="4" showTickLabels="true" showTickMarks="true" GridPane.columnIndex="1" GridPane.rowIndex="2" />
+          </children>
+          <columnConstraints>
+            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
+            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
+          </columnConstraints>
+          <rowConstraints>
+            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
+          </rowConstraints>
+        </GridPane>
+      </content>
+    </TitledPane>
+    <fx:reference source="x5" />
+    <TitledPane fx:id="x6" animated="false" expanded="false" text="Transforms">
+      <content>
+        <VBox>
+          <children>
+            <Label fx:id="selectedNodeLabel"/>
+            <ListView fx:id="transformsList" prefHeight="200.0" prefWidth="200.0">
+                <VBox.vgrow>ALWAYS</VBox.vgrow>
+            </ListView>
+          </children>
+        </VBox>
+      </content>
+    </TitledPane>
+  </panes>
+</Accordion>