4

I'd like to extend vtkActor with my own stuff in Python. I cannot find the way to call the base class __init__, it looks there is no __init__. Maybe the vtk/Python wrapping does not allow such a user specialization, the super fails saying vtkActor is not a type... hmmm...

how can I do something like :

class MyVtkActor(vtk.vtkActor):
  def __init__(self,*args):
    vtk.vtkActor.__init__(self,*args)
    # my stuff here

?

4

1 に答える 1

3

VTK クラスの Python ラッパーは多少異なります。この ipython-session を見てください:

In [1]: import vtk

In [2]: type(vtk.vtkActor)
Out[2]: <type 'vtkclass'>

In [3]: type(vtk.vtkActor())
Out[3]: vtkobject

基本的に、vtkActor から継承することはできますが、Python で使用されるオブジェクトの初期化に依存することはできません。self最初の引数として、このスーパークラスの「通常の」メソッドを明示的に呼び出すことができます。

コンストラクターへの呼び出し (C の意味で) が行うように、すべてのプロパティを手動で設定する必要があります。

注意: オブジェクトの構築は初期化の前に実行されるため、vtkActor から継承する場合は、通常の vtkActor コンストラクターが呼び出されます。だから定義することによって

class MyActor(vtk.vtkActor):
    pass

vtkobject も取得します。

In [8]: type(MyActor())
Out[9]: vtkobject

実際のサンプルが必要な場合は、このクラスを参照してください。これは私のPyLocatorプログラムの一部です。各マーカー (スクリーンショットの青/緑のボール) はそのようなオブジェクトです。

于 2013-01-23T08:54:50.083 に答える