All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.j3d.utils.universe.ConfigView Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * - Redistribution of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 *
 * - Redistribution in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in
 *   the documentation and/or other materials provided with the
 *   distribution.
 *
 * Neither the name of Sun Microsystems, Inc. or the names of
 * contributors may be used to endorse or promote products derived
 * from this software without specific prior written permission.
 *
 * This software is provided "AS IS," without a warranty of any
 * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
 * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
 * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL
 * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF
 * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR
 * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL,
 * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
 * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR
 * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 *
 * You acknowledge that this software is not designed, licensed or
 * intended for use in the design, construction, operation or
 * maintenance of any nuclear facility.
 *
 */

package com.sun.j3d.utils.universe ;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import javax.media.j3d.PhysicalBody;
import javax.media.j3d.PhysicalEnvironment;
import javax.media.j3d.View;
import javax.vecmath.Point3d;

class ConfigView extends ConfigObject {
    /**
     * The corresponding View and Viewer instances.  These are set when
     * createJ3dView() is called after parsing the configuration file.
     */
    View j3dView = null ;
    Viewer j3dViewer = null ;

    /**
     * Set of ConfigScreen instances added to this view.
     */
    Set screens = new HashSet() ;

    /**
     * Indicates whether or not stereo viewing should be enabled for this
     * ConfigView.  This is set during parsing of the configuration file.
     */
    boolean stereoEnable = false ;

    /**
     * Indicates whether or not antialiasing is enabled for this ConfigView.
     * This is set during parsing of the configuration file.
     */
    boolean antialiasingEnable = false;

    /**
     * Reference to the PhysicalBody associated with this ConfigView.  This is
     * set when createJ3dView() is called after parsing the configuration
     * file.
     */
    PhysicalBody physicalBody = null ;

    /**
     * Reference to the PhysicalEnvironment associated with this ConfigView.
     * This is set when createJ3dView() is called after parsing the
     * configuration file.
     */
    PhysicalEnvironment physicalEnvironment = null ;

    // All other configurable attributes.
    private double     fieldOfView             = Math.PI/4.0 ;
    private int        backClipPolicy          = View.PHYSICAL_EYE ;
    private int        frontClipPolicy         = View.PHYSICAL_EYE ;
    private double     backClipDistance        = 10.0 ;
    private double     frontClipDistance       =  0.1 ;
    private int        screenScalePolicy       = View.SCALE_SCREEN_SIZE ;
    private double     screenScale             = 1.0 ;
    private boolean    trackingEnable          = false ;
    private int        viewPolicy              = View.SCREEN_VIEW ;
    private int        windowEyepointPolicy    = -1 ;
    private int        windowMovementPolicy    = -1 ;
    private int        windowResizePolicy      = -1 ;
    private boolean    coeCenteringEnableSet   = false ;
    private boolean    coeCenteringEnable      = false ;
    private Point3d    centerEyeInCoexistence  = null ;

    private ConfigPhysicalBody configBody = null ;
    private ConfigPhysicalEnvironment configEnv = null ;
    private ConfigViewPlatform configViewPlatform = null ;

    /**
     * Overrides initialize() to do nothing.
     */
    @Override
    protected void initialize(ConfigCommand command) {
    }

