#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
$Id$

Copyright 2008 Lode Leroy

This file is part of PyCAM.

PyCAM is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

PyCAM is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with PyCAM.  If not, see <http://www.gnu.org/licenses/>.
"""

import sys
sys.path.insert(0,'.')

from pycam.Geometry import *
from pycam.Cutters.SphericalCutter import *
from pycam.Cutters.CylindricalCutter import *
from pycam.Cutters.ToroidalCutter import *

from pycam.Gui.Visualization import ShowTestScene

from pycam.Importers import STLImporter

from pycam.PathGenerators.PushCutter import PushCutter
from pycam.PathProcessors import *
from pycam.Exporters.SimpleGCodeExporter import SimpleGCodeExporter

if __name__ == "__main__":

    c = SphericalCutter(0.1, Point(0,0,7))
    #c = CylindricalCutter(1, Point(0,0,7))
    #c = ToroidalCutter(1, 0.25, Point(0,0,7))
    print "c=", c

    #model = TestModel()
    #model = STLImporter.ImportModel("Samples/STL/Box0.stl")
    #model = STLImporter.ImportModel("Samples/STL/Box1.stl")
    model = STLImporter.ImportModel("Samples/STL/Box0+1.stl")
    #model = Model()
    #model.append(Triangle(Point(0,0,0),Point(0,5,4),Point(0,-5,4)))
    #model.append(Triangle(Point(2,0,0),Point(2,-5,4),Point(2,5,4)))

    if True:
        lines = 20
        layers = 4
        x0 = -7.0
        x1 = +7.0
        y0 = -7.0
        y1 = +7.0
        z0 = 2.0
        z1 = 4.0
        pc = PushCutter(c, model, SimpleCutter())
        #pc = PushCutter(c, model, ZigZagCutter())
        #pc = PushCutter(c, model, PolygonCutter())

        dx = 0
        if lines>1:
            dy = float(y1-y0)/(lines-1)
        else:
            dy = INFINITE
        if layers>1:
            dz = float(z1-z0)/(layers-1)
        else:
            dz = INFINITE

        pathlist = pc.GenerateToolPath(x0,x1,y0,y1,z0,z1,dx,dy,dz)
        c.moveto(Point(x0,y0,z0))
        ShowTestScene(model, c, pathlist)