Hi all,
if you want draw lines on your canvas3d you can do it
as the example below.
Im using my own class extending BranchGroup and in this
class I added a shape3d. You only have to add this branchgroup to your virtual
universe.
The shape is built like an lineArray.
Hope this help you.
------------------------------------------
Borja Marcos Suárez
Java 3D Spanish Group
------------------------------------------
import javax.media.j3d.*; import
javax.vecmath.*;
public class EjeCoordenadas extends BranchGroup
{ /** Colores por defecto de los ejes */ public static
final Color3f COL_EJE_X = new Color3f(java.awt.Color.red);
/** vector de shapes3D. Cada elemento
contiene un eje. */ private final Shape3D shape= new
Shape3D(); /** Apariencia de cada eje */ private
final Appearance _app = new Appearance();
/** Attributos de color de cada Eje
*/ private final ColoringAttributes _colorAtt= new
ColoringAttributes();
/** Construye el eje de coordenadas por
defecto. */ public EjeCoordenadas()
{ this(COL_EJE_X); }
/** * Construye un eje de coordenadas con los colores
recibidos como parámetros. * * @param colX: color del eje
X */ public EjeCoordenadas(Color3f colX)
{ shape.setCapability(Shape3D.ALLOW_APPEARANCE_WRITE); LineArray
array1 = new LineArray(2, GeometryArray.TEXTURE_COORDINATE_3
| GeometryArray.COORDINATES);
//
Establece las coordenadas de cada eje array1.setCoordinates(0,
new double[] { 0, 0, 0, 100, 0, 0}); //
Añade la geometria a los shapes shape.setGeometry
(array1); // Establece los
colores setColor (0,colX); //
Añade los shapes al BranchGroup addChild(shape); }
/** * Establece el color de la linea. La
apariencia es puramente emisiva * * @param eje:
Indica el eje al que deseamos cambiar el color. * @param color:
nuevo color a establecer. */ public void setColor(int
eje,Color3f color)
{ _colorAtt.setColor(color); _app.setColoringAttributes(_colorAtt); shape.setAppearance(_app); } }
----- Original Message -----
Sent: Tuesday, September 18, 2001 11:35
AM
Subject: Re: [JAVA3D] Urgent Need for
help
If you just to want to draw the line on the
canvas, you can simply overload the postwap() method of your canvas 3D( create
your own canvas which derives from Canvas3D) inside which you draw the
line
This method is called each time the java3d scene
is repainted.
----- Original Message -----
Sent: Tuesday, September 18, 2001 9:11
AM
Subject: [JAVA3D] Urgent Need for
help
hi,
i am a graduate
student and have taken up a project in java and java3d. but being new to
J3D i am not able to solve some problems.
[1] I have added a Canvas3D
to a panel and i want to draw a simple line on the Canvas. i am using my
own class for line (myLine2D) and converting it to Shape3D using a method
'getshape()' and adds it to scenegraph using method 'addShapeObject()'.
Though the object is added to the TG node in the content branch, the
Canvas is not displaying it. i am herewith sending the source
file contents.
[2] Also when the Canvas3D object is added to the
panel, the menus in the menubars are not displayed as the opaque canvas
overlaps them.
please can anyone help me as early as possible?
thanks!
------------------------------------------------------------------------- ------------ [myLine2D.java] package
jpuf.geometry;
import javax.vecmath.*; import
javax.media.j3d.*;
public class myLine2D { private
float x1,y1,x2,y2;
public myLine2D(int x1,int y1,int x2,int
y2) {
this.x1=(float)x1;
this.y1=(float)y1;
this.x2=(float)x2; this.y2=(float)y2;
}
public Shape3D getShape() {
Shape3D shape; float[] verts=
{
x1,y1,0.0f,
x2,y2,0.0f }; /* int[]
stripVertexCount={1,1}; //
System.out.println("def:stripvc"); LineStripArray lsa
=
new LineStripArray(2,LineStripArray.COORDINATES,stripVertexCount); //
System.out.println("setcoords");
lsa.setCoordinate(0,verts); System.out.println("No. of
Strips : "+lsa.getNumStrips());
System.out.println("No. of Vertices :
"+lsa.getVertexCount());
System.out.println("("+verts[0]+","+verts[1]+","+verts[2]+")");
System.out.println("("+verts[3]+","+verts[4]+","+verts[5]+")");
shape=new Shape3D(lsa,new Appearance());*/ //
System.out.println("def:shape3d"); LineArray la=new
LineArray(2,GeometryArray.COORDINATES);
la.setCoordinate(0,verts); shape=new Shape3D(la,new
Appearance()); return shape;
} }
------------------------------------------------------------------------- ------------ [Model.java]
package
jpuf;
import java.awt.*; import javax.swing.*; import
jpuf.geometry.*; // OUR PACKAGE import
javax.vecmath.*; import javax.media.j3d.*;
public class Model
{
private VirtualUniverse VU; private View
v; private TransformGroup TG; private BranchGroup
BG; private Locale LC; private Canvas3D
c3d;
public Model(JPanel c)
{ VirtualUniverse universe=new
VirtualUniverse();
this.VU=universe; Locale locale=new
Locale(universe);
this.LC=locale;
locale.addBranchGraph(GenerateRightSubtree(c));
locale.addBranchGraph(GenerateLeftSubtree()); }
private BranchGroup GenerateRightSubtree(JPanel c)
{ BranchGroup root=new
BranchGroup(); Transform3D t=new
Transform3D(); t.set(new
Vector3f(0.0f,0.0f,10.0f)); TransformGroup TG=new
TransformGroup(t);
ViewPlatform vplat=new
ViewPlatform(); PhysicalBody pbody = new
PhysicalBody(); PhysicalEnvironment penv=new
PhysicalEnvironment();
TG.addChild(vplat);
root.addChild(TG);
View view=new
View(); this.v=view;
this.c3d=new Canvas3D(null); //
System.out.println(this.c3d.hashCode());
this.c3d.setBackground(Color.white);
this.c3d.setForeground(Color.black);
c.add(c3d);
view.addCanvas3D(this.c3d); //
System.out.println(this.c3d); //
System.out.println(this.c3d.isValid()); //
System.out.println(this.c3d.isVisible());
view.attachViewPlatform(vplat);
view.setPhysicalBody(new PhysicalBody());
view.setPhysicalEnvironment(new
PhysicalEnvironment());
root.setCapability(BG.ALLOW_CHILDREN_READ);
return(root); }
private BranchGroup
GenerateLeftSubtree() { BranchGroup root=new
BranchGroup(); Transform3D t=new
Transform3D(); TransformGroup TG=new
TransformGroup(); this.TG=TG; /*
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),
100.0); (is it required?) TG.setBounds(bounds);
*/ root.addChild(TG);
this.BG=root;
root.setCapability(BG.ALLOW_CHILDREN_READ);
root.setCapability(root.ALLOW_CHILDREN_WRITE);
root.setCapability(root.ALLOW_DETACH);
return(root); }
// [THIS METHOD ADDS A SHAPE3D
OBJECT FROM OUTSIDE TO THE // TRANSFORMGROUP NODE OF LEFT
SUBTREE OF THE PREVIOUSLY // CREATED
SCENEGRAPH]
public void addShapeObject(Shape3D
shape) {
this.c3d.stopRenderer(); //
System.out.println("addshapeobj:gotshape"+shape);
shape.setPickable(true);
shape.setCapability(shape.ALLOW_GEOMETRY_WRITE); //
System.out.println("Live : "+this.TG.isLive());
this.LC.removeBranchGraph(this.BG); //
System.out.println("Live : "+this.TG.isLive());
this.TG.addChild(shape); //
System.out.println("attached:shape3d");
this.LC.addBranchGraph(this.BG);
this.c3d.startRenderer();
/////////////////////////////////////////////////////
System.out.println(this.c3d.hashCode());
///////////////////////////////////////////////////// //
System.out.println("Renderer : "+this.c3d.isRendererRunning()+"\tCanvas
: "+this.c3d.isValid()); //
System.out.println("Canvas3D size :
"+this.c3d.getSize()); return;
}
// [for multiple windows] public void
newCanvas(Component c) { this.c3d=new
Canvas3D(null);
v.addCanvas3D(this.c3d);
System.out.println(this.c3d); }
// [for multiple
windows] public Canvas3D
getCanvas() // returns canvas to
main file for adding in a Jpanel {
this.c3d.setBackground(Color.blue);
this.c3d.setForeground(Color.white); return
this.c3d; }
public void setCanvas(Canvas3D
c) // This canvas is passed from main file .. and
it overrides the original canvas created above
{ this.c3d=c;
} }
|