// StereoRender // by Etienne Monneret // This script can't run out of the AnaBuilder's context // See http://anabuilder.free.fr for more info import java.awt.image.*; setAccessibility(true); //Search for camera 1 and camera 2 aScene = window.getScene(); aFound = false; ObjectInfo aCamera1 = null,aCamera2 = null; for(i = 0;i < aScene.getNumObjects() && !aFound;i++) { if(aScene.getObject(i).object instanceof SceneCamera) { if(aScene.getObject(i).name.equals("Camera 1")) { aCamera1 = aScene.getObject(i); } if(aScene.getObject(i).name.equals("Camera 2")) { aCamera2 = aScene.getObject(i); } if(aCamera1 != null && aCamera2 != null) { aFound = true; } } } if(aFound == false) { return; } // Prompt the user to select options for the output image. rendererChoice = new Choice(); renderers = ModellingApp.getRenderers(); for (i = 0; i < renderers.length; i++) rendererChoice.add(renderers[i].getName()); stereoChoice = new Choice(); stereoChoice.add("Anaglyph"); stereoChoice.add("Parallel"); stereoChoice.add("Crossed"); widthField = new ValueField(400, ValueField.POSITIVE+ValueField.INTEGER); heightField = new ValueField(300, ValueField.POSITIVE+ValueField.INTEGER); qualitySlider = new ValueSlider(0, 100, 100, 80); dlg = new ComponentsDialog(window, "Select Parameters for rendered images", new Component [] {rendererChoice, widthField, heightField, qualitySlider,stereoChoice}, new String [] {"Renderer", "Width", "Height", "Quality","Stereo"}); if (!dlg.clickedOk()) return; rend = renderers[rendererChoice.getSelectedIndex()]; width = (int) widthField.getValue(); height = (int) heightField.getValue(); quality = (int) qualitySlider.getValue(); sc1 = (SceneCamera) aCamera1.object; sc2 = (SceneCamera) aCamera2.object; // Display the main configuration panel for the renderer. dlg = new PanelDialog(window, "Select rendering options", rend.getConfigPanel()); if (!dlg.clickedOk()) return; rend.recordConfiguration(); //Calc all images aBI1= new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); aBI2= new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); window.theView[0].updateImage(); window.theView[0].update(window.theView[0].getGraphics()); window.theView[1].updateImage(); window.theView[1].update(window.theView[1].getGraphics()); aImage1 = sc1.renderScene(aScene,width,height,rend,aCamera1.coords).getImage(); aBI1.getGraphics().drawImage(aImage1,0,0,null); aImage2 = sc2.renderScene(aScene,width,height,rend,aCamera2.coords).getImage(); aBI2.getGraphics().drawImage(aImage2,0,0,null); switch(stereoChoice.getSelectedIndex()) { case 0: aBI = AnaBuilder.ABBuildAnaglyph(aBI1,aBI2); break; case 1: aBI = AnaBuilder.ABBuildParallel(aBI1,aBI2); break; case 2: aBI = AnaBuilder.ABBuildCrossed(aBI1,aBI2); break; default: break; } fd = new FileDialog(window, "Select name for the anaglyph image", FileDialog.SAVE); fd.setFile("stereo.jpg"); fd.show(); ImageSaver.saveImage(aBI,new File(fd.getDirectory(), fd.getFile()), ImageSaver.FORMAT_JPEG, quality);