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;
  }
}

Reply via email to