Add points while program in running
Posted by click_24 on May 22, 2014; 10:02pm
URL: https://forum.jogamp.org/Add-points-while-program-in-running-tp4032371.html
Hello,
I have issues with my Java3D application.I load my class and XYZ axis show in the canvas.Then I want to load the method LoadPointClouds() while program is running which will show a circle of point clouds,but this doesn`t show up and I can`t figure it out why.
I get no exceptions and I added the TransformGroup from the method to the BranchGroup and I have the capabilities set.
The point clouds must show up when I click the jButton.Tryed different things but did not succeed.I can confirm the method LoadPointClouds() gets called when I click the button because I put a message to be printed in the console as confirmation that is calling it,but still nothing is showing up in the scene.
Please help me :|
Here is my code:
//------------------------------------------------------------------------------------------
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package Others;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.behaviors.mouse.MouseTranslate;
import com.sun.j3d.utils.behaviors.mouse.MouseZoom;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.geometry.Text2D;
import com.sun.j3d.utils.universe.SimpleUniverse;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GraphicsConfiguration;
import static java.lang.Math.cos;
import static java.lang.Math.hypot;
import static java.lang.Math.sin;
import javax.media.j3d.Appearance;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.GeometryArray;
import javax.media.j3d.PointArray;
import javax.media.j3d.Shape3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Point3f;
import javax.vecmath.Vector3f;
/**
*
* @author Me
*/
public class Java3D extends JPanel {
public static Java3D instance;
public static Java3D getInstance() {
if (instance == null) {
instance = new Java3D();
}
return instance;
}
BranchGroup branch;
SimpleUniverse universe;
BranchGroup b;
public Java3D() {
setLayout(new BorderLayout());
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas = new Canvas3D(config);
add("Center", canvas);
universe = new SimpleUniverse(canvas);
branch = new BranchGroup();
branch.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
branch.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
branch.addChild(setLights());
branch.addChild(setAxis());
universe.getViewingPlatform().setNominalViewingTransform();
universe.addBranchGraph(branch);
}
Shape3D plShape;
public TransformGroup LoadPointCloud() {
Appearance app = new Appearance();
Point3f[] plaPts = new Point3f[361];
Color3f[] colPts = new Color3f[361]; //parallel to coordinates, colors.
plaPts[0] = new Point3f(0.0f, 0.0f, 0.0f);
colPts[0] = new Color3f(3.0f, 3.0f, 3.0f);
float j = 0;
for (int i = 0; i < 360; i++) {
Point3f p3f1 = calc(0.2f, 0.0f, 0.2f, j++);
plaPts[i + 1] = new Point3f(p3f1.x, p3f1.y, p3f1.z);
colPts[i + 1] = new Color3f(0.8f, 1.0f, 5.0f);
}
PointArray pla = new PointArray(361, GeometryArray.COORDINATES | GeometryArray.COLOR_3);
pla.setColors(0, colPts); //this is the color-array setting
pla.setCoordinates(0, plaPts);
plShape = new Shape3D(pla, app);
TransformGroup transfPointCloud = new TransformGroup();
transfPointCloud.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
transfPointCloud.addChild(plShape);
MouseRotate mouseRotate = new MouseRotate();
mouseRotate.setTransformGroup(transfPointCloud);
mouseRotate.setSchedulingBounds(new BoundingSphere());
transfPointCloud.addChild(mouseRotate);
System.out.println("Works");
return transfPointCloud;
}
public Point3f calc(float x, float y, float z, float deg) {
float r = (float) hypot(x, y);//radical (x2+y2)
float xx = (float) (r * sin(deg));
float yy = (float) y;
float zz = (float) (r * cos(deg));
Point3f p3 = new Point3f(xx, yy, zz);
return p3;
}
public TransformGroup setAxis() {
TransformGroup tgg = new TransformGroup();
float x;
TransformGroup tgX = null;
float y;
TransformGroup tgY = null;
float z;
TransformGroup tgZ = null;
for (x = -1.0f; x <= 1.0f; x = x + 0.01f) {
Sphere sphere = new Sphere(0.01f);
tgX = new TransformGroup();
Transform3D transform = new Transform3D();
Vector3f vector = new Vector3f(x, .0f, .0f);
transform.setTranslation(vector);
tgX.setTransform(transform);
tgX.addChild(sphere);
tgg.addChild(tgX);
}
Text2D textX = new Text2D("X", new Color3f(0.9f, 1.0f, 1.0f), "Helvetica", 24, Font.BOLD);
Transform3D tX = new Transform3D();
tX.set(2, new Vector3f(x - 1.0f, 0.0f, 0.0f));
TransformGroup tgTemp = new TransformGroup(tX);
tgTemp.addChild(textX);
tgX.addChild(tgTemp);
for (y = -1.0f; y <= 1.0f; y = y + 0.01f) {
Sphere sphere = new Sphere(0.01f);
tgY = new TransformGroup();
Transform3D transform = new Transform3D();
Vector3f vector = new Vector3f(.0f, y, .0f);
transform.setTranslation(vector);
tgY.setTransform(transform);
tgY.addChild(sphere);
tgg.addChild(tgY);
}
Text2D textY = new Text2D("Y", new Color3f(0.9f, 1.0f, 1.0f), "Helvetica", 24, Font.BOLD);
Transform3D tY = new Transform3D();
tY.set(2, new Vector3f(0.0f, y - 1.0f, 0.0f));
TransformGroup tgTempY = new TransformGroup(tY);
tgTempY.addChild(textY);
tgY.addChild(tgTempY);
for (z = -1.0f; z <= 1.0f; z = z + 0.01f) {
Sphere sphere = new Sphere(0.01f);
tgZ = new TransformGroup();
Transform3D transform = new Transform3D();
Vector3f vector = new Vector3f(.0f, .0f, z);
transform.setTranslation(vector);
tgZ.setTransform(transform);
tgZ.addChild(sphere);
tgg.addChild(tgZ);
}
Text2D textZ = new Text2D("Z", new Color3f(0.9f, 1.0f, 1.0f), "Helvetica", 24, Font.BOLD);
Transform3D tZ = new Transform3D();
tZ.set(2, new Vector3f(0.0f, 0.0f, z - 1.0f));
TransformGroup tgTempZ = new TransformGroup(tZ);
tgTempZ.addChild(textZ);
tgZ.addChild(tgTempZ);
tgg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
MouseRotate mouseRotate = new MouseRotate();
mouseRotate.setTransformGroup(tgg);
mouseRotate.setSchedulingBounds(new BoundingSphere());
tgg.addChild(mouseRotate);
MouseZoom mouseDepth = new MouseZoom();
mouseDepth.setTransformGroup(tgg);
mouseDepth.setSchedulingBounds(new BoundingSphere());
tgg.addChild(mouseDepth);
MouseTranslate mouseTranslate = new MouseTranslate();
mouseTranslate.setTransformGroup(tgg);
mouseTranslate.setSchedulingBounds(new BoundingSphere());
tgg.addChild(mouseTranslate);
return tgg;
}
public DirectionalLight setLights() {
Color3f light1Color = new Color3f(.1f, 1.4f, .1f);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction);
light1.setInfluencingBounds(bounds);
return light1;
}
public static void main(String[] args) {
JFrame frame = new JFrame();
Java3D j = new Java3D();
frame.add(new JScrollPane(j));
frame.setSize(800, 800);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Button b = new Button();
b.setVisible(true);
}
}
and here is the method I use to call and set the pointclouds from another JForm class
//----------------------------------------------------------------------------------
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Java3D j3d = Java3D.getInstance();
BranchGroup b = new BranchGroup();
b.addChild(j3d.LoadPointCloud());
j3d.universe.addBranchGraph(b);
}