[vtkusers] [vtk-developers] How to extract a part defined by closed points inside a unstructured Grid Surface
Goodwin Lawlor
goodwin.lawlor.lists at gmail.com
Wed Feb 26 08:49:52 EST 2014
Hi Edgar,
Have a look at this Tcl example:
http://vtk.org/gitweb?p=VTK.git;a=blob;f=Common/DataModel/Testing/Tcl/SelectionLoop.tcl
You could also try replacing vtkExtractGeometry in the example
with vtkClipDataSet
hth
Goodwin
ps This is more a VTK Users type question... I've moved to that list
On Mon, Feb 24, 2014 at 5:17 AM, darkcminor <darkcminor at gmail.com> wrote:
> I want to extract a part of a surface defined here by red points, in fact
> it
> is a closed contour (What I want is to get a piece of cake defined by
> contour)
>
> I have this:
>
> <http://vtk.1045678.n5.nabble.com/file/n5726086/have.png>
>
>
> To get taht The current code is
>
>
> /package require vtk
>
> # Create a reader to read the unstructured grid data. We use a
> # vtkDataSetReader which means the type of the output is unknown until
> # the data file is read.
> vtkDEMReader reader
> reader SetFileName "$VTK_DATA_ROOT/Data/SainteHelens.dem"
> reader Update
> puts "Dataset reader actual memory: [[reader GetOutput]
> GetActualMemorySize]"
> puts "Dataset reader no of points: [[reader GetOutput]
> GetNumberOfPoints]"
>
> set lo [lindex [[reader GetOutput] GetScalarRange] 0]
> set hi [lindex [[reader GetOutput] GetScalarRange] 1]
>
> # Get the physical xy extent of dataset
> scan [[reader GetOutput] GetWholeExtent] "%d %d %d %d %d %d" XminR XmaxR
> YminR YmaxR ZminR ZmaxR
> puts "Physical extent of dataset: $XminR $XmaxR $YminR $YmaxR $ZminR
> $ZmaxR"
>
> # trims off points with no data (value -9999) in DEMS converted
> # from ASCII arc grid files. This step could be used to crop the data
> # at another elevation by changing the threshold value
> vtkThreshold cropped
> cropped SetInput [reader GetOutput]
> cropped ThresholdByUpper -9998; # threshold value
> cropped Update
> puts "Threshold filter no of cells : [[cropped GetOutput]
> GetNumberOfCells]"
> puts "Threshold filter no of points: [[cropped GetOutput]
> GetNumberOfPoints]"
>
> # Create the geometry conneting the grid of location points
> # at this point the surface is flat with an x-y grid of numbers
> # (scalars) representing elevations
> vtkGeometryFilter geom
> geom SetInput [cropped GetOutput]
> geom Update
> puts "Geometry filter no of cells : [[geom GetOutput] GetNumberOfCells]"
> puts "Geometry filter no of points: [[geom GetOutput] GetNumberOfPoints]"
>
> # Now warp the surface based on the scalar elevation values
> # This creates the 3D mesh model of the terrain.
> vtkWarpScalar surface
> surface SetInput [geom GetOutput]
> surface SetScaleFactor 1; # $scale variable controls vertical
> exaggeration
> surface Update
> #surface UseNormalOn
> #surface SetNormal 0 0 1
> puts "Warp scalar no of cells : [[surface GetOutput] GetNumberOfCells]"
> puts "Warp scalar no of points: [[surface GetOutput] GetNumberOfPoints]"
>
>
>
> # Map dataset to graphics primitives
> #
> vtkDataSetMapper demMapper
> demMapper SetInputConnection [surface GetOutputPort]
> demMapper ScalarVisibilityOff; # This prevents surface being colored
> based
> on scalar value
>
> #
> ===========================================================================
> # Create actor for surface topogrpahy
> #
> ===========================================================================
>
> vtkLODActor demActor
> demActor SetMapper demMapper
> [demActor GetProperty] SetInterpolationToGouraud
> [demActor GetProperty] SetRepresentationToSurface
>
> #
> ===========================================================================
> # Create projected terrain path
> #
> ===========================================================================
>
> # Create some paths
> vtkPoints pts
> pts InsertNextPoint 562669 5.1198e+006 1992.77
> pts InsertNextPoint 562100 5.1170e+006 1900.77
> pts InsertNextPoint 562850 5.11181e+006 1912.57
> pts InsertNextPoint 562659 5.1198e+006 1992.77
>
>
>
> vtkCellArray lines
> lines InsertNextCell 4
> lines InsertCellPoint 0
> lines InsertCellPoint 1
> lines InsertCellPoint 2
> lines InsertCellPoint 3
>
> vtkPolyData terrainPaths
> terrainPaths SetPoints pts
> terrainPaths SetLines lines
>
> vtkProjectedTerrainPath projectedPaths
> projectedPaths SetInput terrainPaths
> projectedPaths SetSource [reader GetOutput]
> projectedPaths SetHeightOffset 25
> projectedPaths SetHeightTolerance 5
> projectedPaths SetProjectionModeToNonOccluded
> projectedPaths SetProjectionModeToHug
> projectedPaths Update
> puts "Projected path filter no of cells : [[projectedPaths GetOutput]
> GetNumberOfCells]"
>
> #vtkPolyDataMapper pathMapper
> # pathMapper SetInputConnection [projectedPaths GetOutputPort]
>
> vtkTubeFilter pathTube
> pathTube SetNumberOfSides 8
> pathTube SetInputConnection [projectedPaths GetOutputPort]
> pathTube SetRadius 10
>
> vtkPolyDataMapper pathTubeMapper
> pathTubeMapper SetInputConnection [pathTube GetOutputPort]
>
> vtkActor pathActor
> pathActor SetMapper pathTubeMapper
> [pathActor GetProperty] SetColor 1 0 0
> [pathActor GetProperty] SetSpecular .3
> [pathActor GetProperty] SetSpecularPower 30
>
> #
> ===========================================================================
> # Create a cell picker
> #
> ===========================================================================
>
> # Create a cell picker.
> vtkCellPicker picker
> picker AddObserver EndPickEvent annotatePick
>
> # Create a text mapper and actor to display the results of picking.
> vtkTextMapper textMapper
> set tprop [textMapper GetTextProperty]
> $tprop SetFontFamilyToArial
> $tprop SetFontSize 10
> $tprop BoldOn
> $tprop ShadowOn
> $tprop SetColor 1 0 0
> vtkActor2D textActor
> textActor VisibilityOff
> textActor SetMapper textMapper
>
> #
> ===========================================================================
> # Create renderer, render window and add actors to the renderer
> #
> ===========================================================================
>
> # Create the RenderWindow, Renderer and both Actors
> #
> vtkRenderer ren1
> vtkRenderWindow renWin
> renWin AddRenderer ren1
> vtkRenderWindowInteractor iren
> iren SetRenderWindow renWin
> iren SetPicker picker
>
> # Add the actors to the renderer, set the background and size
> #
> ren1 AddActor demActor
> ren1 AddActor pathActor
> ren1 AddActor2D textActor
> #ren1 AddActor probeActor
> ren1 SetBackground .1 .2 .4
>
> iren AddObserver UserEvent {wm deiconify .vtkInteract}
> iren SetDesiredUpdateRate 5
>
> ren1 ResetCamera
> ren1 ResetCameraClippingRange
>
> renWin Render
>
> wm withdraw .
>
> # Create a Tcl procedure to create the text for the text mapper used to
> # display the results of picking.
> proc annotatePick {} {
> if { [picker GetCellId] < 0 } {
> textActor VisibilityOff
>
> } else {
> set selPt [picker GetSelectionPoint]
> set x [lindex $selPt 0]
> set y [lindex $selPt 1]
> set pickPos [picker GetPickPosition]
> set xp [lindex $pickPos 0]
> set yp [lindex $pickPos 1]
> set zp [lindex $pickPos 2]
>
> textMapper SetInput "($xp, $yp, $zp)"
> textActor SetPosition $x $y
> textActor VisibilityOn
> }
>
> renWin Render
> }/
>
> Now I was taking a look at vtkExtractGrid, however as surface is no
> structured grid I do not know how to extract a part of the surface,
> I was trying
>
> /vtkExtractGrid extract
> extract SetVOI 1 55 -1000 1000 -1000 1000
> extract SetInputData #pass reader Output as surface?
>
> vtkPlane plane
> plane SetOrigin 0 4 2
> plane SetNormal 0 1 0
> vtkCutter cutter
> cutter SetInputConnection [extract GetOutputPort]
> cutter SetCutFunction plane
> cutter GenerateCutScalarsOff
> cutter SetSortByToSortByCell
>
> vtkLookupTable clut
> clut SetHueRange 0 .67
> clut Build
>
> vtkPolyDataMapper cutterMapper
> cutterMapper SetInputConnection [cutter GetOutputPort]
> cutterMapper SetScalarRange .18 .7
> cutterMapper SetLookupTable clut
>
> vtkActor cut
> cut SetMapper cutterMapper
> /
>
> Could you please suggest an idea on how to extract or cut this surface
> defined by contour?
>
>
>
> --
> View this message in context:
> http://vtk.1045678.n5.nabble.com/How-to-extract-a-part-defined-by-closed-points-inside-a-unstructured-Grid-Surface-tp5726086.html
> Sent from the VTK - Dev mailing list archive at Nabble.com.
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtk-developers
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20140226/ac6bb38b/attachment.html>
More information about the vtkusers
mailing list