[vtkusers] Errors in vtkCellDerivatives for certain cell types
Richard Strelitz
strelitz at lanl.gov
Wed Sep 20 16:05:53 EDT 2000
Colleagues,
I have been testing vtkCellDerivatives, one of the contributed modules.
I have modified the tcl example CellCenters.tcl which creates examples
of all cell types by adding code to compute the cellDerivative. This is
what I've found:
works for: voxel, hexahedron, wedge, pyramid, tetrahedron triangle,
trianglestrip
memory read error for Pixel and Polygon
incorrect answer for Quad (always = 0,0,0)
deranged answer for Line, polyline (for 2-D in plane data, 3rd component
is equivalent to NaN-
needs a warning, although cell derivative for polyline is probably best
left undefined.
provides answer though it perhaps shouldn't for vertex, polyvertex.
The main problems are in PIXEL, POLYGON, and, most maddeningly, QUAD.
The issues raised here precede the previously reported alleged error in
QUAD::derivatives,
if you compare the computations of Derivatives in polygon and hexahedron,
the error in QUAD
becomes more likely to exist.
Thank you,
Richard Strelitz,
Advanced Computing Group, LANL
-------------- next part --------------
catch {load vtktcl}
if { [catch {set VTK_TCL $env(VTK_TCL)}] != 0} { set VTK_TCL "D:/vtk31_source/examplesTcl" }
# Demonstrates all cell types
#
# NOTE: the use of MakeObject is included to increase regression coverage.
# It is not required in most applications.
# get the interactor ui
source $VTK_TCL/vtkInt.tcl
source $VTK_TCL/colors.tcl
vtkRenderer ren1
vtkRenderWindow renWin
renWin AddRenderer ren1
vtkRenderWindowInteractor iren
iren SetRenderWindow renWin
# create a scene with one of each cell type
vtkPoints voxelPoints
voxelPoints SetNumberOfPoints 8
voxelPoints InsertPoint 0 0 0 0
voxelPoints InsertPoint 1 1 0 0
voxelPoints InsertPoint 2 0 1 0
voxelPoints InsertPoint 3 1 1 0
voxelPoints InsertPoint 4 0 0 1
voxelPoints InsertPoint 5 1 0 1
voxelPoints InsertPoint 6 0 1 1
voxelPoints InsertPoint 7 1 1 1
vtkVoxel aVoxel
[aVoxel GetPointIds] SetId 0 0
[aVoxel GetPointIds] SetId 1 1
[aVoxel GetPointIds] SetId 2 2
[aVoxel GetPointIds] SetId 3 3
[aVoxel GetPointIds] SetId 4 4
[aVoxel GetPointIds] SetId 5 5
[aVoxel GetPointIds] SetId 6 6
[aVoxel GetPointIds] SetId 7 7
vtkUnstructuredGrid aVoxelGrid
aVoxelGrid Allocate 1 1
aVoxelGrid InsertNextCell [aVoxel GetCellType] [aVoxel GetPointIds]
aVoxelGrid SetPoints voxelPoints
vtkDataSetMapper aVoxelMapper
aVoxelMapper SetInput aVoxelGrid
vtkActor aVoxelActor
aVoxelActor SetMapper aVoxelMapper
[aVoxelActor GetProperty] BackfaceCullingOn
vtkPoints hexahedronPoints
hexahedronPoints SetNumberOfPoints 8
hexahedronPoints InsertPoint 0 0 0 0
hexahedronPoints InsertPoint 1 1 0 0
hexahedronPoints InsertPoint 2 1 1 0
hexahedronPoints InsertPoint 3 0 1 0
hexahedronPoints InsertPoint 4 0 0 1
hexahedronPoints InsertPoint 5 1 0 1
hexahedronPoints InsertPoint 6 1 1 1
hexahedronPoints InsertPoint 7 0 1 1
vtkHexahedron aHexahedron
[aHexahedron GetPointIds] SetId 0 0
[aHexahedron GetPointIds] SetId 1 1
[aHexahedron GetPointIds] SetId 2 2
[aHexahedron GetPointIds] SetId 3 3
[aHexahedron GetPointIds] SetId 4 4
[aHexahedron GetPointIds] SetId 5 5
[aHexahedron GetPointIds] SetId 6 6
[aHexahedron GetPointIds] SetId 7 7
vtkUnstructuredGrid aHexahedronGrid
aHexahedronGrid Allocate 1 1
aHexahedronGrid InsertNextCell [aHexahedron GetCellType] [aHexahedron GetPointIds]
aHexahedronGrid SetPoints hexahedronPoints
vtkDataSetMapper aHexahedronMapper
aHexahedronMapper SetInput aHexahedronGrid
vtkActor aHexahedronActor
aHexahedronActor SetMapper aHexahedronMapper
aHexahedronActor AddPosition 2 0 0
[aHexahedronActor GetProperty] BackfaceCullingOn
vtkPoints tetraPoints
tetraPoints SetNumberOfPoints 4
tetraPoints InsertPoint 0 0 0 0
tetraPoints InsertPoint 1 1 0 0
tetraPoints InsertPoint 2 .5 1 0
tetraPoints InsertPoint 3 .5 .5 1
vtkTetra aTetra
[aTetra GetPointIds] SetId 0 0
[aTetra GetPointIds] SetId 1 1
[aTetra GetPointIds] SetId 2 2
[aTetra GetPointIds] SetId 3 3
vtkUnstructuredGrid aTetraGrid
aTetraGrid Allocate 1 1
aTetraGrid InsertNextCell [aTetra GetCellType] [aTetra GetPointIds]
aTetraGrid SetPoints tetraPoints
vtkDataSetMapper aTetraMapper
aTetraMapper SetInput aTetraGrid
vtkActor aTetraActor
aTetraActor SetMapper aTetraMapper
aTetraActor AddPosition 4 0 0
[aTetraActor GetProperty] BackfaceCullingOn
vtkPoints wedgePoints
wedgePoints SetNumberOfPoints 6
wedgePoints InsertPoint 0 0 1 0
wedgePoints InsertPoint 1 0 0 0
wedgePoints InsertPoint 2 0 .5 .5
wedgePoints InsertPoint 3 1 1 0
wedgePoints InsertPoint 4 1 0 0
wedgePoints InsertPoint 5 1 .5 .5
vtkWedge aWedge
[aWedge GetPointIds] SetId 0 0
[aWedge GetPointIds] SetId 1 1
[aWedge GetPointIds] SetId 2 2
[aWedge GetPointIds] SetId 3 3
[aWedge GetPointIds] SetId 4 4
[aWedge GetPointIds] SetId 5 5
vtkUnstructuredGrid aWedgeGrid
aWedgeGrid Allocate 1 1
aWedgeGrid InsertNextCell [aWedge GetCellType] [aWedge GetPointIds]
aWedgeGrid SetPoints wedgePoints
vtkDataSetMapper aWedgeMapper
aWedgeMapper SetInput aWedgeGrid
vtkActor aWedgeActor
aWedgeActor SetMapper aWedgeMapper
aWedgeActor AddPosition 6 0 0
[aWedgeActor GetProperty] BackfaceCullingOn
vtkPoints pyramidPoints
pyramidPoints SetNumberOfPoints 5
pyramidPoints InsertPoint 0 0 0 0
pyramidPoints InsertPoint 1 1 0 0
pyramidPoints InsertPoint 2 1 1 0
pyramidPoints InsertPoint 3 0 1 0
pyramidPoints InsertPoint 4 .5 .5 1
vtkPyramid aPyramid
[aPyramid GetPointIds] SetId 0 0
[aPyramid GetPointIds] SetId 1 1
[aPyramid GetPointIds] SetId 2 2
[aPyramid GetPointIds] SetId 3 3
[aPyramid GetPointIds] SetId 4 4
vtkUnstructuredGrid aPyramidGrid
aPyramidGrid Allocate 1 1
aPyramidGrid InsertNextCell [aPyramid GetCellType] [aPyramid GetPointIds]
aPyramidGrid SetPoints pyramidPoints
vtkDataSetMapper aPyramidMapper
aPyramidMapper SetInput aPyramidGrid
vtkActor aPyramidActor
aPyramidActor SetMapper aPyramidMapper
aPyramidActor AddPosition 8 0 0
[aPyramidActor GetProperty] BackfaceCullingOn
vtkPoints pixelPoints
pixelPoints SetNumberOfPoints 4
pixelPoints InsertPoint 0 0 0 0
pixelPoints InsertPoint 1 1 0 0
pixelPoints InsertPoint 2 0 1 0
pixelPoints InsertPoint 3 1 1 0
vtkPixel aPixel
[aPixel GetPointIds] SetId 0 0
[aPixel GetPointIds] SetId 1 1
[aPixel GetPointIds] SetId 2 2
[aPixel GetPointIds] SetId 3 3
vtkUnstructuredGrid aPixelGrid
aPixelGrid Allocate 1 1
aPixelGrid InsertNextCell [aPixel GetCellType] [aPixel GetPointIds]
aPixelGrid SetPoints pixelPoints
vtkDataSetMapper aPixelMapper
aPixelMapper SetInput aPixelGrid
vtkActor aPixelActor
aPixelActor SetMapper aPixelMapper
aPixelActor AddPosition 0 0 2
[aPixelActor GetProperty] BackfaceCullingOn
vtkPoints quadPoints
quadPoints SetNumberOfPoints 4
quadPoints InsertPoint 0 0 0 0
quadPoints InsertPoint 1 1 0 0
quadPoints InsertPoint 2 1 1 0
quadPoints InsertPoint 3 0 1 0
vtkQuad aQuad
[aQuad GetPointIds] SetId 0 0
[aQuad GetPointIds] SetId 1 1
[aQuad GetPointIds] SetId 2 2
[aQuad GetPointIds] SetId 3 3
vtkUnstructuredGrid aQuadGrid
aQuadGrid Allocate 1 1
aQuadGrid InsertNextCell [aQuad GetCellType] [aQuad GetPointIds]
aQuadGrid SetPoints quadPoints
vtkDataSetMapper aQuadMapper
aQuadMapper SetInput aQuadGrid
vtkActor aQuadActor
aQuadActor SetMapper aQuadMapper
aQuadActor AddPosition 2 0 2
[aQuadActor GetProperty] BackfaceCullingOn
vtkPoints trianglePoints
trianglePoints SetNumberOfPoints 3
trianglePoints InsertPoint 0 0 0 0
trianglePoints InsertPoint 1 1 0 0
trianglePoints InsertPoint 2 .5 .5 0
vtkTCoords triangleTCoords
triangleTCoords SetNumberOfTCoords 3
triangleTCoords InsertTCoord 0 1 1 1
triangleTCoords InsertTCoord 1 2 2 2
triangleTCoords InsertTCoord 2 3 3 3
vtkTriangle aTriangle
[aTriangle GetPointIds] SetId 0 0
[aTriangle GetPointIds] SetId 1 1
[aTriangle GetPointIds] SetId 2 2
vtkUnstructuredGrid aTriangleGrid
aTriangleGrid Allocate 1 1
aTriangleGrid InsertNextCell [aTriangle GetCellType] [aTriangle GetPointIds]
aTriangleGrid SetPoints trianglePoints
[aTriangleGrid GetPointData] SetTCoords triangleTCoords
vtkDataSetMapper aTriangleMapper
aTriangleMapper SetInput aTriangleGrid
vtkActor aTriangleActor
aTriangleActor SetMapper aTriangleMapper
aTriangleActor AddPosition 4 0 2
[aTriangleActor GetProperty] BackfaceCullingOn
vtkPoints polygonPoints
polygonPoints SetNumberOfPoints 4
polygonPoints InsertPoint 0 0 0 0
polygonPoints InsertPoint 1 1 0 0
polygonPoints InsertPoint 2 1 1 0
polygonPoints InsertPoint 3 0 1 0
vtkPolygon aPolygon
[aPolygon GetPointIds] SetNumberOfIds 4
[aPolygon GetPointIds] SetId 0 0
[aPolygon GetPointIds] SetId 1 1
[aPolygon GetPointIds] SetId 2 2
[aPolygon GetPointIds] SetId 3 3
vtkUnstructuredGrid aPolygonGrid
aPolygonGrid Allocate 1 1
aPolygonGrid InsertNextCell [aPolygon GetCellType] [aPolygon GetPointIds]
aPolygonGrid SetPoints polygonPoints
vtkDataSetMapper aPolygonMapper
aPolygonMapper SetInput aPolygonGrid
vtkActor aPolygonActor
aPolygonActor SetMapper aPolygonMapper
aPolygonActor AddPosition 6 0 2
[aPolygonActor GetProperty] BackfaceCullingOn
vtkPoints triangleStripPoints
triangleStripPoints SetNumberOfPoints 5
triangleStripPoints InsertPoint 0 0 1 0
triangleStripPoints InsertPoint 1 0 0 0
triangleStripPoints InsertPoint 2 1 1 0
triangleStripPoints InsertPoint 3 1 0 0
triangleStripPoints InsertPoint 4 2 1 0
vtkTCoords triangleStripTCoords
triangleStripTCoords SetNumberOfTCoords 3
triangleStripTCoords InsertTCoord 0 1 1 1
triangleStripTCoords InsertTCoord 1 2 2 2
triangleStripTCoords InsertTCoord 2 3 3 3
triangleStripTCoords InsertTCoord 3 4 4 4
triangleStripTCoords InsertTCoord 4 5 5 5
vtkTriangleStrip aTriangleStrip
[aTriangleStrip GetPointIds] SetNumberOfIds 5
[aTriangleStrip GetPointIds] SetId 0 0
[aTriangleStrip GetPointIds] SetId 1 1
[aTriangleStrip GetPointIds] SetId 2 2
[aTriangleStrip GetPointIds] SetId 3 3
[aTriangleStrip GetPointIds] SetId 4 4
vtkUnstructuredGrid aTriangleStripGrid
aTriangleStripGrid Allocate 1 1
aTriangleStripGrid InsertNextCell [aTriangleStrip GetCellType] [aTriangleStrip GetPointIds]
aTriangleStripGrid SetPoints triangleStripPoints
[aTriangleStripGrid GetPointData] SetTCoords triangleStripTCoords
vtkDataSetMapper aTriangleStripMapper
aTriangleStripMapper SetInput aTriangleStripGrid
vtkActor aTriangleStripActor
aTriangleStripActor SetMapper aTriangleStripMapper
aTriangleStripActor AddPosition 8 0 2
[aTriangleStripActor GetProperty] BackfaceCullingOn
vtkPoints linePoints
linePoints SetNumberOfPoints 2
linePoints InsertPoint 0 0 0 0
linePoints InsertPoint 1 1 1 0
vtkLine aLine
[aLine GetPointIds] SetId 0 0
[aLine GetPointIds] SetId 1 1
vtkUnstructuredGrid aLineGrid
aLineGrid Allocate 1 1
aLineGrid InsertNextCell [aLine GetCellType] [aLine GetPointIds]
aLineGrid SetPoints linePoints
vtkDataSetMapper aLineMapper
aLineMapper SetInput aLineGrid
vtkActor aLineActor
aLineActor SetMapper aLineMapper
aLineActor AddPosition 0 0 4
[aLineActor GetProperty] BackfaceCullingOn
vtkPoints polyLinePoints
polyLinePoints SetNumberOfPoints 3
polyLinePoints InsertPoint 0 0 0 0
polyLinePoints InsertPoint 1 1 1 0
polyLinePoints InsertPoint 2 1 0 0
vtkPolyLine aPolyLine
[aPolyLine GetPointIds] SetNumberOfIds 3
[aPolyLine GetPointIds] SetId 0 0
[aPolyLine GetPointIds] SetId 1 1
[aPolyLine GetPointIds] SetId 2 2
vtkUnstructuredGrid aPolyLineGrid
aPolyLineGrid Allocate 1 1
aPolyLineGrid InsertNextCell [aPolyLine GetCellType] [aPolyLine GetPointIds]
aPolyLineGrid SetPoints polyLinePoints
vtkDataSetMapper aPolyLineMapper
aPolyLineMapper SetInput aPolyLineGrid
vtkActor aPolyLineActor
aPolyLineActor SetMapper aPolyLineMapper
aPolyLineActor AddPosition 2 0 4
[aPolyLineActor GetProperty] BackfaceCullingOn
vtkPoints vertexPoints
vertexPoints SetNumberOfPoints 1
vertexPoints InsertPoint 0 0 0 0
vtkVertex aVertex
[aVertex GetPointIds] SetId 0 0
vtkUnstructuredGrid aVertexGrid
aVertexGrid Allocate 1 1
aVertexGrid InsertNextCell [aVertex GetCellType] [aVertex GetPointIds]
aVertexGrid SetPoints vertexPoints
vtkDataSetMapper aVertexMapper
aVertexMapper SetInput aVertexGrid
vtkActor aVertexActor
aVertexActor SetMapper aVertexMapper
aVertexActor AddPosition 0 0 6
[aVertexActor GetProperty] BackfaceCullingOn
vtkPoints polyVertexPoints
polyVertexPoints SetNumberOfPoints 3
polyVertexPoints InsertPoint 0 0 0 0
polyVertexPoints InsertPoint 1 1 0 0
polyVertexPoints InsertPoint 2 1 1 0
vtkPolyVertex aPolyVertex
[aPolyVertex GetPointIds] SetNumberOfIds 3
[aPolyVertex GetPointIds] SetId 0 0
[aPolyVertex GetPointIds] SetId 1 1
[aPolyVertex GetPointIds] SetId 2 2
vtkUnstructuredGrid aPolyVertexGrid
aPolyVertexGrid Allocate 1 1
aPolyVertexGrid InsertNextCell [aPolyVertex GetCellType] [aPolyVertex GetPointIds]
aPolyVertexGrid SetPoints polyVertexPoints
vtkDataSetMapper aPolyVertexMapper
aPolyVertexMapper SetInput aPolyVertexGrid
vtkActor aPolyVertexActor
aPolyVertexActor SetMapper aPolyVertexMapper
aPolyVertexActor AddPosition 2 0 6
[aPolyVertexActor GetProperty] BackfaceCullingOn
ren1 SetBackground .1 .2 .1
ren1 AddActor aVoxelActor; [aVoxelActor GetProperty] SetDiffuseColor 1 0 0
ren1 AddActor aHexahedronActor; [aHexahedronActor GetProperty] SetDiffuseColor 1 1 0
ren1 AddActor aTetraActor; [aTetraActor GetProperty] SetDiffuseColor 0 1 0
ren1 AddActor aWedgeActor; [aWedgeActor GetProperty] SetDiffuseColor 0 1 1
ren1 AddActor aPyramidActor; [aPyramidActor GetProperty] SetDiffuseColor 1 0 1
ren1 AddActor aPixelActor; [aPixelActor GetProperty] SetDiffuseColor 0 1 1
ren1 AddActor aQuadActor; [aQuadActor GetProperty] SetDiffuseColor 1 0 1
ren1 AddActor aTriangleActor; [aTriangleActor GetProperty] SetDiffuseColor .3 1 .5
ren1 AddActor aPolygonActor; [aPolygonActor GetProperty] SetDiffuseColor 1 .4 .5
ren1 AddActor aTriangleStripActor; [aTriangleStripActor GetProperty] SetDiffuseColor .3 .7 1
ren1 AddActor aLineActor; [aLineActor GetProperty] SetDiffuseColor .2 1 1
ren1 AddActor aPolyLineActor; [aPolyLineActor GetProperty] SetDiffuseColor 1 1 1
ren1 AddActor aVertexActor; [aVertexActor GetProperty] SetDiffuseColor 1 1 1
ren1 AddActor aPolyVertexActor; [aPolyVertexActor GetProperty] SetDiffuseColor 1 1 1
#
# get the cell center of each type and put a glyph there
#
vtkSphereSource ball
ball SetRadius .2
foreach cell "aVoxel aHexahedron aWedge aPyramid aTetra aPixel aQuad aTriangle aPolygon aTriangleStrip aLine aPolyLine aVertex aPolyVertex" {
vtkScalars ${cell}Scalars
set N [${cell}Grid GetNumberOfPoints ]
vtkScalars ${cell}Scalar
${cell}Scalar SetNumberOfScalars $N
${cell}Scalar SetNumberOfComponents 1
for {set i 0} {$i < $N} {incr i 1} {
${cell}Scalar SetScalar $i 0}
${cell}Scalar SetScalar 0 4
[${cell}Grid GetPointData] SetScalars ${cell}Scalar
}
foreach cell "aVoxel aHexahedron aWedge aPyramid aTetra aQuad aTriangle aTriangleStrip aLine aPolyLine aVertex aPolyVertex" {
vtkCellDerivatives ${cell}derivs
${cell}derivs SetInput ${cell}Grid
${cell}derivs SetVectorModeToComputeGradient
set FileName "D:/"
append FileName ${cell}
append FileName ".vtk"
vtkUnstructuredGridWriter ${cell}Writer
${cell}Writer SetInput [${cell}derivs GetOutput]
${cell}Writer SetFileName $FileName
# ${cell}Writer Write
vtkCellCenters ${cell}Centers
${cell}Centers SetInput [${cell}derivs GetOutput]
${cell}Centers VertexCellsOn
vtkHedgeHog ${cell}hog
${cell}hog SetInput [${cell}Centers GetOutput]
vtkPolyDataMapper ${cell}mapHog
${cell}mapHog SetInput [${cell}hog GetOutput]
${cell}mapHog SetScalarModeToUseCellData
${cell}mapHog ScalarVisibilityOff
vtkActor ${cell}hogActor
${cell}hogActor SetMapper ${cell}mapHog
[${cell}hogActor GetProperty] SetColor 0 1 0
vtkGlyph3D ${cell}Glyph3D
${cell}Glyph3D SetInput [${cell}Centers GetOutput]
${cell}Glyph3D SetSource [ball GetOutput]
vtkPolyDataMapper ${cell}CentersMapper
${cell}CentersMapper SetInput [${cell}Glyph3D GetOutput]
vtkActor ${cell}CentersActor
${cell}CentersActor SetMapper ${cell}CentersMapper
eval ${cell}hogActor SetPosition [${cell}Actor GetPosition]
ren1 AddActor ${cell}hogActor
[${cell}hogActor GetProperty] SetRepresentationToWireframe
}
[ren1 GetActiveCamera] Azimuth 30
[ren1 GetActiveCamera] Elevation 20
[ren1 GetActiveCamera] Dolly 1.25
ren1 ResetCameraClippingRange
renWin Render
# render the image
#
iren SetUserMethod {wm deiconify .vtkInteract}
iren Initialize
wm withdraw .
#renWin SetFileName "cellCenters.tcl.ppm"
#renWin SaveImageAsPPM
More information about the vtkusers
mailing list