import sys
from vtk import vtkRenderer, vtkRenderWindow, vtkGenericOpenGLRenderWindow, \
                vtkImplicitPlaneWidget2, vtkImplicitPlaneRepresentation, \
                QVTKWidget, QVTKWidget2
                
from PyQt4.QtGui import *
from PyQt4.QtCore import QTimer

initAtPos = int(sys.argv[1])


class TestQVTKWidget2(QVTKWidget2):
    def __init__(self):
        QVTKWidget2.__init__(self)
        
    def init(self):
        self.win = vtkGenericOpenGLRenderWindow()
        self.ren = vtkRenderer()
        
        self.win.AddRenderer(self.ren)
        self.SetRenderWindow(self.win)

        self.makeScene()
        self.ren.ResetCamera()     
        
    def makeScene(self):
        p = vtkImplicitPlaneRepresentation()
        p.SetPlaceFactor(1.0)
        p.SetOrigin(0.25,0.25,0.25)
        p.PlaceWidget([0,1,0,2,0,3])
        p.SetNormal(1,0,0)
        p.OutlineTranslationOff()

        pw = vtkImplicitPlaneWidget2()
        pw.SetRepresentation(p)

        pw.SetInteractor(self.GetInteractor())
        pw.On()
        
        self.p = p
        self.pw = pw
        
app = QApplication(sys.argv)     
qvtkTest = TestQVTKWidget2()

if initAtPos == 0:
    print "Direct Call at", initAtPos
    qvtkTest.init()
    
m = QMainWindow()
if initAtPos == 1:
    print "Direct Call at", initAtPos
    qvtkTest.init()
l = QVBoxLayout()
if initAtPos == 2:
    print "Direct Call at", initAtPos
    qvtkTest.init()
l.addWidget(qvtkTest)
if initAtPos == 3:
    print "Direct Call at", initAtPos
    qvtkTest.init()
l.addWidget(QPushButton('test'))
if initAtPos == 4:
    print "Direct Call at", initAtPos
    qvtkTest.init()
w = QWidget()
if initAtPos == 5:
    print "Direct Call at", initAtPos
    qvtkTest.init()
    
# This is the crucial bit. Initalizing before does not work (plane is opaque)
# initAtPose > 5 gives expected transparency
w.setLayout(l)

if initAtPos == 6:
    print "Direct Call at", initAtPos
    qvtkTest.init()
m.setCentralWidget(w)
if initAtPos == 7:
    print "Direct Call at", initAtPos
    qvtkTest.init()
m.show()
if initAtPos == 8:
    print "Direct Call at", initAtPos
    qvtkTest.init()

m.setGeometry(50,50,600,600)
app.exec_()    
            
        




