from paraview.util.vtkAlgorithm import *
import vtk

@smproxy.source(name="coneTest", label="coneTest")
class coneTest(VTKPythonAlgorithmBase):
    def __init__(self):
        VTKPythonAlgorithmBase.__init__(self,
                nInputPorts=0,
                nOutputPorts=1,
                outputType='vtkPolyData')

        self._height = None
        self._radius = None
        self._resolution = None

    def RequestInformation(self, request, inInfo, outInfo):
        print('inside RequestInformation')
        self._resolution = 10
        self._height = self._radius*2
        return 1

    def RequestData(self, request, inInfo, outInfo):
        from vtkmodules.vtkCommonDataModel import vtkPolyData
        print('inside RequestData')
        cone = vtk.vtkConeSource()
        cone.SetHeight( self._height )
        cone.SetRadius( self._radius )
        cone.SetResolution( self._resolution )
        cone.Update()
        output = vtkPolyData.GetData(outInfo, 0)
        output.ShallowCopy(cone.GetOutput())
        return 1

    @smproperty.doublevector(name="Radius", default_values=[1.0])
    @smdomain.doublerange(min=1., max=10.)
    def SetRadius(self, val):
        print('inside SetRadius: radius = ',val)
        self._radius = val
        self.Modified()

    @smproperty.doublevector(name="Height", information_only="1")
    def GetHeight(self):
        print('inside GetHeight: height = ',self._height)
        return self._height

