NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

Title in 3D Graph

Hi,

I try to plot a title on a DisplayImplJ3D. So I take the
DisplayRendererJ3D, the VisADCanvasJ3D, to finally find the
GraphicsContext3D. I found part of code from DisplayRendererJ3D to
calculate the point of vision.
But my code block when I try to use the GraphicsContext3D...
I dont know why ?
Is there a more simple method to plot title on a DisplayimplJ3D ?
And If not where are my mistakes ???
Thanks
-Sylvain-

...
// After creating the Display and associate all the maps and references
DisplayRendererJ3D disp_rend = (DisplayRendererJ3D)                             
   
display.getDisplayRenderer();
VisADCanvasJ3D canvas = disp_rend.getCanvas();
GraphicsContext3D graphics = canvas.getGraphicsContext3D();
// The GraphicsContext3D is not null but 
// freeze with some methods (for exemple :setAppearence)

Point3d position1 = new Point3d();
Point3d position2 = new Point3d();
Point3d position3 = new Point3d();
canvas.getPixelLocationInImagePlate(1, 10, position1);
canvas.getPixelLocationInImagePlate(10, 10, position2);
canvas.getPixelLocationInImagePlate(1, 1, position3);
if (display != null && display.getGraphicsModeControl() != null) 
{
        // hack to move text closer to eye
        if (display.getGraphicsModeControl().getProjectionPolicy() =
                  View.PERSPECTIVE_PROJECTION) 
        {
                Point3d left_eye = new Point3d();
                Point3d right_eye = new Point3d();
                canvas.getLeftEyeInImagePlate(left_eye);
                canvas.getRightEyeInImagePlate(right_eye);
                Point3d eye = new Point3d((left_eye.x +
right_eye.x)/2.0,
                        (left_eye.y +
right_eye.y)/2.0,                                                       
(left_eye.z + right_eye.z)/2.0);
                double alpha = 0.3;
                position1.x = alpha * position1.x + (1.0 - alpha) *
eye.x;
                position1.y = alpha * position1.y + (1.0 - alpha) *
eye.y;
                position1.z = alpha * position1.z + (1.0 - alpha) *
eye.z;
                position2.x = alpha * position2.x + (1.0 - alpha) *
eye.x;
                position2.y = alpha * position2.y + (1.0 - alpha) *
eye.y;
                position2.z = alpha * position2.z + (1.0 - alpha) *
eye.z;
                position3.x = alpha * position3.x + (1.0 - alpha) *
eye.x;
                position3.y = alpha * position3.y + (1.0 - alpha) *
eye.y;
                position3.z = alpha * position3.z + (1.0 - alpha) *
eye.z;
         }
}
// end of hack to move text closer to eye                    

Transform3D t = new Transform3D();
canvas.getImagePlateToVworld(t);
t.transform(position1);
t.transform(position2);
t.transform(position3);

double[] start = {(double) position1.x,
                 (double) position1.y,
                 (double) position1.z};
double[] base =  {(double) (position2.x - position1.x),
                 (double) (position2.y - position1.y),
                 (double) (position2.z - position1.z)};
double[] up =    {(double) (position3.x - position1.x),
                 (double) (position3.y - position1.y),
                 (double) (position3.z - position1.z)};            
try 
{
        double[] startl = {(double) position3.x,
                           (double) -position3.y,
                           (double) position3.z};    
        VisADLineArray array
                PlotText.render_label(opt.title, startl, base, up, false);
        graphics.draw(((DisplayImplJ3D) display).makeGeometry(array));
        // The code block here and nothing is drawn...
}
...


  • 2001 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the visad archives: