[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