package org.jcae.viewer3d.post; import java.util.Map; import javax.media.j3d.*; import org.jcae.viewer3d.DomainProvider; import org.jcae.viewer3d.PickViewable; import org.jcae.viewer3d.SelectionListener; import org.jcae.viewer3d.ViewableAdaptor; import org.jcae.viewer3d.post.ColorMapper; import org.jcae.viewer3d.post.DefaultColorMapper; import com.sun.j3d.utils.picking.PickTool; public class QuadPostViewable extends ViewableAdaptor { private final static Appearance APPEARANCE; static { APPEARANCE=new Appearance(); PolygonAttributes pa=new PolygonAttributes( PolygonAttributes.POLYGON_FILL, PolygonAttributes.CULL_NONE,0); APPEARANCE.setPolygonAttributes(pa); } BranchGroup branchGroup; private ColorMapper colorMapper; private int numberOfVertices; private IndexedQuadArray quadArray; public QuadPostViewable(float[] coordinates, int[] coordinateIndices) { numberOfVertices=coordinates.length/3; System.out.println("coordinates.length="+coordinates.length); System.out.println("coordinateIndices.length="+coordinateIndices.length); branchGroup=new BranchGroup(); quadArray = new IndexedQuadArray( coordinates.length/3, GeometryArray.COORDINATES|GeometryArray.COLOR_3, coordinateIndices.length); quadArray.setCoordinates(0, coordinates); quadArray.setCoordinateIndices(0, coordinateIndices); quadArray.setCapability(GeometryArray.ALLOW_COLOR_WRITE); quadArray.setCapability(IndexedGeometryArray.ALLOW_COLOR_INDEX_WRITE); Shape3D s=new Shape3D(quadArray, APPEARANCE); PickTool.setCapabilities(s, PickTool.INTERSECT_COORD); branchGroup.addChild(s); } public void setValues(float[] values) { if(colorMapper==null) { setColorMapper(new DefaultColorMapper(values, numberOfVertices)); } int[] colorIndices=new int[values.length*4]; for(int i=0; i<values.length; i++) { int colorId=colorMapper.map(values[i]); int pid=i*4; colorIndices[pid++]=colorId; colorIndices[pid++]=colorId; colorIndices[pid++]=colorId; colorIndices[pid]=colorId; } quadArray.setColorIndices(0, colorIndices); } public void setColorMapper(ColorMapper cm) { colorMapper=cm; quadArray.setColors(0, colorMapper.getPalette()); } @Override public void domainsChangedPerform(int[] domainId) { //nothing } @Override public DomainProvider getDomainProvider() { return null; } @Override public void setDomainVisible(Map<Integer, Boolean> map) { //nothing } @Override public Node getJ3DNode() { System.out.println(branchGroup.getBounds()); return branchGroup; } @Override public void pick(PickViewable result) { //nothing } @Override public void unselectAll() { //nothing } @Override public void addSelectionListener(SelectionListener listener) { //nothing } @Override public void removeSelectionListener(SelectionListener listener) { //nothing } }