[vtkusers] Python vtkSphere Subclass

Ryan Irvin ryan.irvin at gmail.com
Sun Dec 9 15:59:16 EST 2012


David,

Thanks for the clarification and the suggestion regarding
vtkProgrammableSource.  I'll look into that option.

-Ryan


On Sun, Dec 9, 2012 at 1:25 PM, David Gobbi <david.gobbi at gmail.com> wrote:

> Hi Ryan,
>
> This won't work, because your EvaluateFunction() and EvalutateGradient()
> methods will never get called.  Overriding virtual methods through python
> doesn't work in the VTK wrappers.  Maybe it will work at some point in
> the future.
>
> For sources and filters, people use vtkProgrammableSource and
> vtkProgrammableFilter to do what you are trying to do.  You could use
> these as an example and write a vtkProgrammableImplicitFunction
> (in C++) that you could then use as a "hook" to write implicit functions
> in python.
>
>  - David
>
> On Sun, Dec 9, 2012 at 12:05 PM, Ryan Irvin <ryan.irvin at gmail.com> wrote:
> > I'm trying to create a custom implicit surface function to represent a
> conic
> > asphere and my approach was to try and subclass vtkSphere.  I had
> previously
> > tried to subclass vtkImplicitFunction without success and saw some posts
> > about not being able to subclass abstract classes in Python (I don't
> know if
> > this is still true).
> >
> > The subclass I've put together is shown below, where the attribute
> surf_obj
> > is a python class representing the conic asphere and contains methods for
> > evaluating the surface function and gradient.
> >
> > When I run my full script, the result is that the default vtkSphere is
> > always rendered.  It's pretty apparent that I'm not understanding the
> proper
> > approach to this problem and/or am not properly subclassing vtkSphere.
> >
> > I will be happy to provide the full *.py file which contains all of the
> code
> > but wasn't sure of the protocol and have not provided it with this post.
> >
> > If anyone has any suggestions about the correct way to approach this
> problem
> > or can provide some advice for properly subclassing, I would very much
> > appreciate it.
> >
> > -Ryan
> >
> >
> > class VtkImplicitConic( vtk.vtkSphere ):
> >
> >     def __init__( self, con_surf ):
> >         self.surf_obj = con_surf
> >         self.SetRadius( self.surf_obj.GetRadius() )
> >
> >
> >     def EvaluateFunction( self, x, y, z ):
> >         return self.surf_obj.EvaluateFunction( x, y, z )
> >
> >
> >     def EvaluateGradient( self, x, n ):
> >         n[0],n[1],n[2] = self.surf_obj.EvaluateGradient( x[0], x[1],
> x[2] )
> >
> >
> >     def GetRadius( self ):
> >         return self.surf_obj.GetRadius()
> >
> >
> >     def SetRadius( self, radius ):
> >         self.surf_obj.SetRadius( radius )
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20121209/9ccc5452/attachment.htm>


More information about the vtkusers mailing list