diff --git a/FXyz-Samples/src/main/java/org/fxyz3d/samples/importers/ImportMaya.java b/FXyz-Samples/src/main/java/org/fxyz3d/samples/importers/ImportMaya.java index f927cc1a..b0ea114c 100644 --- a/FXyz-Samples/src/main/java/org/fxyz3d/samples/importers/ImportMaya.java +++ b/FXyz-Samples/src/main/java/org/fxyz3d/samples/importers/ImportMaya.java @@ -67,11 +67,17 @@ protected void createMesh() { Pair content = Importer3D.loadIncludingAnimation(ImportMaya.class.getResource("/org/fxyz3d/importers/King_WalkCycle.ma").toExternalForm(), asPolygonMesh); model = content.getKey(); - + Timeline timeline = content.getValue(); if (timeline != null) { timeline.setCycleCount(Timeline.INDEFINITE); timeline.play(); + + model.sceneProperty().addListener((obs, ov, nv) -> { + if (nv == null) { + timeline.stop(); + } + }); } } catch (IOException ex) { Logger.getLogger(ImportMaya.class.getName()).log(Level.SEVERE, null, ex); diff --git a/FXyz-Samples/src/main/java/org/fxyz3d/samples/shapes/ShapeBaseSample.java b/FXyz-Samples/src/main/java/org/fxyz3d/samples/shapes/ShapeBaseSample.java index 4d197144..a754e6e3 100644 --- a/FXyz-Samples/src/main/java/org/fxyz3d/samples/shapes/ShapeBaseSample.java +++ b/FXyz-Samples/src/main/java/org/fxyz3d/samples/shapes/ShapeBaseSample.java @@ -31,6 +31,8 @@ import java.text.NumberFormat; import java.util.concurrent.CountDownLatch; +import javafx.beans.InvalidationListener; +import javafx.beans.Observable; import javafx.beans.property.BooleanProperty; import javafx.beans.property.Property; import javafx.beans.property.SimpleBooleanProperty; @@ -119,13 +121,11 @@ public abstract class ShapeBaseSample extends FXyzSample { private ProgressBar progressBar; private long time; - private final BooleanProperty isActive = new SimpleBooleanProperty(this, "activeSample", false); protected final BooleanProperty useSkybox = new SimpleBooleanProperty(this, "SkyBox Enabled", false); private final BooleanProperty isPicking = new SimpleBooleanProperty(this, "isPicking"); protected final Property drawMode = new SimpleObjectProperty<>(model, "drawMode", DrawMode.FILL); protected final Property culling = new SimpleObjectProperty<>(model, "culling", CullFace.BACK); - private final CountDownLatch latch = new CountDownLatch(1); private final NumberFormat numberFormat = NumberFormat.getInstance(); private Vec3d vecIni, vecPos; @@ -425,6 +425,18 @@ protected void succeeded() { } if (model != null) { + // remove old model when it is detached from the scene + model.sceneProperty().addListener(new InvalidationListener() { + @Override + public void invalidated(Observable observable) { + if (model.getScene() == null) { + model.sceneProperty().removeListener(this); + releaseBinders(); + group.getChildren().remove(model); + model = null; + } + } + }); group.getChildren().add(model); } else { throw new UnsupportedOperationException("Model returned Null ... "); @@ -492,16 +504,6 @@ public Node getSample() { progressBar.setProgress(-1); mainPane.getChildren().add(progressBar); - parentPane.parentProperty().addListener(l->{ - if(parentPane.getScene() != null){ - if(model != null){ - attachBinders(); - } - }else{ - releaseBinders(); - } - }); - return parentPane; }