I was trying the same exercise for fun, and I got it done with a Python
Programmable Filter. When you import math, you also get math.pi
Here is how I did it:
1) generate a structured grid with a programmable source and your given bounds
2) remap its coordinates with a programmable filter
Here is the source for both:
1) The Structured Grid
The Script for Information part:
executive = self.GetExecutive()
outInfo = executive.GetOutputInformation(0)
executive.SetExtentTranslator(outInfo, vtk.vtkExtentTranslator())
outInfo.Set(executive.WHOLE_EXTENT(), 0, 29, 0, 19, 0, 9)
The Script part:
executive = self.GetExecutive()
outInfo = executive.GetOutputInformation(0)
updateExtent = [executive.UPDATE_EXTENT().Get(outInfo, i) for i in xrange(6)]
imageData = self.GetOutput()
imageData.SetExtent(updateExtent)
dimensions = imageData.GetDimensions()
pts = vtk.vtkPoints()
for k in range(dimensions[2]):
for j in range(-90, 90, 180/dimensions[1]):
for i in xrange(-180, 180, 360/dimensions[0]):
pts.InsertNextPoint(i,j,k)
output.SetPoints(pts)
2) the programmable filter
import math
pdi = self.GetStructuredGridInput()
pdo = self.GetStructuredGridOutput()
newPoints = vtk.vtkPoints()
numPoints = pdi.GetNumberOfPoints()
for i in range(0, numPoints):
coord = pdi.GetPoint(i)
x, y, z = coord[:3]
Xf=z * cos (x*math.pi/180.0) * cos (y*math.pi/180.0)
Yf=z * sin (x*math.pi/180.0) * cos (y*math.pi/180.0)
Zf=z * sin (y*math.pi/180.0)
newPoints.InsertPoint(i, Xf, Yf, Zf)
pdo.SetPoints(newPoints)
it is actually missing one layer of cells at the meridian. It depends on how
people dump their data. You will be able to adjust the python loop to read data
from your files (not included here for obvious reasons)
The issues I have seen in the past are:
I had one layer of cells missing, so I added a duplicate of the 0-meridian to
close the sphere. I also copied my last layer of data
Vectors (from spherical space) also have to be converted, and you remember it
is a messy formula.
There is no continuity of "flow" across the main meridian. This can usually be
alleviated by removing the duplicate points - making a water-tight surface - on
the shell you are looking at
For all these reasons, I did all of this with C programming to read our data.
Python is fun, but it gets cumbersome. Doing it all in parallel, is an added
challenge. Closing the meridian actually does not involve MPI communications. I
just gave that last layer to one proc.
-----------------
Jean M. Favre
Swiss National Supercomputing Center
_______________________________________________
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
Follow this link to subscribe/unsubscribe:
http://www.paraview.org/mailman/listinfo/paraview