#!BPY
"""
Name: 'Hyperbolic Paraboloid'
Blender: 245
Group: 'AddMesh'
"""
import BPyAddMesh
import Blender

def add_hyperbolic_paraboloid (xsize, ysize, xres, yres, alpha, beta):
    '''Generate a mesh of a hyperbolic paraboloid'''
    v = []
    f = []

    # Fill the vertices list
    x = - xsize  / 2
    while x <= xsize / 2:
        y = - ysize / 2
        while y <= ysize / 2:
            z = alpha * (x ** 2) - beta * (y ** 2)
            v.append ([x, y, z])
            y += ysize / (yres - 1)
        x += xsize / (xres - 1)

    # Fill the faces list
    for i in range (0, xres - 1):
        x = i * yres
        for j in range (0, yres - 1):
            f.append ([x + j, x + yres + j, x + yres + j + 1, x + j + 1])

    return v, f


def main ():
    xsize = Blender.Draw.Create (2.0)
    ysize = Blender.Draw.Create (2.0)
    xres = Blender.Draw.Create (32)
    yres = Blender.Draw.Create (32)
    alpha = Blender.Draw.Create (1.0)
    beta = Blender.Draw.Create (1.0)

    params = [
                ('xsize:', xsize, 0.0, 10.0,'x size'),
                ('ysize:', ysize, 0.0, 10.0, 'y size'),
                ('xres:', xres, 32, 500,'x resolution'),
                ('yres:', yres, 32, 500, 'y resolution'),
                ('alpha:', alpha, 0.0, 10.0, 'alpha parameter'),
                ('beta:', beta, 0.0, 10.0, 'beta parameter')
             ]


    if not Blender.Draw.PupBlock ('Add Hyperbolic Paraboloid', params):
        return
    
    v, f = add_hyperbolic_paraboloid (xsize.val, ysize.val,
                                      xres.val, yres.val,
                                      alpha.val, beta.val)

    BPyAddMesh.add_mesh_simple ('Hyperbolic Paraboloid', v, [], f)

main ()