    /**
     * Processes properties for this object.  Handles commands of the form:

* (ViewAttribute {instanceName} {attrName} {attrValue}) * * @param command the command that invoked this method */ @Override protected void setProperty(ConfigCommand command) { int argc = command.argc ; Object[] argv = command.argv ; String attr = null ; Object val = null ; String sval = null ; ConfigScreen cs = null ; // Check that arg[1] and arg[2] are strings if (argc != 4) { syntaxError("Incorrect number of arguments to " + command.commandName) ; } if (!isName(argv[1])) { syntaxError("The first argument to " + command.commandName + " must be the instance name") ; } if (!isName(argv[2])) { syntaxError("The second argument to " + command.commandName + " must be a property name") ; } attr = (String) argv[2] ; val = argv[3] ; if (attr.equals("Screen") || attr.equals("Window")) { if (!(val instanceof String)) { syntaxError("Value for " + attr + " must be a name") ; } cs = (ConfigScreen) configContainer.findConfigObject("Screen", (String)val) ; if (!screens.add(cs)) { syntaxError(attr + " \"" + ((String)val) + "\" has already been added to " + instanceName) ; } } else if (attr.equals("ViewPlatform")) { if (!(val instanceof String)) { syntaxError("value for ViewPlatform " + " must be an instance name") ; } configViewPlatform = (ConfigViewPlatform)configContainer.findConfigObject ("ViewPlatform", (String)val) ; configViewPlatform.addConfigView(this) ; } else if (attr.equals("PhysicalEnvironment")) { if (!(val instanceof String)) { syntaxError("value for PhysicalEnvironment " + "must be an instance name") ; } configEnv = (ConfigPhysicalEnvironment)configContainer.findConfigObject ("PhysicalEnvironment", (String)val) ; } else if (attr.equals("PhysicalBody")) { if (!(val instanceof String)) { syntaxError("value for PhysicalBody " + "must be an instance name") ; } configBody = (ConfigPhysicalBody) configContainer.findConfigObject("PhysicalBody", (String)val) ; } else if (attr.equals("BackClipPolicy")) { if (!(val instanceof String)) { syntaxError("value for BackClipPolicy must be a string") ; } sval = (String) val ; if (sval.equals("PHYSICAL_EYE")) backClipPolicy = View.PHYSICAL_EYE ; else if (sval.equals("PHYSICAL_SCREEN")) backClipPolicy = View.PHYSICAL_SCREEN ; else if (sval.equals("VIRTUAL_EYE")) backClipPolicy = View.VIRTUAL_EYE ; else if (sval.equals("VIRTUAL_SCREEN")) backClipPolicy = View.VIRTUAL_SCREEN ; else syntaxError("Invalid value for BackClipPolicy " + sval) ; } else if (attr.equals("FrontClipPolicy")) { if (!(val instanceof String)) { syntaxError("value for FrontClipPolicy must be a string") ; } sval = (String) val ; if (sval.equals("PHYSICAL_EYE")) frontClipPolicy = View.PHYSICAL_EYE ; else if (sval.equals("PHYSICAL_SCREEN")) frontClipPolicy = View.PHYSICAL_SCREEN ; else if (sval.equals("VIRTUAL_EYE")) frontClipPolicy = View.VIRTUAL_EYE ; else if (sval.equals("VIRTUAL_SCREEN")) frontClipPolicy = View.VIRTUAL_SCREEN ; else syntaxError("Invalid value for FrontClipPolicy " + sval) ; } else if (attr.equals("ScreenScalePolicy")) { if (!(val instanceof String)) { syntaxError("value for ScreenScalePolicy must be a string") ; } sval = (String) val ; if (sval.equals("SCALE_SCREEN_SIZE")) screenScalePolicy = View.SCALE_SCREEN_SIZE ; else if (sval.equals("SCALE_EXPLICIT")) screenScalePolicy = View.SCALE_EXPLICIT ; else syntaxError("Invalid value for ScreenScalePolicy " + sval) ; } else if (attr.equals("FieldOfView")) { if (!(val instanceof Double)) { syntaxError("value for FieldOfView must be a number") ; } fieldOfView = ((Double)val).doubleValue() ; } else if (attr.equals("BackClipDistance")) { if (!(val instanceof Double)) { syntaxError("value for BackClipDistance must be a number") ; } backClipDistance = ((Double)val).doubleValue() ; } else if (attr.equals("FrontClipDistance")) { if (!(val instanceof Double)) { syntaxError("value for FrontClipDistance must be a number") ; } frontClipDistance = ((Double)val).doubleValue() ; } else if (attr.equals("ScreenScale")) { if (!(val instanceof Double)) { syntaxError("value for ScreenScale must be a number") ; } screenScale = ((Double)val).doubleValue() ; } else if (attr.equals("TrackingEnable")) { if (!(val instanceof Boolean)) { syntaxError("value for TrackingEnable must be a boolean") ; } trackingEnable = ((Boolean)val).booleanValue() ; } else if (attr.equals("CoexistenceCenteringEnable")) { if (!(val instanceof Boolean)) { syntaxError("value for CoexistenceCenteringEnable " + "must be a boolean") ; } coeCenteringEnable = ((Boolean)val).booleanValue() ; coeCenteringEnableSet = true ; } else if (attr.equals("ViewPolicy")) { if (!(val instanceof String)) { syntaxError("value for ViewPolicy must be a string") ; } sval = (String) val ; if (sval.equals("SCREEN_VIEW")) viewPolicy = View.SCREEN_VIEW ; else if (sval.equals("HMD_VIEW")) viewPolicy = View.HMD_VIEW ; else syntaxError("Invalid value for ViewPolicy " + sval) ; } else if (attr.equals("WindowEyepointPolicy")) { if (!(val instanceof String)) { syntaxError("value for WindowEyepointPolicy " + "must be a string") ; } sval = (String) val ; if (sval.equals("RELATIVE_TO_SCREEN")) windowEyepointPolicy = View.RELATIVE_TO_SCREEN ; else if (sval.equals("RELATIVE_TO_COEXISTENCE")) windowEyepointPolicy = View.RELATIVE_TO_COEXISTENCE ; else if (sval.equals("RELATIVE_TO_WINDOW")) windowEyepointPolicy = View.RELATIVE_TO_WINDOW ; else if (sval.equals("RELATIVE_TO_FIELD_OF_VIEW")) windowEyepointPolicy = View.RELATIVE_TO_FIELD_OF_VIEW ; else syntaxError("Invalid value for WindowEyepointPolicy " + sval) ; } else if (attr.equals("WindowMovementPolicy")) { if (!(val instanceof String)) { syntaxError("value for WindowEyeMovementPolicy " + "must be a string") ; } sval = (String) val ; if (sval.equals("VIRTUAL_WORLD")) windowMovementPolicy = View.VIRTUAL_WORLD ; else if (sval.equals("PHYSICAL_WORLD")) windowMovementPolicy = View.PHYSICAL_WORLD ; else syntaxError("Invalid value for WindowMovementPolicy " + sval) ; } else if (attr.equals("WindowResizePolicy")) { if (!(val instanceof String)) { syntaxError("value for WindowResizePolicy " + "must be a string") ; } sval = (String) val ; if (sval.equals("VIRTUAL_WORLD")) windowResizePolicy = View.VIRTUAL_WORLD ; else if (sval.equals("PHYSICAL_WORLD")) windowResizePolicy = View.PHYSICAL_WORLD ; else syntaxError("Invalid value for WindowResizePolicy " + sval) ; } else if (attr.equals("CenterEyeInCoexistence")) { if (val instanceof Point3d) centerEyeInCoexistence = (Point3d)val ; else syntaxError("value for CenterEyeInCoexistence " + "must be a Point3d") ; } else if (attr.equals("StereoEnable")) { if (!(val instanceof Boolean)) { syntaxError("value for StereoEnable must be a boolean") ; } stereoEnable = ((Boolean)val).booleanValue() ; } else if (attr.equals("AntialiasingEnable")) { if (!(val instanceof Boolean)) { syntaxError("value for AntialiasingEnable must be a boolean") ; } antialiasingEnable = ((Boolean)val).booleanValue() ; } else { syntaxError("Unknown " + command.commandName + " \"" + attr + "\"") ; } } /** * Create a core Java 3D View instance and a utility Viewer instance using * the attributes gathered by this object. */ protected Viewer createViewer(boolean setVisible) { Point3d leftEyeCoe, rightEyeCoe ; j3dView = new View() ; j3dView.setViewPolicy(viewPolicy) ; if (configBody == null) physicalBody = new PhysicalBody() ; else physicalBody = configBody.j3dPhysicalBody ; if (configEnv == null) physicalEnvironment = new PhysicalEnvironment() ; else physicalEnvironment = configEnv.j3dPhysicalEnvironment ; j3dView.setPhysicalBody(physicalBody) ; j3dView.setPhysicalEnvironment(physicalEnvironment) ; boolean standardDefaults = true ; if (coeCenteringEnableSet && !coeCenteringEnable) { standardDefaults = false ; } if (configEnv != null && configEnv.coexistenceToTrackerBase != null) { standardDefaults = false ; } else { Iterator i = screens.iterator() ; while (i.hasNext()) { ConfigScreen s = (ConfigScreen)i.next() ; if (s.trackerBaseToImagePlate != null) { standardDefaults = false ; break ; } } } if (standardDefaults) { // Coexistence centering has not been explicitly set false, and // the tracker base to image plate and coexistence to tracker base // transforms are unset, so use the standard Java 3D defaults. if (windowEyepointPolicy == -1) windowEyepointPolicy = View.RELATIVE_TO_FIELD_OF_VIEW ; if (windowMovementPolicy == -1) windowMovementPolicy = View.PHYSICAL_WORLD ; if (windowResizePolicy == -1) windowResizePolicy = View.PHYSICAL_WORLD ; if (!coeCenteringEnableSet) coeCenteringEnable = true ; } else { // Use multi-screen or calibrated coexistence defaults. if (windowEyepointPolicy == -1) windowEyepointPolicy = View.RELATIVE_TO_COEXISTENCE ; if (windowMovementPolicy == -1) windowMovementPolicy = View.VIRTUAL_WORLD ; if (windowResizePolicy == -1) windowResizePolicy = View.VIRTUAL_WORLD ; if (!coeCenteringEnableSet) coeCenteringEnable = false ; } j3dView.setWindowEyepointPolicy(windowEyepointPolicy) ; j3dView.setWindowMovementPolicy(windowMovementPolicy) ; j3dView.setWindowResizePolicy(windowResizePolicy) ; j3dView.setCoexistenceCenteringEnable(coeCenteringEnable) ; if (centerEyeInCoexistence == null) { centerEyeInCoexistence = new Point3d(0.0, 0.0, 0.4572) ; } leftEyeCoe = new Point3d(centerEyeInCoexistence) ; rightEyeCoe = new Point3d(centerEyeInCoexistence) ; if (stereoEnable) { Point3d leftEyeBody = new Point3d() ; Point3d rightEyeBody = new Point3d() ; physicalBody.getLeftEyePosition(leftEyeBody) ; physicalBody.getRightEyePosition(rightEyeBody) ; leftEyeCoe.add(leftEyeBody) ; rightEyeCoe.add(rightEyeBody) ; } j3dView.setLeftManualEyeInCoexistence(leftEyeCoe) ; j3dView.setRightManualEyeInCoexistence(rightEyeCoe) ; j3dView.setBackClipPolicy(backClipPolicy) ; j3dView.setFrontClipPolicy(frontClipPolicy) ; j3dView.setBackClipDistance(backClipDistance) ; j3dView.setFrontClipDistance(frontClipDistance) ; j3dView.setScreenScalePolicy(screenScalePolicy) ; j3dView.setScreenScale(screenScale) ; j3dView.setFieldOfView(fieldOfView) ; j3dView.setTrackingEnable(trackingEnable) ; j3dView.setSceneAntialiasingEnable(antialiasingEnable) ; if (screens.size() == 0) { throw new IllegalStateException (errorMessage(creatingCommand, "View \"" + instanceName + "\" has no canvases or screens")) ; } ConfigScreen[] cs = new ConfigScreen[screens.size()] ; screens.toArray(cs) ; j3dViewer = new Viewer(cs, this, setVisible) ; return j3dViewer ; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy