[vtkusers] deleting a face from polydata

Jeff Lee jeff at cdnorthamerica.com
Wed Apr 7 16:59:44 EDT 2004


mabey polydata.Update() or polydata.Modified() after the removal?
-Jeff

John Hunter wrote:

>I am interested in removing some data from my scene by clicking on it
>with a mouse.  I've returned to my trusty sphere as a demo case.  I
>use a cell picker to get the cell id.  When I call
>polyData.DeleteCell(cellId) on the poly data, I would like that cell
>to be removed from my scene
>
>I initialize my scene with 
>
>    sphere = vtk.vtkSphereSource()
>    sphere.SetRadius(20)
>    res = 5
>    sphere.SetThetaResolution(res)
>    sphere.SetPhiResolution(res)
>    sphere.SetCenter(0,0,0)
>    polyData = sphere.GetOutput()
>    polyData.BuildCells()
>    mapper = vtk.vtkPolyDataMapper()
>    mapper.SetInput(polyData)
>
>    actor = vtk.vtkActor()
>    actor.SetMapper(mapper)
>    renderer.AddActor(actor)
>
>and this is my pick function
>
>def pick_cell(renwinInteractor, event):
>    x, y = renwinInteractor.GetEventPosition()
>
>    picker = vtk.vtkCellPicker()
>    picker.PickFromListOn()
>    picker.AddPickList(actor)
>    picker.SetTolerance(0.01)
>    picker.Pick(x, y, 0, renderer)
>    cellId = picker.GetCellId()
>    if cellId==-1:
>        print 'swing and a miss'
>        return
>
>    polyData.DeleteCell(cellId)
>    print 'deleted cell', cellId
>    mapper.Update()
>
>I am pretty sure I am selecting the right cell, because I can insert a
>marker on each of the cell points and correctly mark the vertices
>under the triangle that I click on.   If I use cell =
>polyData.GetCell(cellId) the type is identified as vtkTriangle.  If I
>successively click on the same point, I never get the same cell id
>twice, suggesting the cells are being removed from the poly data.  But
>they are not disappearing from the rendered scene.
>
>Any suggestions?  Complete example below.
>
>John Hunter
>
>#!/usr/bin/env python
>
>import vtk
>
>renderer = vtk.vtkRenderer()
>renWin = vtk.vtkRenderWindow()
>renWin.AddRenderer(renderer)
>interactor = vtk.vtkRenderWindowInteractor()
>interactor.SetRenderWindow(renWin)
>
>sphere = vtk.vtkSphereSource()
>sphere.SetRadius(20)
>res = 5
>sphere.SetThetaResolution(res)
>sphere.SetPhiResolution(res)
>sphere.SetCenter(0,0,0)
>polyData = sphere.GetOutput()
>polyData.BuildCells()
>mapper = vtk.vtkPolyDataMapper()
>mapper.SetInput(polyData)
>
>actor = vtk.vtkActor()
>actor.SetMapper(mapper)
>#actor.GetProperty().SetOpacity(0.5)
>
>renderer.AddActor(actor)
>
>def mark(x,y,z):
>    sphere = vtk.vtkSphereSource()
>    sphere.SetRadius(1)
>    res = 20
>    sphere.SetThetaResolution(res)
>    sphere.SetPhiResolution(res)
>    sphere.SetCenter(x,y,z)
>    mapper = vtk.vtkPolyDataMapper()
>    mapper.SetInput(sphere.GetOutput())
>
>    marker = vtk.vtkActor()
>    marker.SetMapper(mapper)
>    renderer.AddActor(marker)
>    marker.GetProperty().SetColor( (1,0,0) )
>    interactor.Render()
>
>def pick_cell(renwinInteractor, event):
>    x, y = renwinInteractor.GetEventPosition()
>
>    picker = vtk.vtkCellPicker()
>    picker.PickFromListOn()
>    picker.AddPickList(actor)
>    picker.SetTolerance(0.01)
>    picker.Pick(x, y, 0, renderer)
>    cellId = picker.GetCellId()
>    if cellId==-1:
>        print 'swing and a miss'
>        return
>
>    polyData.DeleteCell(cellId)
>    print 'deleted cell', cellId
>    mapper.Update()
>
>
>interactor.AddObserver('LeftButtonPressEvent', pick_cell)
>
>
>interactor.Initialize()
>interactor.Start()
>
>
>_______________________________________________
>This is the private VTK discussion list. 
>Please keep messages on-topic. Check the FAQ at: <http://public.kitware.com/cgi-bin/vtkfaq>
>Follow this link to subscribe/unsubscribe:
>http://www.vtk.org/mailman/listinfo/vtkusers
>
>  
>



More information about the vtkusers mailing list