private static Bounds unionOfBounds(Bounds b1, Bounds b2) { final Bounds result; if (b1.isEmpty()) { result = b2; } else if (b2.isEmpty()) { result = b1; } else { final double minX = Math.min(b1.getMinX(), b2.getMinX()); final double minY = Math.min(b1.getMinY(), b2.getMinY()); final double minZ = Math.min(b1.getMinZ(), b2.getMinZ()); final double maxX = Math.max(b1.getMaxX(), b2.getMaxX()); final double maxY = Math.max(b1.getMaxY(), b2.getMaxY()); final double maxZ = Math.max(b1.getMaxZ(), b2.getMaxZ()); assert minX <= maxX; assert minY <= maxY; assert minZ <= maxZ; result = new BoundingBox(minX, minY, minZ, maxX - minX, maxY - minY, maxZ - minZ); } return result; }
private static boolean areBoundsVisible(Bounds bounds) { return !bounds.isEmpty(); }
private void adjustWorkspace() { final Bounds backgroundBounds, extensionBounds; final Object userSceneGraph; if (fxomDocument == null) { userSceneGraph = null; } else { userSceneGraph = fxomDocument.getSceneGraphRoot(); } if ((userSceneGraph instanceof Node) && (layoutException == null)) { final Node rootNode = (Node) userSceneGraph; final Bounds rootBounds = rootNode.getLayoutBounds(); if (rootBounds.isEmpty() || (rootBounds.getWidth() == 0.0) || (rootBounds.getHeight() == 0.0)) { backgroundBounds = new BoundingBox(0.0, 0.0, 0.0, 0.0); extensionBounds = new BoundingBox(0.0, 0.0, 0.0, 0.0); } else { final double scale; if ((rootBounds.getDepth() > 0) && autoResize3DContent) { // Content is 3D final double scaleX = AUTORESIZE_SIZE / rootBounds.getWidth(); final double scaleY = AUTORESIZE_SIZE / rootBounds.getHeight(); final double scaleZ = AUTORESIZE_SIZE / rootBounds.getDepth(); scale = Math.min(scaleX, Math.min(scaleY, scaleZ)); } else { scale = 1.0; } contentGroup.setScaleX(scale); contentGroup.setScaleY(scale); contentGroup.setScaleZ(scale); final Bounds contentBounds = rootNode.localToParent(rootBounds); backgroundBounds = new BoundingBox( 0.0, 0.0, contentBounds.getMinX() + contentBounds.getWidth(), contentBounds.getMinY() + contentBounds.getHeight()); final Bounds unclippedRootBounds = computeUnclippedBounds(rootNode); assert unclippedRootBounds.getHeight() != 0.0; assert unclippedRootBounds.getWidth() != 0.0; assert rootNode.getParent() == contentGroup; final Bounds unclippedContentBounds = rootNode.localToParent(unclippedRootBounds); extensionBounds = computeExtensionBounds(backgroundBounds, unclippedContentBounds); } } else { backgroundBounds = new BoundingBox(0.0, 0.0, 320.0, 150.0); extensionBounds = new BoundingBox(0.0, 0.0, 0.0, 0.0); } backgroundPane.setPrefWidth(backgroundBounds.getWidth()); backgroundPane.setPrefHeight(backgroundBounds.getHeight()); extensionRect.setX(extensionBounds.getMinX()); extensionRect.setY(extensionBounds.getMinY()); extensionRect.setWidth(extensionBounds.getWidth()); extensionRect.setHeight(extensionBounds.getHeight()); contentSubScene.setWidth(contentGroup.getLayoutBounds().getWidth()); contentSubScene.setHeight(contentGroup.getLayoutBounds().getHeight()); }