Dorian
it is a frequent error to forget to set the RequestInformationScript of the
ProgrammableFilter.
I have quickly hacked your code to make it work and give it here as an example
to be polished further.
try to load the following python script.
-----------------
Jean/CSCS
from paraview.simple import *
#### disable automatic camera reset on 'Show'
paraview.simple._DisableFirstRenderCameraReset()
# Create a new 'Render View'
viewID = GetRenderView()
sphere1 = Sphere()
sphere1.Radius = 5.0
sphere1.ThetaResolution = 32
sphere1.PhiResolution = 32
sphere1.UpdatePipeline()
RequestData = """
import math
from vtk import vtkImageData, vtkPolyDataToImageStencil, vtkImageStencil, VTK_UNSIGNED_CHAR, vtkMetaImageWriter
import numpy as np
from vtk.util import numpy_support
executive = self.GetExecutive()
outInfo = executive.GetOutputInformation(0)
exts = [executive.UPDATE_EXTENT().Get(outInfo, i) for i in range(6)]
output.SetExtent(exts)
dims = [exts[1]-exts[0]+1, exts[3]-exts[2]+1, exts[5]-exts[4]+1]
POLY_input= self.GetInputDataObject(0,0)
inputBounds= POLY_input.GetBounds()
whiteImage=vtkImageData()
whiteImage.SetSpacing(self.imageSpacing)
whiteImage.SetDimensions(dims)
whiteImage.SetOrigin(min(inputBounds[0:2])- self.imageSpacing[0],
min(inputBounds[2:4])- self.imageSpacing[1],
min(inputBounds[4:])- self.imageSpacing[2])
whiteImage.AllocateScalars(VTK_UNSIGNED_CHAR, 1)
for i in range(0, whiteImage.GetNumberOfPoints()):
whiteImage.GetPointData().GetScalars().SetTuple1(i, 255)
poly2stencil = vtkPolyDataToImageStencil()
poly2stencil.SetInputData(POLY_input)
poly2stencil.SetOutputOrigin(whiteImage.GetOrigin())
poly2stencil.SetOutputSpacing(whiteImage.GetSpacing())
poly2stencil.SetOutputWholeExtent(whiteImage.GetExtent())
poly2stencil.Update()
imageStencil= vtkImageStencil()
imageStencil.SetInputData(whiteImage)
imageStencil.SetStencilConnection(poly2stencil.GetOutputPort())
imageStencil.ReverseStencilOff()
imageStencil.SetBackgroundValue(0)
imageStencil.Update()
output.ShallowCopy(imageStencil.GetOutput())
"""
RequestInfo = """
executive = self.GetExecutive ()
outInfo = executive.GetOutputInformation(0)
dims = [102,102, 102]
self.imageSpacing=(0.1, 0.1, 0.1)
outInfo.Set(executive.WHOLE_EXTENT(), 0, dims[0]-1 , 0, dims[1]-1 , 0, dims[2]-1)
outInfo.Set(vtk.vtkDataObject.SPACING(), self.imageSpacing[0], self.imageSpacing[1], self.imageSpacing[2])
"""
programmableFilter = ProgrammableFilter(Input=sphere1)
programmableFilter.OutputDataSetType = 'vtkImageData'
programmableFilter.Script = RequestData
programmableFilter.RequestInformationScript = RequestInfo
programmableFilter.UpdatePipelineInformation()
# get color transfer function/color map for 'ImageScalars'
imageScalarsLUT = GetColorTransferFunction('ImageScalars')
imageScalarsLUT.RGBPoints = [0.0, 0.231373, 0.298039, 0.752941, 127.5, 0.865003,
0.865003, 0.865003, 255.0, 0.705882, 0.0156863, 0.14902]
imageScalarsLUT.ScalarRangeInitialized = 1.0
# get opacity transfer function/opacity map for 'ImageScalars'
imageScalarsPWF = GetOpacityTransferFunction('ImageScalars')
imageScalarsPWF.Points = [0.0, 0.0, 0.5, 0.0, 255.0, 1.0, 0.5, 0.0]
imageScalarsPWF.ScalarRangeInitialized = 1
rep0 = Show(programmableFilter, viewID)
rep0.Representation = 'Surface'
rep0.ColorArrayName = ['POINTS', 'ImageScalars']
rep0.LookupTable = imageScalarsLUT
rep0.ScalarOpacityFunction = imageScalarsPWF
Render()
viewID.ResetCamera()
Render()
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the ParaView Wiki at:
http://paraview.org/Wiki/ParaView
Search the list archives at: http://markmail.org/search/?q=ParaView
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/paraview