[vtkusers] VTK JAVA 2D charts

Jim Labiak jim at jslengineeringsoftware.com
Sat Mar 18 14:40:56 EDT 2017


Hello vtk users,

I've been trying to use the JAVA VTK chart class to create 2D plots, but 
it is not working. The JRE crashes every time at the spot where the plot 
is added to the chart. During debugging, I trace the crash to the JAVA 
Vector.class at line 477 (method directly below), which is the return 
statement... I've extended vtkRenderWindowPanel and use that class to do 
my rendering as it seemed to be the most robust approach for my 
application. Only a portion of the code from that class is shown below.

The JAVA wrapper is known to be difficult to learn, but 2D charts really 
must work for this (vtk) to be a viable JAVA program. I could create 3D 
charts and make them look 2D, but it seems like I must be missing 
something in the 2D charts... I don't see "test" programs in the 
documentation for this class (vtkChart) and related ones in JAVA - was 
this ever tested during development, and anyone know how extensively? 
Or, is the wrapper just kind of generated and then exists "as-is"? Some 
of the statements required and shown in other language examples are 
difficult to translate into JAVA accurately.

Thanks for any suggestions,

Jim

Excerpt from Vector.class:

     /**
      * Returns the component at the specified index.
      *
      * <p>This method is identical in functionality to the {@link 
#get(int)}
      * method (which is part of the {@link List} interface).
      *
      * @param      index   an index into this vector
      * @return     the component at the specified index
      * @throws ArrayIndexOutOfBoundsException if the index is out of range
      *         ({@code index < 0 || index >= size()})
      */
     public synchronized E elementAt(int index) {
         if (index >= elementCount) {
             throw new ArrayIndexOutOfBoundsException(index + " >= " + 
elementCount);
         }

         return elementData(index);
     }

--------------------------------------------------------------------------------------------------------------------------

public class RenderWindowPanel extends vtkRenderWindowPanel {

// Only relevant part of the class is shown...

public void updateRenderWindowPanelYPosData(Object[] aObject) {
     this.xData = (vtkFloatArray) this.objectArrayXData[3];
     this.yData = (vtkFloatArray) this.objectArrayYData[4];

         this.table = new vtkTable();
         vtkDoubleArray arrX = new vtkDoubleArray();
         arrX.SetName("ArrayX");
         vtkDoubleArray arrY = new vtkDoubleArray();
         arrY.SetName("ArrayY");

         this.table.SetNumberOfRows(this.xData.GetNumberOfTuples());
             double tempx = 0;
             double tempy = 0;

             // Column 0
             for (int i = 0; i < this.xData.GetNumberOfTuples(); i++) {
                 tempx = this.xData.GetValue(i);
                 arrX.InsertNextTuple1(tempx);
             }
             this.table.AddColumn(arrX);

             // Column 1
             for (int i = 0; i < this.yData.GetNumberOfTuples(); i++) {
                 tempy = this.yData.GetValue(i);
                 arrY.InsertNextTuple1(tempy);
             }
             this.table.AddColumn(arrY);

         this.chart = new vtkChart();
         this.plot = new vtkPlot();
         this.chart.AddPlot(this.plot);
         // Note: also tried this.plot = this.chart.AddPlot(0);
         this.plot.SetColor(0.0, 0.0, 255.0);
         this.plot.SetWidth(1.0);
         this.plot.SetInputData(this.table, "ArrayX", "ArrayY");

         this.view = new vtkContextView();
         this.view.SetRenderWindow(this.GetRenderWindow());
         this.view.SetRenderer(this.renderer);
         this.view.GetRenderWindow().SetMultiSamples(0);
         this.view.GetScene().AddItem(this.chart);

         this.renderer.SetActiveCamera(this.camera);
         this.renderer.AddActor(this.textActor);
         this.renderer.SetBackground(255, 255, 255); // white
         this.renderer.ResetCamera();
         this.renderWindowInteractor = this.view.GetInteractor();
         this.view.GetInteractor().Initialize();
         this.view.GetInteractor().Start();

         try {
             this.Render();
             System.out.println("Debug break after render");
         } catch (Exception e) {
             e.printStackTrace();
         }

}

}





-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20170318/56733764/attachment.html>


More information about the vtkusers mailing list