[vtkusers] Adding points at the begining of a polyline
Jean-Max Redonnet
jmax.red at gmail.com
Thu Nov 10 08:36:15 EST 2016
Hi ! First, I would like to thanks people who works on VTK. This is a
great piece of software, very fast, very efficient !
I'm currently working on a viewer that is supposed to display dynamically
the polylines calculated by my algorithms. To do that, I relied on this
post :
http://public.kitware.com/pipermail/vtkusers/2010-July/061781.html
This works fine to append points to the polyline, but due to my algorithms,
I need also to prepend points at the beginning of the polyline. I can't
figure out how to do that. Any help would be gracefully appreciated.
jMax
===
Here is my test code. The first loop works fine, but the second one is a
mess.
package vtktest;
import java.awt.BorderLayout;
public class PolyLineTest extends JFrame {
private static final long serialVersionUID = 1L;
static {
if (!vtkNativeLibrary.LoadAllNativeLibraries()) {
}
vtkNativeLibrary.DisableOutputWindow(null);
}
private Random random = new Random();
private vtkRenderWindowPanel canvas;
private vtkRenderer renderer;
private vtkRenderWindowInteractor iren;
private JPanel mainPanel;
public static void main(String[] args) {
new PolyLineTest();
}
public PolyLineTest() {
this.canvas = new vtkRenderWindowPanel();
this.renderer = canvas.GetRenderer();
this.iren = canvas.getRenderWindowInteractor();
this.setTitle("VTK Test");
// First we'll create an initial point to build on
vtkPoints points = new vtkPoints();
points.InsertPoint(0, 0.0, 0.0, 0.0);
// The cell array can be thought of as a connectivity list. Here we
// specify the number of points followed by that number of point
// ids. This can be repeated as many times as there are primitives
in
// the list.
// This first one is just a point to connect to as we add more
points
vtkCellArray lines = new vtkCellArray();
lines.InsertNextCell(1); // number of points
lines.InsertCellPoint(0);
vtkPolyData track = new vtkPolyData();
track.SetPoints(points);
track.SetLines(lines);
vtkPolyDataMapper mapper = new vtkPolyDataMapper();
mapper.SetInputData(track);
vtkActor actor = new vtkActor();
actor.SetMapper(mapper);
actor.GetProperty().SetColor(0.3800, 0.7000, 0.1600);
renderer.AddActor(actor);
renderer.ResetCamera();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
mainPanel.add(canvas, BorderLayout.CENTER);
this.getContentPane().add(mainPanel);
this.setSize(800, 800);
this.setLocationRelativeTo(null); // Center on desktop
this.setVisible(true);
// Loop to add points to line
System.out.println("Appending");
for (int i = 1; i < 10; i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
double[] prev_pt = points.GetPoint(i - 1);
double new_x = prev_pt[0] + (2.0 * random.nextDouble() - 1.0);
double new_y = prev_pt[1] + (2.0 * random.nextDouble() - 1.0);
double new_z = prev_pt[2] + (2.0 * random.nextDouble() - 1.0);
// Insert the new point
// then tell VTK that the data has been modified so the Render()
// call will update the view with the new data
points.InsertPoint(i, new_x, new_y, new_z);
points.Modified();
// To get lines we need a beginning and end point in the
// connectivity list,
// then again tell VTK that the data has been modified
lines.InsertNextCell(2);
lines.InsertCellPoint(i - 1);
lines.InsertCellPoint(i);
lines.Modified();
canvas.repaint();
}
System.out.println("Prepending");
for (int i = 1; i < 10; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
double[] prev_pt = points.GetPoint(0);
double new_x = prev_pt[0] + (2.0 * random.nextDouble() - 1.0);
double new_y = prev_pt[1] + (2.0 * random.nextDouble() - 1.0);
double new_z = prev_pt[2] + (2.0 * random.nextDouble() - 1.0);
points.InsertPoint(0, new_x, new_y, new_z);
points.Modified();
lines.InsertNextCell(2);
lines.UpdateCellCount (2);
lines.InsertCellPoint(0);
lines.InsertCellPoint(1);
lines.Modified();
canvas.repaint();
}
}
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20161110/8709e768/attachment.html>
More information about the vtkusers
mailing list