[vtkusers] Adding points at the begining of a polyline
Jean-Max Redonnet
jmax.red at gmail.com
Fri Nov 25 11:29:18 EST 2016
Hello,
Thanks for your response.
I just replaced i by pid in lines
lines.InsertCellPoint(i);
firstPointId = i; // Newly insterted point is new line head point
to make it work.
Thanks again. You help me a lot.
Regards
jMax
2016-11-22 14:54 GMT+01:00 Joachim Pouderoux <joachim.pouderoux at kitware.com>
:
> Hello,
>
> You are right, vtkCellArray allows to append data but not insert in sense
> of shifting data.
> Here you are building a set of segments so there is no need to shift
> anything (but you can do you manually by creating new arrays if you want).
> Append your points and append your cells, the order does no matter, just
> remember what is first point (resp. last point to appending).
>
> int firstPointId = 0; // Initial start point
> 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);
>
> int pid = points.InsertNextPoint(new_x, new_y, new_z);
> points.Modified();
>
> lines.InsertNextCell(2);
> lines.InsertCellPoint(firstPointId);
> lines.InsertCellPoint(i);
> firstPointId = i; // Newly insterted point is new line head point
> lines.Modified();
> canvas.repaint();
> }
>
> Hope it helps.
>
> Best regards,
>
> *Joachim Pouderoux*, PhD
>
> *Technical Expert - Scientific Computing Team*
> *Kitware SAS <http://www.kitware.fr>*
>
>
> 2016-11-10 9:36 GMT-04:00 Jean-Max Redonnet <jmax.red at gmail.com>:
>
>> 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();
>> }
>> }
>> }
>>
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Please keep messages on-topic and check the VTK FAQ at:
>> http://www.vtk.org/Wiki/VTK_FAQ
>>
>> Search the list archives at: http://markmail.org/search/?q=vtkusers
>>
>> Follow this link to subscribe/unsubscribe:
>> http://public.kitware.com/mailman/listinfo/vtkusers
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20161125/4f8f4d67/attachment.html>
More information about the vtkusers
mailing list