package org.simantics.proconf.g3d.base; import javax.vecmath.AxisAngle4d; import javax.vecmath.Tuple3d; import org.simantics.db.Resource; import org.simantics.layer0.utils.IEntity; import org.simantics.proconf.g3d.Resources; /** * Set of methods that make scene-graph handling easier. * * * @author Marko Luukkainen * */ public class G3DAPI { public static void setWorldPosition(IEntity node, Tuple3d position) { G3DTools.setTuple3(node.getSingleRelatedObject(Resources.g3dResource.HasWorldPosition), position); //G3DTools.transformationUpdate(node.getGraph(), node.getResource()); G3DTools.propagateWorldTransformChange(node.getSingleRelatedObject(Resources.g3dResource.HasParent), node); } public static void setLocalPosition(IEntity node, Tuple3d position) { G3DTools.setTuple3(node.getSingleRelatedObject(Resources.g3dResource.HasLocalPosition), position); //G3DTools.transformationUpdate(node.getGraph(), node.getResource()); G3DTools.propagateLocalTransformChange(node.getSingleRelatedObject(Resources.g3dResource.HasParent), node); } public static void setWorldOrientation(IEntity node, AxisAngle4d orientation) { G3DTools.setOrientation(node.getSingleRelatedObject(Resources.g3dResource.HasWorldOrientation), orientation); //G3DTools.transformationUpdate(node.getGraph(), node.getResource()); G3DTools.propagateWorldTransformChange(node.getSingleRelatedObject(Resources.g3dResource.HasParent), node); } public static void setLocalOrientation(IEntity node, AxisAngle4d orientation) { G3DTools.setOrientation(node.getSingleRelatedObject(Resources.g3dResource.HasLocalOrientation), orientation); //G3DTools.transformationUpdate(node.getGraph(), node.getResource()); G3DTools.propagateLocalTransformChange(node.getSingleRelatedObject(Resources.g3dResource.HasParent), node); } public static void setWorldTransformation(IEntity node, Tuple3d position, AxisAngle4d orientation) { G3DTools.setTuple3(node.getSingleRelatedObject(Resources.g3dResource.HasWorldPosition), position); G3DTools.setOrientation(node.getSingleRelatedObject(Resources.g3dResource.HasWorldOrientation), orientation); //G3DTools.transformationUpdate(node.getGraph(), node.getResource()); G3DTools.propagateWorldTransformChange(node.getSingleRelatedObject(Resources.g3dResource.HasParent), node); } public static void setLocalTransformation(IEntity node, Tuple3d position, AxisAngle4d orientation) { G3DTools.setTuple3(node.getSingleRelatedObject(Resources.g3dResource.HasLocalPosition), position); G3DTools.setOrientation(node.getSingleRelatedObject(Resources.g3dResource.HasLocalOrientation), orientation); //G3DTools.transformationUpdate(node.getGraph(), node.getResource()); G3DTools.propagateLocalTransformChange(node.getSingleRelatedObject(Resources.g3dResource.HasParent), node); } public static void addNodeWorld(IEntity parent, IEntity node) { parent.addStatement(Resources.g3dResource.HasChild, node); G3DTools.propagateWorldTransformChange(parent,node); } public static void addNodeLocal(IEntity parent, IEntity node) { parent.addStatement(Resources.g3dResource.HasChild, node); G3DTools.propagateLocalTransformChange(parent,node); } public static void addNodeWorld(IEntity parent, Resource relation, IEntity node) { assert(parent.getGraph().isSubrelationOf(relation, Resources.g3dResource.HasChild)); parent.addStatement(relation, node); G3DTools.propagateWorldTransformChange(parent,node); } public static void addNodeLocal(IEntity parent, Resource relation, IEntity node) { assert(parent.getGraph().isSubrelationOf(relation, Resources.g3dResource.HasChild)); parent.addStatement(relation, node); G3DTools.propagateLocalTransformChange(parent,node); } public static void removeNode(IEntity node) { node.removeRelatedStatements(Resources.g3dResource.HasParent); } public static void moveNode(IEntity node, IEntity newParent) { node.removeRelatedStatements(Resources.g3dResource.HasParent); newParent.addStatement(Resources.g3dResource.HasChild, node); G3DTools.propagateWorldTransformChange(newParent,node); } }