use of javax.media.j3d.Switch in project ffx by mjschnie.
the class MolecularAssembly method createScene.
/**
* The MolecularAssembly BranchGroup has two TransformGroups between it and
* the "base" node where geometry is attached. If the point between the two
* transformations is where user rotation occurs. For example, if rotating
* about the center of mass of the system, the RotToCOM transformation will
* be an identity transformation (ie. none). If rotation is about some atom
* or group of atoms within the system, then the RotToCOM transformation
* will be a translation from that point to the COM.
*
* @param zero boolean
* @return BranchGroup
*/
public BranchGroup createScene(boolean zero) {
originToRotT3D = new Transform3D();
originToRotV3D = new Vector3d();
originToRot = new TransformGroup(originToRotT3D);
branchGroup = new BranchGroup();
rotToCOM = new TransformGroup();
rotToCOMT3D = new Transform3D();
rotToCOMV3D = new Vector3d();
// Set capabilities needed for picking and moving the MolecularAssembly
branchGroup.setCapability(BranchGroup.ALLOW_DETACH);
originToRot.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
originToRot.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
originToRot.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
rotToCOM.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
rotToCOM.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
// Put the MolecularAssembly in the middle of the scene
if (zero) {
originToRotV3D.set(0.0, 0.0, 0.0);
originToRotT3D.set(originToRotV3D);
originToRot.setTransform(originToRotT3D);
}
wire = renderWire();
switchGroup = new Switch(Switch.CHILD_NONE);
switchGroup.setCapability(Switch.ALLOW_SWITCH_WRITE);
base = new BranchGroup();
base.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
base.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
childNodes = new BranchGroup();
childNodes.setCapability(BranchGroup.ALLOW_DETACH);
childNodes.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
childNodes.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
switchGroup.addChild(base);
if (wire != null) {
base.addChild(wire);
}
vrml = loadVRML();
if (vrml != null) {
vrmlTG = new TransformGroup();
vrmlTd = new Transform3D();
vrmlTG.setTransform(vrmlTd);
vrmlTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
vrmlTG.addChild(vrml);
switchGroup.addChild(vrmlTG);
setView(RendererCache.ViewModel.INVISIBLE, null);
}
switchGroup.setWhichChild(Switch.CHILD_ALL);
rotToCOM.addChild(switchGroup);
originToRot.addChild(rotToCOM);
branchGroup.addChild(originToRot);
branchGroup.compile();
return branchGroup;
}
Aggregations