You also need to specify within the material object, or the coloringattributes
object
that those capability bits are set to change the color
you can read the appearance, and modify it, but to change a color you also need
to set that capabilities on the material or coloring attributes stuff
Scott
Scott Decker
Research Scientist
Pacific Northwest National Labs
[EMAIL PROTECTED]
don't feed the squirrels
-----Original Message-----
From: jay mistry [SMTP:[EMAIL PROTECTED]]
Sent: Thursday, September 02, 1999 5:53 AM
To: Decker, Scott D
Subject: java3d enquiry
I wonder if you can help me. I'm trying to change the colour of a
Primitive when I click on it, in this case a Sphere, but I keep getting
a 'capability not set exception'.
I've tried using
sphere.setCapability(Sphere.ENABLE_APPEARANCE_MODIFY);
however I still get an exception.
As Primitives are not inherited from Shape3D cannot use
ALLOW_APPEARANCE_READ and ALLOW_APPEARANCE_WRITE.
Is there something that I should be doing as well as the above?
Thanks for your time.
Here is some of my code:
Class Main{
//methods to set bounds, appearance etc.
Sphere sphere = new Sphere(0.2f,app);
sphere.setCapability(Sphere.ENABLE_APPEARANCE_MODIFY);
//methods to add sphere to scene and add Behavior
}
Also: HighLightBehavior
import javax.media.j3d.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.behaviors.picking.*;
import javax.vecmath.*;
// The MusicBehavior class will process mouse events
public class HighLightKeyBehavior extends Behavior {
// Declare class variables and constants
BoundingSphere bounds;
Appearance savedAppearance = null;
Appearance highLightAppearance;
Primitive oldShape;
int x=0;//initialse mouse x co-ordinate
int y=0;//initialse mouse y co-ordinate
Primitive shape;
// Portion of the scene graph to operate picking on.
protected PickObject pickScene;
// Define the triggers that will wake up the class methods to do
// something
WakeupCriterion criterion[] = {
new WakeupOnAWTEvent(MouseEvent.MOUSE_PRESSED),
new WakeupOnAWTEvent(WindowEvent.WINDOW_ACTIVATED),
new WakeupOnElapsedTime( 15000 ) };
WakeupCondition conditions = new WakeupOr(criterion);
public HighLightKeyBehavior(BranchGroup root,Canvas3D canvas){
pickScene = new PickObject(canvas, root);
Color3f white = new Color3f(1.0f, 1.0f,1.0f);
Color3f black = new Color3f(0.0f, 0.0f,0.0f);
Color3f highLightColor = new Color3f(0.0f, 1.0f,0.0f);
Material highLightMaterial = new Material(highLightColor, black,
highLightColor, white, 80.0f);
highLightAppearance = new Appearance();
highLightAppearance.setMaterial(new Material(highLightColor,black,
highLightColor, white, 80.f));
}
// Behavior class has to have an intialization method.
// This method is invoked by the Java 3D behavior scheduler.
// Classes that extend Behavior must provide their own init
// method.
public void initialize() {
bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100);
initialize(bounds);
}
public void initialize(BoundingSphere boundry) {
wakeupOn(conditions);
setSchedulingBounds(boundry);
}
// method that returns an ID number when a key is clicked
// by the mouse
public void highLightKey(){
// Find the currently selected "key" which is a Box
// subclass of Primtive.
shape = (Primitive)pickScene.pickNode(
pickScene.pickClosest(x, y, PickObject.USE_BOUNDS),
PickObject.PRIMITIVE);
/**if (oldShape != null) {
oldShape.setAppearance(savedAppearance);
}**/
if (shape != null){
shape.getShape(Sphere.BODY);
shape.getCapability(Primitive.ENABLE_APPEARANCE_MODIFY);
//savedAppearance = shape.getAppearance();
//oldShape = shape;
shape.setAppearance(highLightAppearance);
System.out.println("NOTNULL");
}
}
//method to handle mouseEvents uses super class InputEvent to filter
raw user input
// event types of MouseEvent
public void processMouseEvent(MouseEvent evt) {
// LEFT Mouse pressed
if (evt.getID()==MouseEvent.MOUSE_PRESSED &&
evt.getModifiers()==MouseEvent.BUTTON1_MASK) {
switch (evt.getModifiers()) {
case MouseEvent.BUTTON1_MASK:
// Left Button generates X & Y
x = evt.getX();
y = evt.getY();
break;
}
highLightKey();
System.out.println("YES");
return;
}
return;
} // END processMouseEvent
// This method gets called in a loop during runtime
// execution by the Behavior scheduler when the WakeUpCondition
// is detected. Classes that extend Behavior must provide
// their own processStimulus method.
public void processStimulus(Enumeration criteria) {
// Define state variables
WakeupCriterion wakeup;
AWTEvent[] evt=null;
boolean timer=false;
while( criteria.hasMoreElements() ) {
wakeup = (WakeupCriterion)criteria.nextElement();
if (wakeup instanceof WakeupOnAWTEvent) {
evt=((WakeupOnAWTEvent)wakeup).getAWTEvent();
timer = false;
}
else if (wakeup instanceof WakeupOnElapsedTime) {
timer = true;
}
// When an event has been detected, filter the event
// type and call the appropriate method to handle the
// event.
if (evt!=null)
for(int i=0; i<evt.length; i++) {
if (evt[i] instanceof MouseEvent) {
processMouseEvent((MouseEvent)evt[i]);
timer = false;
}
} // END for loop
// Inform the Java3D scheduler to wake up on specified
// conditions.
wakeupOn(conditions);
} // END WHILE loop
} // END ProcessStimulus
} // END Class
Next Download Attachments
Back to Inbox
Privacy Policy- Terms of Service - Guidelines
Copyright � 1994-1999 Yahoo! Inc. All rights reserved.
__________________________________________________
Do You Yahoo!?
Bid and sell for free at http://auctions.yahoo.com
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".