# How can I pick a modified polydata?(complete code supplied)

**URL:** https://discourse.vtk.org/t/how-can-i-pick-a-modified-polydata-complete-code-supplied/2269
**Category:** Support
**Created:** [December 13, 2019, 7:51am UTC](https://discourse.vtk.org/t/how-can-i-pick-a-modified-polydata-complete-code-supplied/2269 "2019-12-13T07:51:14Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![tdchen](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/t/858c86/32.png) [@tdchen](https://discourse.vtk.org/u/tdchen)
#### Post date: [December 13, 2019, 7:51am UTC](https://discourse.vtk.org/t/how-can-i-pick-a-modified-polydata-complete-code-supplied/2269/1 "2019-12-13T07:51:14Z")

</div>

The following program display a triangle firstly.  
When you hit the triangle, it splits into 2 triangles.  
The problem is: after splitting, you can’t hit the large triangle.  
What is the reason?  
Hope your reply.

#include \<vtkAutoInit.h\>  
VTK\_MODULE\_INIT(vtkRenderingOpenGL2);  
VTK\_MODULE\_INIT(vtkInteractionStyle);

#include “vtkPolyData.h”  
#include “vtkPolyDataMapper.h”  
#include “vtkRenderWindow.h”  
#include “vtkRenderWindowInteractor.h”  
#include “vtkActor.h”  
#include “vtkProperty.h”  
#include “vtkCallbackCommand.h”  
#include “vtkCellPicker.h”  
#include “vtkRenderer.h”  
#include “vtkInteractorStyleTrackballCamera.h”

void eventfunc(vtkObject \*caller, unsigned long eid, void \*clientdata, void \*calldata);  
vtkRenderer \*renderer;

int main()  
{  
vtkPolyData \*triangles = vtkPolyData::New();  
vtkPoints \*points = vtkPoints::New();  
points-\>InsertNextPoint(0.0, 0.0, 0.0);  
points-\>InsertNextPoint(1.0, 0.0, 0.0);  
points-\>InsertNextPoint(1.0, 1.0, 0.0);  
triangles-\>SetPoints(points);  
points-\>Delete();  
vtkCellArray \*polys = vtkCellArray::New();  
polys-\>InsertNextCell(3);  
polys-\>InsertCellPoint(0);  
polys-\>InsertCellPoint(1);  
polys-\>InsertCellPoint(2);  
triangles-\>SetPolys(polys);  
polys-\>Delete();

vtkPolyDataMapper \*mapper = vtkPolyDataMapper::New();  
mapper-\>SetInputData(triangles);

vtkActor \*actor = vtkActor::New();  
actor-\>SetMapper(mapper);  
vtkProperty \*prop = actor-\>GetProperty();  
actor-\>GetProperty()-\>SetColor(1.0, 0.0, 0.0);  
actor-\>GetProperty()-\>SetEdgeVisibility(true);  
actor-\>GetProperty()-\>SetEdgeColor(0.0, 1.0, 0.0);

renderer= vtkRenderer::New(); //global var  
renderer-\>AddActor(actor);  
renderer-\>SetBackground(0.1, 0.2, 0.4);

vtkRenderWindow \*renWin = vtkRenderWindow::New();  
renWin-\>AddRenderer(renderer);  
renWin-\>SetSize(300, 300);

vtkRenderWindowInteractor \*iren = vtkRenderWindowInteractor::New();  
iren-\>SetRenderWindow(renWin);

vtkInteractorStyleTrackballCamera \*style = vtkInteractorStyleTrackballCamera::New();  
iren-\>SetInteractorStyle(style);

vtkCallbackCommand \*callback = vtkCallbackCommand::New();  
callback-\>SetCallback(eventfunc);  
callback-\>SetClientData(triangles);  
renWin-\>GetInteractor()-\>AddObserver(vtkCommand::LeftButtonPressEvent, callback, 1.0);  
callback-\>Delete();

iren-\>Initialize();  
iren-\>Start();

triangles-\>Delete();  
mapper-\>Delete();  
actor-\>Delete();  
renderer-\>Delete();  
renWin-\>Delete();  
iren-\>Delete();  
style-\>Delete();

return 0;  
}

void eventfunc(vtkObject \*caller, unsigned long eid, void \*clientdata, void \*calldata)  
{  
static int hits = 0;  
vtkPolyData \*triangles = (vtkPolyData \*)clientdata;

if(eid == vtkCommand::LeftButtonPressEvent)  
{  
vtkRenderWindowInteractor \*interactor = vtkRenderWindowInteractor::SafeDownCast(caller);  
vtkCellPicker \*picker = vtkCellPicker::New();  
picker-\>SetTolerance(0.0);

```
int X = interactor->GetEventPosition()[0];
int Y = interactor->GetEventPosition()[1];

picker->Pick(X, Y, 0.0, renderer); //renderer: global var
vtkProp *pProp = picker->GetViewProp();
if(pProp == NULL) return;

hits++;
printf("%d hits.\n", hits);
if(hits != 1) return;

vtkPoints *points = triangles->GetPoints();
vtkCellArray *polys = triangles->GetPolys();

double p[3];
p[0] = 0.2;
p[1] = 0.2;
p[2] = 0.0;
points->InsertNextPoint(p);
points->Modified();

vtkIdType pts[3];
pts[0] = 0;
pts[1] = 1;
pts[2] = 3;
polys->ReplaceCell(0, 3, pts);
polys->InsertNextCell(3);
polys->InsertCellPoint(1);
polys->InsertCellPoint(2);
polys->InsertCellPoint(3);
polys->Modified();

```

}  
}

---

<div class="post-metadata">

### Author: ![tdchen](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/t/858c86/32.png) [@tdchen](https://discourse.vtk.org/u/tdchen)
#### Post date: [December 16, 2019, 1:45am UTC](https://discourse.vtk.org/t/how-can-i-pick-a-modified-polydata-complete-code-supplied/2269/2 "2019-12-16T01:45:41Z")

</div>

Nobody knows?  
I think it is an interesting topic.  
You can replace any of the cone examples of vtk tutorials with this gragram to run it.
