[vtkusers] Accessing p-skeleton

Sensei senseiwa at gmail.com
Mon Apr 22 08:49:48 EDT 2013


So... how do you manage to retrieve the complete topology?

Especially after some filtering, for example triangulating a polygon, 
I'd like to avoid having another library for topological operations.

Can I handle skeletons in VTK?


Cheers & Thanks!


On 4/18/13 10:58 AM, Sensei wrote:
> Hi everybody!
>
> I am writing a fairly simple program to try things. I'd like to store
> the entire topology of a cell complex, and as far as I understand I
> should use the vtkCellArray class.
>
> So what I wrote is simple: create a triangle. I started from the
> example, so I added cell by cell, just to be sure. (see the code below) I
>
> Now it works, and I correctly get the number of cells as 7 (1 2-cell, 3
> 1-cells, and 3 0-cells).
>
> How can I access them, collectively? For example "give me the
> 0-skeleton" (all the points).
>
> I have the impression I am misusing VTK here, and there is a kosher way
> of achieving this. In the future, I'll need this facility to pick cells
> of a certain dimension with the mouse.
>
> Any hints?
>
>
> Thanks & Cheers!
>
>
>
> PS. By the way, after adding a new actor, how can I force an update? It
> doesn't appear until I manipulate the window (for example panning or
> rotating the view).
>
>
>
>
>
>          double pts[3][3] =
>          {
>              { 0.0, 0.0, 0.0 },
>              { 1.0, 0.0, 0.0 },
>              { 0.0, 1.0, 0.0 }
>          };
>
>          vtkIdType k_0[3][1] =
>          {
>              { 0 },
>              { 1 },
>              { 2 }
>          };
>
>          vtkIdType k_1[3][2] =
>          {
>              { 0, 1 },
>              { 1, 2 },
>              { 2, 0 }
>          };
>
>          vtkIdType k_2[1][3] =
>          {
>              { 0, 1, 2 }
>          };
>
>          vtkSmartPointer<vtkPolyData> poly =
> vtkSmartPointer<vtkPolyData>::New();
>
>          // K_0
>          vtkSmartPointer<vtkPoints> points =
> vtkSmartPointer<vtkPoints>::New();
>          points->InsertPoint(0, pts[0]);
>          points->InsertPoint(1, pts[1]);
>          points->InsertPoint(2, pts[2]);
>
>          poly->SetPoints(points);
>
>          vtkSmartPointer<vtkCellArray> cells =
> vtkSmartPointer<vtkCellArray>::New();
>          // K_0
>          cells->InsertNextCell(1, k_0[0]);
>          cells->InsertNextCell(1, k_0[1]);
>          cells->InsertNextCell(1, k_0[2]);
>          // K_1
>          cells->InsertNextCell(2, k_1[0]);
>          cells->InsertNextCell(2, k_1[1]);
>          cells->InsertNextCell(2, k_1[2]);
>          // K_2
>          cells->InsertNextCell(3, k_2[0]);
>
>          poly->SetPolys(cells);
>
>          vtkSmartPointer<vtkPolyDataMapper> map =
> vtkSmartPointer<vtkPolyDataMapper>::New();
>          map->SetInput(poly);
>          map->Update();
>
>          vtkSmartPointer<vtkActor> actor =
> vtkSmartPointer<vtkActor>::New();
>          actor->SetMapper(map);
>
>          renderer3d_->AddActor(actor);
>
>          qWarning("> adding poly: %lld", cells->GetNumberOfCells());




More information about the vtkusers mailing list