public ObjectViewer(URL url) { setLayout(new BorderLayout()); Canvas3D canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); add("Center", canvas3D); BoundingSphere bounds = new BoundingSphere(new Point3d(), 1000); BranchGroup root = new BranchGroup(); BranchGroup scene = createSceneGraph(url); scene.setBoundsAutoCompute(true); System.out.println(scene.getBounds()); BoundingSphere sceneBounds = new BoundingSphere(scene.getBounds()); SimpleUniverse univ = new SimpleUniverse(canvas3D); ViewingPlatform view = univ.getViewingPlatform(); view.setNominalViewingTransform(); Transform3D t = new Transform3D(); TransformGroup viewTransform = view.getViewPlatformTransform(); t.set(new Vector3d(0, 0, 3 * sceneBounds.getRadius())); viewTransform.setTransform(t); BranchGroup lights = new BranchGroup(); Light light = new AmbientLight(); light.setInfluencingBounds(bounds); lights.addChild(light); light = new DirectionalLight(); light.setInfluencingBounds(bounds); lights.addChild(light); root.addChild(lights); TransformGroup tg = new TransformGroup(); tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); tg.addChild(scene); root.addChild(tg); MouseRotate mouse = new MouseRotate(); mouse.setTransformGroup(tg); mouse.setSchedulingBounds(bounds); root.addChild(mouse); MouseZoom mousezoom = new MouseZoom(); mousezoom.setTransformGroup(tg); mousezoom.setSchedulingBounds(bounds); root.addChild(mousezoom); Background background = new Background(1, 1, 1); background.setApplicationBounds(bounds); root.addChild(background); root.compile(); univ.addBranchGraph(root); }
/** * Creates a ViewingPlatform from attributes gathered by this object. * * @param transformCount the number of TransformGroups to attach to the ViewingPlatform * @return the new ViewingPlatform */ ViewingPlatform createViewingPlatform(int transformCount) { // Get the Viewers attached to this ViewingPlatform. // All ConfigViews must be processed at this point. if (configViews.size() == 0) { viewers = new Viewer[0]; } else { viewers = new Viewer[configViews.size()]; for (int i = 0; i < viewers.length; i++) viewers[i] = ((ConfigView) configViews.get(i)).j3dViewer; } // Create the viewing platform and get its ViewPlatform instance. viewingPlatform = new ViewingPlatform(transformCount); ViewPlatform vp = viewingPlatform.getViewPlatform(); // Set defined policies. if (allowPolicyRead) vp.setCapability(ViewPlatform.ALLOW_POLICY_READ); if (allowLocalToVworldRead) vp.setCapability(Node.ALLOW_LOCAL_TO_VWORLD_READ); if (viewAttachPolicy == -1) { // Apply a default based on the eyepoint policy. boolean nominalHead = true; for (int i = 0; i < viewers.length; i++) { if (viewers[i].getView().getWindowEyepointPolicy() != View.RELATIVE_TO_FIELD_OF_VIEW) { nominalHead = false; break; } } if (nominalHead) vp.setViewAttachPolicy(View.NOMINAL_HEAD); else vp.setViewAttachPolicy(View.NOMINAL_SCREEN); } else { vp.setViewAttachPolicy(viewAttachPolicy); } // Assign the viewing platform to all viewers. for (int i = 0; i < viewers.length; i++) { viewers[i].setViewingPlatform(viewingPlatform); } // Apply initial viewing transforms if defined. if (nominalViewingTransform) { viewingPlatform.setNominalViewingTransform(); } if (initialViewingTransform != null) { TransformGroup tg = viewingPlatform.getViewPlatformTransform(); tg.setTransform(initialViewingTransform); } return viewingPlatform; }
/** Attach any ViewPlatformBehavior specified for this platform. */ void processBehavior() { if (configBehavior != null) { viewingPlatform.setViewPlatformBehavior(configBehavior.viewPlatformBehavior); } }