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

Reply via email to