QuadraticSurface
VTKExamples/Python/Visualization/QuadraticSurface
Description
- Converted from c++ by Jim McCusker
Code
QuadraticSurface.py
#!/usr/bin/python
from vtk import *
def Sphere():
# create the quadric function definition
quadric = vtkQuadric()
quadric.SetCoefficients(1,1,1,0,0,0,0,0,0,0)
# F(x,y,z) = a0*x^2 + a1*y^2 + a2*z^2 + a3*x*y + a4*y*z + a5*x*z + a6*x + a7*y + a8*z + a9
# F(x,y,z) = 1*x^2 + 1*y^2 + 1*z^2
PlotFunction(quadric, 1.0)
def EllipticParaboloid():
# create the quadric function definition
quadric = vtkQuadric()
quadric.SetCoefficients(1,1,0,0,0,0,0,0,-1,0)
# F(x,y,z) = a0*x^2 + a1*y^2 + a2*z^2 + a3*x*y + a4*y*z + a5*x*z + a6*x + a7*y + a8*z + a9
# F(x,y,z) = 1*x^2 + 1*y^2
PlotFunction(quadric, 0.0)
def HyperbolicParaboloid():
# create the quadric function definition
quadric = vtkQuadric()
quadric.SetCoefficients(1,-1,0,0,0,0,0,0,0,0)
# F(x,y,z) = a0*x^2 + a1*y^2 + a2*z^2 + a3*x*y + a4*y*z + a5*x*z + a6*x + a7*y + a8*z + a9
# F(x,y,z) = 1*x^2 - 1*y^2
PlotFunction(quadric, 1.0)
def Cylinder():
# create the quadric function definition
quadric = vtkQuadric()
quadric.SetCoefficients(1,1,0,0,0,0,0,0,0,0)
# F(x,y,z) = a0*x^2 + a1*y^2 + a2*z^2 + a3*x*y + a4*y*z + a5*x*z + a6*x + a7*y + a8*z + a9
# F(x,y,z) = 1*x^2 + 1*y^2
PlotFunction(quadric, 1.0)
def HyperboloidOneSheet():
# create the quadric function definition
quadric = vtkQuadric()
quadric.SetCoefficients(1,1,-1,0,0,0,0,0,0,0)
# F(x,y,z) = a0*x^2 + a1*y^2 + a2*z^2 + a3*x*y + a4*y*z + a5*x*z + a6*x + a7*y + a8*z + a9
# F(x,y,z) = 1*x^2 + 1*y^2
PlotFunction(quadric, 1.0)
def HyperboloidTwoSheets():
# create the quadric function definition
quadric = vtkQuadric()
quadric.SetCoefficients(1,1,-1,0,0,0,0,0,0,0)
# F(x,y,z) = a0*x^2 + a1*y^2 + a2*z^2 + a3*x*y + a4*y*z + a5*x*z + a6*x + a7*y + a8*z + a9
# F(x,y,z) = 1*x^2 + 1*y^2
PlotFunction(quadric, -1.0)
def Ellipsoid():
# create the quadric function definition
quadric = vtkQuadric()
quadric.SetCoefficients(1,1,2,0,0,0,0,0,0,0)
# F(x,y,z) = a0*x^2 + a1*y^2 + a2*z^2 + a3*x*y + a4*y*z + a5*x*z + a6*x + a7*y + a8*z + a9
# F(x,y,z) = 1*x^2 + 1*y^2 + 1*z^2
PlotFunction(quadric, 1.0)
def Cone():
# create the quadric function definition
quadric = vtkQuadric()
quadric.SetCoefficients(1,1,-1,0,0,0,0,0,0,0)
# F(x,y,z) = a0*x^2 + a1*y^2 + a2*z^2 + a3*x*y + a4*y*z + a5*x*z + a6*x + a7*y + a8*z + a9
# F(x,y,z) = 1*x^2 + 1*y^2 - 1*z^2
PlotFunction(quadric, 0.0)
def Other():
# create the quadric function definition
quadric = vtkQuadric()
quadric.SetCoefficients(.5,1,.2,0,.1,0,0,.2,0,0)
# F(x,y,z) = a0*x^2 + a1*y^2 + a2*z^2 + a3*x*y + a4*y*z + a5*x*z + a6*x + a7*y + a8*z + a9
# F(x,y,z) = 0.5*x^2 + 1*y^2 + 0.2*z^2 + 0*x*y + 0.1*y*z + 0*x*z + 0*x + 0.2*y + 0*z + 0
PlotFunction(quadric, 1.0)
def PlotFunction(quadric, value):
# sample the quadric function
sample = vtkSampleFunction()
sample.SetSampleDimensions(50,50,50)
sample.SetImplicitFunction(quadric)
#double xmin = 0, xmax=1, ymin=0, ymax=1, zmin=0, zmax=1
xmin = -10
xmax=11
ymin=-10
ymax=10
zmin=-10
zmax=10
sample.SetModelBounds(xmin, xmax, ymin, ymax, zmin, zmax)
#create the 0 isosurface
contours = vtkContourFilter()
contours.SetInput(sample.GetOutput())
contours.GenerateValues(1, value, value)
# map the contours to graphical primitives
contourMapper = vtkPolyDataMapper()
contourMapper.SetInput(contours.GetOutput())
contourMapper.SetScalarRange(0.0, 1.2)
# create an actor for the contours
contourActor = vtkActor()
contourActor.SetMapper(contourMapper)
# -- create a box around the function to indicate the sampling volume --
# create outline
outline = vtkOutlineFilter()
outline.SetInput(sample.GetOutput())
# map it to graphics primitives
outlineMapper = vtkPolyDataMapper()
outlineMapper.SetInput(outline.GetOutput())
# create an actor for it
outlineActor = vtkActor()
outlineActor.SetMapper(outlineMapper)
outlineActor.GetProperty().SetColor(0,0,0)
# setup the window
ren1 = vtkRenderer()
renWin = vtkRenderWindow()
renWin.AddRenderer(ren1)
iren = vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
# add the actors to the scene
ren1.AddActor(contourActor)
ren1.AddActor(outlineActor)
ren1.SetBackground(1,1,1) # Background color white
# render and interact
renWin.Render()
iren.Start()
Other()
Sphere()
Cone()
Ellipsoid()
Cylinder()
HyperboloidOneSheet()
HyperboloidTwoSheets()
HyperbolicParaboloid()
EllipticParaboloid()