[vtkusers] clip one vtkPolyData with another?
David.Pont at ensisjv.com
David.Pont at ensisjv.com
Sun Feb 26 15:26:24 EST 2006
Alle Meije Wink <alle_meije at yahoo.co.uk> wrote on 27/02/2006 09:13:31:
Well Alle Meije I am running out of ideas, especially as I have never
worked with volume data.
You might want to take a look at Slicer (www.slicer.org), maybe the people
over there have some ideas?
regards
Dave P
> Hi David and others,
>
> Thanks for your many hints and tips. I tried vtkSelectPolyData,
> vtkStencil, and vtkImplicitLoop, but at the moment nothing works.
>
> (the subdivision thing did not work, because the triangles of the cut
> surface -the clipcow way- differed orders of magnitude in size)
>
> >>I can't see how I should do this. From the test code for
> >>vtkImplicitSelectionLoop I saw that you can use it to extract a piece
of
> >>a surface (such as the isosurface), but what I would need is a piece of
> >>the cut-plane
> >
> > I was thinking you would cut your isosurface to get a polyline (after a
> > pass through vtkStripper?). This polyline would be the 'loop' which is
then
> > used to clip the cut planes with vtkImplicitSelectionLoop.
>
> My script is below, the (MRI) data is still at www.wbic.cam.ac.uk/~amw71
>
> I thought that this code would clip the cut surface, i.e. remove the
> part of the cut surface outside the brain iso-surface (defined by
> isoNormals).
>
> Instead, the cut surface still extends outside the brain (to the extent
> of the bounding box). There are cuts out of the cut surface *inside* the
> brain. I have captured the latest result in
> http://www.wbic.cam.ac.uk/~amw71/SurfaceCut3.png
>
> (grey value tresholded:http://www.wbic.cam.ac.uk/~amw71/SurfaceCut.png,
> plain clipped plane: http://www.wbic.cam.ac.uk/~amw71/SurfaceCut2.png)
>
> I am still trying to find a way to show the cut planes with the grey
> values inside, but with the planes cut so that only the part inside the
> surface is shown.
>
> Does this output make any sense (to anybody)?
>
> Thanks!
> Alle Meije
>
>
>
> attached: script to show isosurface and saggital cut-plane
> ===========================================================
>
>
>
> ############################################################
> # Prepare the GUI
>
> catch {load vtktcl}
> source vtkInt.tcl
> source colors.tcl
>
> ############################################################
> # Load the brain data
>
> vtkImageReader anatomyReader
> anatomyReader SetFileName "BrainTemplate.vtk"
> anatomyReader SetFileDimensionality 3
> anatomyReader SetHeaderSize 215
> anatomyReader SetDataSpacing 1 1 1
> anatomyReader SetDataExtent 0 90 0 108 0 90
> anatomyReader SetDataScalarTypeToUnsignedChar
>
> ############################################################
> # generate the isosurface from the ICBM template
>
> vtkMarchingCubes BrainIso
> BrainIso SetInput [anatomyReader GetOutput]
> BrainIso SetValue 0 70
>
> vtkSmoothPolyDataFilter smooth
> smooth SetInput [BrainIso GetOutput]
> smooth SetNumberOfIterations 20
>
> vtkTriangleFilter triangulate
> triangulate SetInput [smooth GetOutput]
>
> ############################################################
> # clip the brain
>
> vtkPoints points
> points InsertPoint 0 50.3 58.0 36.0
> points InsertPoint 1 50.3 58.0 36.0
> points InsertPoint 2 50.3 58.0 36.0
>
> vtkFloatArray normals
> normals SetNumberOfComponents 3
> normals SetNumberOfTuples 3
> normals SetTuple3 0 1.0 0.0 0.0
> normals SetTuple3 1 0.0 -1.0 0.0
> normals SetTuple3 2 0.0 0.0 -1.0
>
> vtkPlanes clipplanes
> clipplanes SetPoints points
> clipplanes SetNormals normals
>
> vtkClipPolyData clipper
> clipper SetInput [triangulate GetOutput]
> clipper SetClipFunction clipplanes
>
> vtkPolyDataMapper BrainIsoMapper
> BrainIsoMapper SetInput [clipper GetOutput]
> BrainIsoMapper ScalarVisibilityOff
>
> vtkActor BrainIsoActor
> BrainIsoActor SetMapper BrainIsoMapper
> eval [BrainIsoActor GetProperty] SetColor .6 .3 .3
> eval [BrainIsoActor GetProperty] SetOpacity 1
>
> # set origins at centres of volumes
>
> BrainIsoActor SetOrigin 46 55 46
>
> ############################################################
> # generate the slices at the clipping position
>
> ############################################################
> # cutplane: Sag
>
> # cut the volume (make cut-plane with grey values)
> vtkPlane planeSag
> planeSag SetOrigin 50.3 58.0 36.0
> planeSag SetNormal -1 0 0
>
> vtkCutter cutSag
> cutSag SetInput [anatomyReader GetOutput]
> cutSag SetCutFunction planeSag
>
> # cut the isosurface (make a contour+normals of the cut)
>
> vtkPolyDataNormals isoNormals
> isoNormals SetInput [smooth GetOutput]
>
> vtkCutter cutEdgesSag;
> cutEdgesSag SetInput [isoNormals GetOutput]
> cutEdgesSag SetCutFunction planeSag
>
> vtkStripper cutStripsSag;
> cutStripsSag SetInput [cutEdgesSag GetOutput]
> cutStripsSag Update
>
> vtkImplicitSelectionLoop cutLoopSag
> cutLoopSag SetLoop [[cutEdgesSag GetOutput] GetPoints]
>
> vtkClipPolyData clippedCutSag
> clippedCutSag SetInput [cutSag GetOutput]
> clippedCutSag SetClipFunction cutLoopSag
>
> # make the actor for the saggittal cutplane
> vtkPolyDataMapper cutPlaneMapperSag
> cutPlaneMapperSag SetInput [clippedCutSag GetOutput]
> vtkActor actorSag
> actorSag SetMapper cutPlaneMapperSag
>
> ############################################################
> # Create the RenderWindow, Renderer and add Actors
>
> # Create the camera
>
> vtkCamera camera
> camera SetFocalPoint 46 55 46
> camera SetPosition -80 -40 -50
> camera Azimuth 180
> camera Roll 270
>
> # add the actors
>
> vtkRenderer renWindow
> renWindow SetActiveCamera camera
> renWindow AddActor BrainIsoActor
> renWindow AddActor actorSag
>
> renWindow SetBackground .5 .5 .5
>
> # Use the camera in the renderwindow
>
> vtkRenderWindow renWin
> renWin AddRenderer renWindow
> renWin SetSize 512 512
>
> vtkRenderWindowInteractor RenderControl
> RenderControl SetRenderWindow renWin
> RenderControl Initialize
>
> ############################################################
>
> # Define custom interaction.
>
> vtkRenderWindowInteractor iren
> iren SetInteractorStyle ""
> iren SetRenderWindow renWin
> iren AddObserver KeyPressEvent Keypress
>
> ############################################################
> # write out files in other formats
>
> file delete -force Cover.wrl
>
> vtkVRMLExporter vrml
> vrml SetInput renWin
> vrml SetFileName Cover.wrl
> vrml Write
>
> # prevent the tk window from showing up, then start the event loop
>
> wm withdraw .
>
>
>
>
> ___________________________________________________________
> To help you stay safe and secure online, we've developed the all new
> Yahoo! Security Centre. http://uk.security.yahoo.com
More information about the vtkusers
mailing list