
javax.media.j3d.PointAttributesRetained Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of j3dcore Show documentation
Show all versions of j3dcore Show documentation
3D Graphics API for the Java Platform
/*
* Copyright 1998-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*
*/
package javax.media.j3d;
import java.util.ArrayList;
/**
* The PointAttributesRetained object defines all rendering state that can be set
* as a component object of a Shape3D node.
*/
class PointAttributesRetained extends NodeComponentRetained {
// A list of pre-defined bits to indicate which component
// in this LineAttributesRetained object changed.
static final int POINT_SIZE_CHANGED = 0x01;
static final int POINT_AA_CHANGED = 0x02;
// Size, in pixels, of point primitives
float pointSize = 1.0f;
// Point antialiasing switch
boolean pointAntialiasing = false;
/**
* Sets the point size for this appearance component object.
* @param pointSize the size, in pixels, of point primitives
*/
final void initPointSize(float pointSize) {
this.pointSize = pointSize;
}
/**
* Sets the point size for this appearance component object and sends a
* message notifying the interested structures of the change.
* @param pointSize the size, in pixels, of point primitives
*/
final void setPointSize(float pointSize) {
initPointSize(pointSize);
sendMessage(POINT_SIZE_CHANGED, new Float(pointSize));
}
/**
* Gets the point size for this appearance component object.
* @return the size, in pixels, of point primitives
*/
final float getPointSize() {
return pointSize;
}
/**
* Enables or disables point antialiasing
* for this appearance component object.
* @param state true or false to enable or disable point antialiasing
*/
final void initPointAntialiasingEnable(boolean state) {
pointAntialiasing = state;
}
/**
* Enables or disables point antialiasing
* for this appearance component object and sends a
* message notifying the interested structures of the change.
* @param state true or false to enable or disable point antialiasing
*/
final void setPointAntialiasingEnable(boolean state) {
initPointAntialiasingEnable(state);
sendMessage(POINT_AA_CHANGED,
(state ? Boolean.TRUE: Boolean.FALSE));
}
/**
* Retrieves the state of the point antialiasing flag.
* @return true if point antialiasing is enabled,
* false if point antialiasing is disabled
*/
final boolean getPointAntialiasingEnable() {
return pointAntialiasing;
}
/**
* Creates and initializes a mirror object, point the mirror object
* to the retained object if the object is not editable
*/
@Override
synchronized void createMirrorObject() {
if (mirror == null) {
// Check the capability bits and let the mirror object
// point to itself if is not editable
if (isStatic()) {
mirror = this;
} else {
PointAttributesRetained mirrorPa
= new PointAttributesRetained();
mirrorPa.set(this);
mirrorPa.source = source;
mirror = mirrorPa;
}
} else {
((PointAttributesRetained) mirror).set(this);
}
}
/**
* Update the native context
*/
void updateNative(Context ctx) {
Pipeline.getPipeline().updatePointAttributes(ctx, pointSize, pointAntialiasing);
}
/**
* Initializes a mirror object, point the mirror object to the retained
* object if the object is not editable
*/
@Override
synchronized void initMirrorObject() {
((PointAttributesRetained)mirror).set(this);
}
/**
* Update the "component" field of the mirror object with the
* given "value"
*/
@Override
synchronized void updateMirrorObject(int component, Object value) {
PointAttributesRetained mirrorPa = (PointAttributesRetained) mirror;
if ((component & POINT_SIZE_CHANGED) != 0) {
mirrorPa.pointSize = ((Float)value).floatValue();
}
else if ((component & POINT_AA_CHANGED) != 0) {
mirrorPa.pointAntialiasing = ((Boolean)value).booleanValue();
}
}
boolean equivalent(PointAttributesRetained pr) {
return ((pr != null) &&
(pr.pointSize == pointSize) &&
(pr.pointAntialiasing == pointAntialiasing));
}
protected void set(PointAttributesRetained pr) {
super.set(pr);
pointSize = pr.pointSize;
pointAntialiasing = pr.pointAntialiasing;
}
final void sendMessage(int attrMask, Object attr) {
ArrayList univList = new ArrayList();
ArrayList> gaList = Shape3DRetained.getGeomAtomsList(mirror.users, univList);
// Send to rendering attribute structure, regardless of
// whether there are users or not (alternate appearance case ..)
J3dMessage createMessage = new J3dMessage();
createMessage.threads = J3dThread.UPDATE_RENDERING_ATTRIBUTES;
createMessage.type = J3dMessage.POINTATTRIBUTES_CHANGED;
createMessage.universe = null;
createMessage.args[0] = this;
createMessage.args[1]= new Integer(attrMask);
createMessage.args[2] = attr;
createMessage.args[3] = new Integer(changedFrequent);
VirtualUniverse.mc.processMessage(createMessage);
// System.err.println("univList.size is " + univList.size());
for(int i=0; i gL = gaList.get(i);
GeometryAtom[] gaArr = new GeometryAtom[gL.size()];
gL.toArray(gaArr);
createMessage.args[3] = gaArr;
VirtualUniverse.mc.processMessage(createMessage);
}
}
@Override
void handleFrequencyChange(int bit) {
if (bit == PointAttributes.ALLOW_SIZE_WRITE ||
bit == PointAttributes.ALLOW_ANTIALIASING_WRITE) {
setFrequencyChangeMask(bit, 0x1);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy