[vtkusers] VTK JAVA 2D charts

Jim Labiak jim at jslengineeringsoftware.com
Thu Mar 23 14:13:26 EDT 2017


Just sending again in case I catch a Java user...


On 3/18/2017 2:40 PM, Jim Labiak wrote:
>
> 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/20170323/e2a304c0/attachment.html>


More information about the vtkusers mailing list