﻿declare module THREE {
    interface MeshBasicMaterialOptions {
        color: number;
        opacity?: number;
        transparent?: boolean;
    }
    interface WebGLRendererOptions {
        antialias: boolean;
    }
    interface Rotation {
        x:number;
        y:number;
    }
    interface Position {
        z: number;
        x: number;
    }
    interface Scale {
        x: number;
        y:number;
    }
    interface Material {
        opacity:number;
    }
    export class Group {
        add(mesh: Mesh): void;
        rotation: Rotation;
        position: Position;
    }

    export class PerspectiveCamera
    {
        constructor(fov: number, aspect: number, near: number, far: number);
        position:Position;
    }

    export class Scene {
        add(group:Group):void;
    }
    export class Vector3
    {
        constructor(x:number, y:number, z:number);
    }

    export class TubeGeometry
    {
        constructor(path:any, segments:number, radius:number, radialSegments:number, closed:boolean, taper? :any);
    }

    export class PlaneGeometry {
        constructor(width:number, height:number, widthSegments:number, heightSegments?:any);
    }

    export class RingGeometry {
        constructor(innerRadius: number, outerRadius: number, thetaSegments: number, phiSegments?: any, thetaStart?: any, thetaLength?: any);
    }

    export class MeshBasicMaterial {
        constructor(options: MeshBasicMaterialOptions);
    }

    export class Mesh {
        constructor(geometry: TubeGeometry, material: MeshBasicMaterial);
        rotation: Rotation;
        position: Position;
        material: Material;
        scale: Scale;
    }

   
    export class WebGLRenderer {
        constructor(options: WebGLRendererOptions);
        setPixelRatio(ratio:number):void;
        setSize(width: any, height: any): void;
        setClearColor(color: string): void;
        domElement: HTMLElement;
        render(scene:Scene, camera:PerspectiveCamera):void;
    }

    export module Curve {
        interface CurveConstructor {
            new(): any;
        }
       
        export interface CurveStatic {
            (constructor: () => void, getPointFunc: (percent: number) => void):CurveConstructor;
        }

        export var create: CurveStatic;
    }
   
}
