[vtkusers] Problems with vtkVectorText and vtkFollower in Java

Carlos Martínez Burgos cmarbur at iti.upv.es
Wed Dec 11 08:46:28 EST 2002


Hi.

I have tried it using vtkTextActor and the text is shown. I send the code 
to help others.

Thank you again.


On Wed, 11 Dec 2002, Jeff Lee wrote:

> Hi,
> I ran your code and Grid2 shows text.  Grid1 shows spheres and Grid2 
> shows text.  I use text all the time, but have abandoned vtkTextFollower 
> in favor of vtkTextActor.  The examples in Wrapping/Java/AxisActor.java 
> show how to do this.  You could try to run TestVTKCanvas and see if you 
> get text.  If not, perhaps your build is corrupt.
> -Jeff
> 
> Carlos Martínez Burgos wrote:
> 
> >Hi again.
> >
> >I have done some code to show what I want to do? The files are attached. 
> >
> >On Grid1 I show what I want to do, drawing spheres instead of text.
> >
> >On Grid2 I use the same code but drawing text instead of spheres. I can't
> >see any text on screen so I think there is a bug in the Java wrapper
> >because I can see texts in tcl examples. If you run this example and can
> >see any text please let me know.
> >
> >Does somebody tried text drawings using java wrapper?
> >
> >Thanks in advance.
> >
> >
> >On Tue, 10 Dec 2002, Jeff Lee wrote:
> >
> >  
> >
> >>perhaps you could post some sample code so we can see what you are 
> >>trying to do?
> >>-Jeff
> >>
> >>Carlos Martínez Burgos wrote:
> >>
> >>    
> >>
> >>>Hi all.
> >>>
> >>>I try to do a grid plane using vtkPlaneSource. I have to put some legend. 
> >>>At first I had tried to include a vtkCubeAxisActor2D but its behaviour is 
> >>>not as I want. I want to assign a number/leter to each axis of the grid. 
> >>>This shows it:
> >>>
> >>>  A B C
> >>> +-+-+-+
> >>>1 | | | |
> >>> +-+-+-+
> >>>2 | | | |
> >>> +-+-+-+
> >>>3 | | | |
> >>> +-+-+-+
> >>>
> >>>I have tried to use vtkVectorText and vtkFollower but nothing is showed. 
> >>>I'm using the Java wrapper. If I run the Tcl sample programs the text is 
> >>>showed. Even then when I do a "zoom extent" to show all the objects on the 
> >>>renderer, it seems that the actor is there because the extent is bigger 
> >>>that when I don't add the actor.
> >>>
> >>>I have tried not using vtkFollower and I have got the same result.
> >>>
> >>>I have tried other text objects (vtkTextActor) and nothing changes.
> >>>
> >>>This seems there is a problem with texts in Java. Perhaps is because I use 
> >>>Linux. Have you got good results in Windows?
> >>>
> >>>I wish to know if somebody is using java and has got good results showing 
> >>>texts in Linux.
> >>>
> >>>Thanks.
> >>>      
> >>>
> 

-- 
----------------------------------------------------------------------
Carlos Martínez Burgos      |     Instituto Tecnológico de Informática
Ingeniero Informático       |      Universidad Politécnica de Valencia
Tlf: +34 963877237          |                        Camí de Vera, S/N
cmarbur at iti.upv.es          |                   46071 Valencia - Spain
www.iti.upv.es/~cmarbur     |                           www.iti.upv.es
----------------------------------------------------------------------
-------------- next part --------------
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import vtk.*;

public class Grid2 extends JPanel {

    static {
        System.loadLibrary("vtkHybridJava");
    };

    protected double x, y, z, w, h;
    protected int xr, yr;
    protected vtkPanel renderPane = new vtkPanel();

    public Grid2() {
        this(0, 0, 0, 10, 10, 10, 10);
    }

    public Grid2(double x, double y, double z, double w, double h, int xr, int yr) {
        super();
        this.x = x;
        this.y = y;
        this.z = z;
        this.w = w;
        this.h = h;
        this.xr = xr;
        this.yr = yr;
        initGUI();
    }

    private void initGUI() {
        addComponentListener(new ComponentAdapter() {
            public void componentResized(ComponentEvent e) {
                updateSize();
            }
        });

        vtkRenderer renderer = renderPane.GetRenderer();
        renderer.SetBackground(1, 1, 1);

        vtkPlaneSource plane = new vtkPlaneSource();
        plane.SetOrigin(x, y, z);
        plane.SetPoint1(x + w, y, z);
        plane.SetPoint2(x, y + h, z);
        plane.SetXResolution(xr);
        plane.SetYResolution(yr);

        vtkPolyDataMapper mapper = new vtkPolyDataMapper();
        mapper.SetInput(plane.GetOutput());

        vtkActor actor = new vtkActor();
        actor.SetMapper(mapper);
        actor.GetProperty().SetRepresentationToWireframe();
        actor.GetProperty().SetColor(0, 0, 0);

        renderer.AddActor(actor);

        for (int i = 0; i < xr; i++) {
            String label = String.valueOf((char) ('A' + i));
            double xt = x + (0.5 + i) * (w / xr);
            double yt = y - (h / (2 * yr));

            vtkTextActor textActor = new vtkTextActor();
            textActor.SetInput(label);
            textActor.ScaledTextOff();
            textActor.GetTextProperty().SetColor(0, 0, 0);
            textActor.GetTextProperty().ShadowOff();
            textActor.GetPositionCoordinate().SetCoordinateSystemToWorld();
            textActor.GetPositionCoordinate().SetValue(xt, yt, z);

            renderer.AddActor(textActor);
        }

        for (int i = 0; i < yr; i++) {
            String label = String.valueOf(i + 1);
            double xt = x - (w / (2 * xr));
            double yt = y + (0.5 + i) * (h / yr);

            vtkTextActor textActor = new vtkTextActor();
            textActor.SetInput(label);
            textActor.ScaledTextOff();
            textActor.GetTextProperty().SetColor(0, 0, 0);
            textActor.GetTextProperty().ShadowOff();
            textActor.GetPositionCoordinate().SetCoordinateSystemToWorld();
            textActor.GetPositionCoordinate().SetValue(xt, yt, z);

            renderer.AddActor(textActor);
        }

        add(renderPane, BorderLayout.CENTER);
    }

    private void updateSize() {
        renderPane.setSize(getWidth(), getHeight());
    }

    public static void main(String[] args) {
        JFrame f = new JFrame("Grid test");
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        f.getContentPane().add(new Grid2());
        f.pack();
        f.setVisible(true);
    }
}



More information about the vtkusers mailing list