#!/usr/bin/env python3
#    Copyright 2009 Alex Joni
#
#    This program 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 2 of the License, or
#    (at your option) any later version.
#
#    This program 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 this program; if not, write to the Free Software
#    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

from vismach import *
import hal

c = hal.component("vmcgui")
c.newpin("X", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("Y", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("Z", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("arm", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("carousel", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("spindle", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("drawbar", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("lock", hal.HAL_FLOAT, hal.HAL_IN)
c.ready()


floor = Collection([Box(-50,-50,-3,50,50,0)])
floor = Color([0,1,0,0],[floor])

work = Capture()

#tool goes here.. maybe later
tool = Capture()

# "tooltip" for backplot will be the tip of the tool, for now head
tooltip = Capture()
tool = Collection([tooltip, tool])

#Drive dogs
dogs = Collection([Box(-6,-3,94,6,3,100)])
dogs = Color([1,1,1,1],[dogs])
dogs = HalRotate([dogs],c,"spindle",360,0,0,1)
dogs = Translate([dogs],-1,49,0)

#Drawbar
draw = CylinderZ(120,3,125,3)
draw = Color([1,0,.5,1],[draw])
draw = Translate([draw],-1,49,0)
draw = HalTranslate([draw],c,"drawbar",0,0,1)

# head/spindle
head = AsciiSTL(filename="./head.stl")
head = Color([0.3,0.3,0.3,1],[head])
head = Translate([head],0,0,4)
head = Collection([head, tool, dogs, draw])
head = HalTranslate([head],c,"Z",0,0,0.1)

# base
base = AsciiSTL(filename="./base.stl")
base = Color([0.5,0.5,0.5,1],[base]) 
# mount head on it
base = Collection([head, base])

# table
table = AsciiSTL(filename="./table.stl")
table = Color([0.8,0.8,0.8,1],[table])
table = Translate([table],0,8,0)
table = HalTranslate([table],c,"X",0.1,0,0)

# saddle
saddle = AsciiSTL(filename="./saddle.stl")
saddle = Color([0.2,0.8,0.8,1],[saddle])
saddle = Translate([saddle],0,7,0)
saddle = Collection([table, saddle])
saddle = HalTranslate([saddle],c,"Y",0,0.1,0)

#Lock Pin
lock = Box(20,42,85,18,48,90)
lock = Color([1,1,0,1],[lock])
lock = HalTranslate([lock],c,"lock",0,1,0)

# carousel
carousel = AsciiSTL(filename="./carousel.stl")
carousel = Color([0.6,0.2,0,1],[carousel])
#move the model to the origin
carousel = Translate([carousel],-19.689,-43.93,0)
carousel = HalRotate([carousel],c,"carousel",36,0,0,1)
#move it back
carousel = Translate([carousel],19.689,43.93,0)

# carousel arm
arm = AsciiSTL(filename="./arm.stl")
arm = Color([1,0,1,.2],[arm])
arm = Collection([arm, carousel, lock])
arm = HalRotate([arm],c,"arm",1,0,0,1)

vmc = Collection([base, saddle, arm])
model = Collection([tooltip, vmc, floor, work])
main(model, tooltip, work, 150, lat=-75, lon=215)
