> From: Gautam Jindal <[EMAIL PROTECTED]>
>
> 1> How can I stop an object from getting lost from the screen?ie. whenever
> I translate,rotate sometimes the object gets lost and it becomes very
> difficult to track it down.Is there a way to make the object stay put on
> the screen.Please let me know how can I do this.

You can turn down the sensisitivity of the mouse behaviors so that the object 
doesn't "fly off" so quickly (see the answer to 3> below).

You can also setup a KeyBehavior which resets the transform to identity when the
user hits a key.  See ExitKeyBehavior.java attached below for an example of a 
KeyBehavior.  What you need to do is:

        Make a new class ResetKeyBehavior, using ExitKeyBehavior as a guide
        Make the constructor for this behavior take the TransformGroup that
           the MouseBehaviors are acting on, save this in a field.
        Modify the WakeupCriterion to look only for KEY_PRESS events
        Modify processKeyEvent to look for your "reset" key, for example, to
            make the "r" key reset the transform, use KeyEvent.VK_R.
        When the key is pressed, call ;
                TransformGroup.setTransform(new Transform3D())
           To reset the transform.
        


> 2> Every time I run my application ,the object..which is a surface appears
> from the center of the screen ,I am interested in starting it from left
> bottom of my screen ,any ideas?

Set up a TransformGroup above your object to hold the translation.  Set up a 
Trasnform3D with the desired translation (you probably want (-0.8, -0.8, 0.0)) 
and call setTransform on the TransformGroup to set the transform.

> 3> I am using mouse behaviour class provided my java 3.Anyway that I can
> change the translation steps and rotational  angle.

Decrease the sensitivity of the mouse behaviors by calling setFactor().  I find 
that setting the factor to 0.007 works well for a MouseRotate behavior.

Doug Gehringer
Sun Microsystems
/*
 *      @(#)ExitKeyBehavior.java 1.1 98/12/04 14:43:14
 *
 * Copyright (c) 1996-1998 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
 * modify and redistribute this software in source and binary code form,
 * provided that i) this copyright notice and license appear on all copies of
 * the software; and ii) Licensee does not utilize the software in a manner
 * which is disparaging to Sun.
 *
 * 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 AND ITS LICENSORS SHALL NOT BE
 * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
 * OR DISTRIBUTING THE 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 SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 *
 * This software is not designed or intended for use in on-line control of
 * aircraft, air traffic, aircraft navigation or aircraft communications; or in
 * the design, construction, operation or maintenance of any nuclear
 * facility. Licensee represents and warrants that it will not use or
 * redistribute the Software for such purposes.
 */
import javax.media.j3d.*;
import java.util.*;
import java.awt.Event;
import java.awt.Point;
import java.awt.AWTEvent;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.WindowEvent;
import javax.vecmath.*;

/** 
 * A KeyBehavior which called exit when the ESC key is pressed
 */

public class ExitKeyBehavior extends Behavior {

    // look for released events since sometimes ESCAPE only generates a 
    // RELEASE event
    WakeupCriterion criterion[] = { 
                new WakeupOnAWTEvent( Event.KEY_PRESS ),
                new WakeupOnAWTEvent( Event.KEY_RELEASE ),
                };

    WakeupCondition conditions = new WakeupOr( criterion );

    public void initialize() {
        wakeupOn(conditions);
    }

    public void processStimulus( Enumeration criteria ) {
        WakeupCriterion wakeup;
        AWTEvent[] evt=null;

        while( criteria.hasMoreElements() ) {
            wakeup = (WakeupCriterion)criteria.nextElement();
            if (wakeup instanceof WakeupOnAWTEvent) {
                 evt=((WakeupOnAWTEvent)wakeup).getAWTEvent();
            }

            if (evt!=null) {
                for(int i=0; i<evt.length; i++) {
                    if (evt[i] instanceof KeyEvent)  {
                        processKeyEvent( (KeyEvent)evt[i] );
                    }
                }
            }
        }
        wakeupOn( conditions );
    }

    private void processKeyEvent( KeyEvent evt ) {
        int key = evt.getKeyCode();
        switch (key) {
          case KeyEvent.VK_ESCAPE:
            System.exit(0);
            break;
        }
    }
}

Reply via email to