Programmatically Changing Openings
Code: Select all
private void shutTheDoor(HomeDoorOrWindow furniture) {
ModelManager modelManager = ModelManager.getInstance();
HomePieceOfFurniture3D modelNode = new HomePieceOfFurniture3D(furniture, home);
BoundingBox oldBounds = modelManager.getBounds(modelNode);
System.out.println("oldBounds: " + oldBounds);
Point3d oldLower = new Point3d();
oldBounds.getLower(oldLower);
System.out.println("oldLower: " + oldLower);
Point3d oldUpper = new Point3d();
oldBounds.getUpper(oldUpper);
System.out.println("oldUpper: " + oldUpper);
setNodeTransformations(modelNode, null);
BoundingBox newBounds = modelManager.getBounds(modelNode);
System.out.println("newBounds: " + newBounds);
Point3d newLower = new Point3d();
newBounds.getLower(newLower);
System.out.println("newLower: " + newLower);
Point3d newUpper = new Point3d();
newBounds.getUpper(newUpper);
System.out.println("newUpper: " + newUpper);
furniture.setX(furniture.getX() + (float)(newUpper.x + newLower.x) / 2 - (float)(oldUpper.x + oldLower.x) / 2);
furniture.setY(furniture.getY() + (float)(newUpper.z + newLower.z) / 2 - (float)(oldUpper.z + oldLower.z) / 2);
furniture.setElevation(furniture.getElevation() + (float)(newLower.y - oldLower.y));
furniture.setWidth((float)(newUpper.x - newLower.x));
furniture.setDepth((float)(newUpper.z - newLower.z));
furniture.setHeight((float)(newUpper.y - newLower.y));
furniture.setModelTransformations(null);
}
private void setNodeTransformations(Node node, Transformation [] transformations) {
if (node instanceof Group) {
if (node instanceof TransformGroup
&& node.getUserData() instanceof String
&& ((String)node.getUserData()).endsWith(ModelManager.DEFORMABLE_TRANSFORM_GROUP_SUFFIX)) {
System.out.println("Setting new transform for " + (String)node.getUserData());
TransformGroup transformGroup = (TransformGroup)node;
transformGroup.setTransform(new Transform3D());
if (transformations != null) {
String transformationName = (String)node.getUserData();
transformationName = transformationName.substring(0, transformationName.length() - ModelManager.DEFORMABLE_TRANSFORM_GROUP_SUFFIX.length());
for (Transformation transformation : transformations) {
if (transformationName.equals(transformation.getName())) {
System.out.println("XXX");
float [][] matrix = transformation.getMatrix();
Matrix4f transformMatrix = new Matrix4f();
transformMatrix.setRow(0, matrix[0]);
transformMatrix.setRow(1, matrix[1]);
transformMatrix.setRow(2, matrix[2]);
transformMatrix.setRow(3, new float [] {0, 0, 0, 1});
transformGroup.setTransform(new Transform3D(transformMatrix));
}
}
}
}
Enumeration<?> enumeration = ((Group)node).getAllChildren();
while (enumeration.hasMoreElements()) {
setNodeTransformations((Node)enumeration.nextElement(), transformations);
}
}
}Code: Select all
oldBounds: Bounding box: Lower=492.4598841340258 0.0 -2029.357666015625 Upper=583.4937291472243 208.5 -1943.9011759098528
newBounds: Bounding box: Lower=492.02176349361724 0.0 -2029.3576131526472 Upper=583.4937291472243 208.5 -1943.9011759098528Code: Select all
X= 538, Y= -1986.6, Elevation= 0, Angle= 270, Width= 85.5, Depth= 91, Height= 208.5Code: Select all
X= 507.5, Y= -1982.6, Elevation= 0, Angle= 270, Width= 77.3, Depth= 30.9, Height= 208.5Code: Select all
X= 537.8, Y= -1986.6, Elevation= 0, Angle= 270, Width= 91.5, Depth= 85.5, Height= 208.5