from vismach import *
import hal
import math
import sys
tool_length_offset = 4.0
class HalToolCylinder(CylinderZ):
def __init__(self, comp, *args):
CylinderZ.__init__(self, *args)
self.comp = comp
def coords(self):
return (0, self.comp["tool-radius"],
-tool_length_offset-self.comp["tool-length"], self.comp["tool-radius"])
c = hal.component("hbmgui")
c.newpin("table", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("saddle", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("head", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("quill", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("tool-length", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("tool-radius", hal.HAL_FLOAT, hal.HAL_IN)
c.ready()
tool_radius=0.5
for setting in sys.argv[1:]: exec setting
floor = Collection([
Color([0.2,0.2,0.2,0], [Box(-150, -4, -150, 150, 0, 150)])
])
saddle_way_width = 5.0
saddle_way_spacing = 72.0
saddle_way_start = -50
saddle_way_end = 50
saddle_slide_length = 48
column_center_x = 24
column_center_z = 75
column_width = 24
column_depth = 30
column_height = 144
table_thick = 8
table_length = 120
table_width = 60
table_way_width = 5.0
column_way_top_x = column_center_x-0.5*column_width-1.0
head_width = 2*(column_way_top_x-1.0)
head_top = 15
head_bottom = -9
head_depth = 36
quill_length = 48
quill_dia = 6.0
column_head_offset = 4.0
saddleways = Collection([
Box(-1.5*saddle_way_spacing-0.5*saddle_way_width, -1.0, saddle_way_start,
-1.5*saddle_way_spacing+0.5*saddle_way_width, 1.0, saddle_way_end),
Box( 1.5*saddle_way_spacing-0.5*saddle_way_width, -1.0, saddle_way_start,
1.5*saddle_way_spacing+0.5*saddle_way_width, 1.0, saddle_way_end),
Box(-0.5*saddle_way_spacing-0.5*saddle_way_width, 8.0, saddle_way_start,
-0.5*saddle_way_spacing+0.5*saddle_way_width, 10.0, saddle_way_end),
Box( 0.5*saddle_way_spacing-0.5*saddle_way_width, 8.0, saddle_way_start,
0.5*saddle_way_spacing+0.5*saddle_way_width, 10.0, saddle_way_end),
Translate([CylinderZ(saddle_way_start+8, 1.5, saddle_way_end-7, 1.5)], 0, 8, 0)
])
saddleways = Color([0.5,0.5,0.8,0],[saddleways])
base = Collection([
Box(-0.5*saddle_way_spacing-0.4*saddle_way_width, 5.0, saddle_way_start+1,
-0.5*saddle_way_spacing+0.8*saddle_way_width, 9.0, saddle_way_end-1),
Box( 0.5*saddle_way_spacing-0.8*saddle_way_width, 5.0, saddle_way_start+1,
0.5*saddle_way_spacing+0.4*saddle_way_width, 9.0, saddle_way_end-1),
Box(-0.5*saddle_way_spacing-0.5*saddle_way_width, 0.0, saddle_way_start+1,
0.5*saddle_way_spacing+0.5*saddle_way_width, 5.0, saddle_way_end-1),
Box( -3, 5, saddle_way_end-7, 3, 10.5, saddle_way_end-1),
Box( -3, 5, saddle_way_start+8, 3, 11.0, saddle_way_start),
Translate([CylinderZ(saddle_way_start, 3.5, saddle_way_start-18, 3.5)], 0, 8, 0),
Box((column_center_x-column_width*1.25), 0.0, saddle_way_end-1,
(column_center_x+column_width*0.75), 5.0, column_center_z+column_depth*0.75)
])
base = Color([0.5,0.9,0.9,0],[base])
saddle_slides = Collection([
Box(-0.5*saddle_way_spacing-0.8*saddle_way_width, 8.5, -0.5*saddle_slide_length,
-0.5*saddle_way_spacing+0.4*saddle_way_width, 11.5, 0.5*saddle_slide_length),
Box( 0.5*saddle_way_spacing-0.4*saddle_way_width, 8.5, -0.5*saddle_slide_length,
0.5*saddle_way_spacing+0.8*saddle_way_width, 11.5, 0.5*saddle_slide_length),
Box(-1.5*saddle_way_spacing-0.4*saddle_way_width, 1.0, -0.5*saddle_slide_length,
-1.5*saddle_way_spacing+0.4*saddle_way_width, 2.5, 0.5*saddle_slide_length),
Box( 1.5*saddle_way_spacing-0.4*saddle_way_width, 1.0, -0.5*saddle_slide_length,
1.5*saddle_way_spacing+0.4*saddle_way_width, 2.5, 0.5*saddle_slide_length),
Translate([CylinderZ(-0.5*saddle_slide_length+10, 2.2, 0.5*saddle_slide_length-10, 2.2)], 0, 8, 0)
])
saddle_slides = Color([0.7,0.9,0.9,0],[saddle_slides])
saddle = Collection([
Box(-1.5*saddle_way_spacing-0.6*saddle_way_width, 2.5, -0.5*saddle_slide_length+1,
-1.5*saddle_way_spacing+0.6*saddle_way_width, 11.5, 0.5*saddle_slide_length-1),
Box( 1.5*saddle_way_spacing-0.6*saddle_way_width, 2.5, -0.5*saddle_slide_length+1,
1.5*saddle_way_spacing+0.6*saddle_way_width, 11.5, 0.5*saddle_slide_length-1),
Box(-1.5*saddle_way_spacing-0.6*saddle_way_width, 11.5, -0.5*saddle_slide_length+0.5,
1.5*saddle_way_spacing+0.6*saddle_way_width, 15.0, 0.5*saddle_slide_length-0.5),
Box(-1.5*saddle_way_spacing-0.6*saddle_way_width, 15.0, -0.5*saddle_slide_length+0.5,
1.5*saddle_way_spacing+0.6*saddle_way_width, 19.0, -0.5*saddle_slide_length+5.5),
Box(-1.5*saddle_way_spacing-0.6*saddle_way_width, 15.0, 0.5*saddle_slide_length-0.5,
1.5*saddle_way_spacing+0.6*saddle_way_width, 19.0, 0.5*saddle_slide_length-5.5),
Box(-5, 5.5, -0.5*saddle_slide_length+11, 5, 11.5, 0.5*saddle_slide_length-11),
Box(-1.5*saddle_way_spacing+20, 15.0, -3,
-1.5*saddle_way_spacing+16, 20.5, 3),
Box( 1.5*saddle_way_spacing-5, 15.0, -3,
1.5*saddle_way_spacing+5, 20.5, 3),
Translate([CylinderX(1.5*saddle_way_spacing+5, 3.5, 1.5*saddle_way_spacing+25, 3.5)], 0, 18, 0),
])
saddle = Color([0.5,0.9,0.9,0],[saddle])
table_ways = Collection([
Box(-1.5*saddle_way_spacing-0.7*saddle_way_width, 18.0, -0.5*saddle_slide_length,
1.5*saddle_way_spacing+0.7*saddle_way_width, 20.0, -0.5*saddle_slide_length+table_way_width),
Box(-1.5*saddle_way_spacing-0.7*saddle_way_width, 18.0, 0.5*saddle_slide_length,
1.5*saddle_way_spacing+0.7*saddle_way_width, 20.0, 0.5*saddle_slide_length-table_way_width),
Translate([CylinderX(-1.5*saddle_way_spacing+20, 1.5, 1.5*saddle_way_spacing+10, 1.5)], 0, 18, 0)
])
table_ways = Color([0.5,0.5,0.8,0],[table_ways])
table_slides = Collection([
Box(-0.5*table_length, -table_thick+1.0, -0.5*saddle_slide_length-0.3*table_way_width,
0.5*table_length, -table_thick-1.5, -0.5*saddle_slide_length+0.9*table_way_width),
Box(-0.5*table_length, -table_thick+1.0, 0.5*saddle_slide_length+0.3*table_way_width,
0.5*table_length, -table_thick-1.5, 0.5*saddle_slide_length-0.9*table_way_width),
Translate([CylinderX(-0.5*table_length+20, 2.2, 0.5*table_length-15, 2.2)], 0, -table_thick-2, 0)
])
table_slides = Color([0.7,0.9,0.9,0],[table_slides])
w12 = table_width/12
table_top = []
for s in range(-4, 5, 2):
table_top = table_top + [
Box(-0.5*table_length, -2, (s-1)*w12+1.0,
0.5*table_length, -1, (s+1)*w12-1.0),
Box(-0.5*table_length, -1, (s-1)*w12+0.5,
0.5*table_length, 0, (s+1)*w12-0.5)]
s = -6
table_top = table_top + [
Box(-0.5*table_length, -2, s*w12,
0.5*table_length, -1, (s+1)*w12-1.0),
Box(-0.5*table_length, -1, s*w12,
0.5*table_length, 0, (s+1)*w12-0.5)]
s = 6
table_top = table_top + [
Box(-0.5*table_length, -2, (s-1)*w12+1.0,
0.5*table_length, -1, s*w12),
Box(-0.5*table_length, -1, (s-1)*w12+0.5,
0.5*table_length, 0, s*w12)]
table = Collection(table_top +[
Box(-0.5*table_length, -2, -0.5*table_width,
0.5*table_length, -table_thick+1.0, 0.5*table_width),
Box(-0.5*table_length+21, -table_thick-4.7, -5, 0.5*table_length-16, -table_thick+1.0, 5),
])
table = Color([0.5,0.9,0.9,0],[table])
column = Collection([
Box(column_way_top_x+4.5, 5.0, column_center_z-0.5*column_depth,
column_center_x+0.5*column_width, column_height, column_center_z+0.5*column_depth),
Box(column_way_top_x+4.5, 5.0, column_center_z-0.5*column_depth,
column_way_top_x+1.0, column_height, column_center_z-0.5*column_depth+5.0),
Box(column_way_top_x+4.5, 5.0, column_center_z+0.5*column_depth,
column_way_top_x+1.0, column_height, column_center_z+0.5*column_depth-5.0),
Box(column_way_top_x+1.5-2.5, column_height-5.0, column_center_z-3.0,
column_way_top_x+1.5+3.0, column_height+1.0, column_center_z+3.0),
Translate([CylinderY(column_height+1.0, 3.5, column_height+19.0, 3.5)], column_way_top_x+1.5, 0, column_center_z),
])
column = Color([0.5,0.9,0.9,0],[column])
column_ways = Collection([
Box(column_way_top_x+2.0, 6.0, column_center_z-0.5*column_depth-1.0,
column_way_top_x+0.0, column_height+0.5, column_center_z-0.5*column_depth+4.0),
Box(column_way_top_x+2.0, 6.0, column_center_z+0.5*column_depth+1.0,
column_way_top_x+0.0, column_height+0.5, column_center_z+0.5*column_depth-4.0),
Translate([CylinderY(5.0, 1.5, column_height-4.0, 1.5)], column_way_top_x+1.5, 0, column_center_z)
])
column_ways = Color([0.5,0.5,0.8,0],[column_ways])
work = Capture()
tooltip = Capture()
tool = Collection([
Translate([HalTranslate([tooltip], c, "tool-length", 0, 0, -1)], 0, 0, -tool_length_offset),
HalToolCylinder(c)
])
tool = Color([0.8,0.6,0.9,0], [tool] )
quill = Collection([
tool,
CylinderZ(0.0, 0.5*quill_dia, quill_length, 0.5*quill_dia)
])
quill = Color([0.8,0.1,0.1,0],[quill])
head = Collection([
Box(-0.5*head_width, head_top, 2,
0.5*head_width, head_bottom, head_depth+2),
Box(0.5*head_width, head_top-6.0, column_head_offset+0.5*column_depth-3.0,
column_way_top_x+1.5+2.5, head_bottom+6.0, column_head_offset+0.5*column_depth+3.0),
CylinderZ(1, 6, quill_length*1.5, 6)
])
head = Color([0.5,0.9,0.9,0],[head])
head_slides = Collection([
Box(column_way_top_x+1.5, head_top+1.0, -2.5+column_head_offset,
0.5*head_width, head_bottom-1.0, 3.5+column_head_offset),
Box(column_way_top_x+1.5, head_top+1.0, column_depth+2.5+column_head_offset,
0.5*head_width, head_bottom-1.0, column_depth-3.5+column_head_offset),
Translate([CylinderY(head_top-5.5, 2.2, head_bottom+5.5, 2.2)], column_way_top_x+1.5, 0, column_head_offset+0.5*column_depth)
])
head_slides = Color([0.7,0.9,0.9,0],[head_slides])
kins_quill = Collection([
quill
])
kins_head = Collection([
head,
head_slides,
HalTranslate([kins_quill],c,"quill",0,0,1)
])
kins_work = Collection([
work
])
kins_table = Collection([
table_slides,
table,
kins_work,
])
kins_saddle = Collection([
saddle,
saddle_slides,
table_ways,
Translate([HalTranslate([kins_table],c,"table",-1,0,0)], 0, table_thick+20, 0)
])
kins_base = Collection([
floor,
base,
column,
column_ways,
saddleways,
Translate([HalTranslate([kins_head],c,"head",0,1,0)],0,20+table_thick,column_center_z-0.5*column_depth-column_head_offset),
Translate([HalTranslate([kins_saddle],c,"saddle",0,0,-1)],0,0,0)
])
model = Collection([kins_base])
x_axis = Collection([
CylinderX(0, 3, 30, 3),
CylinderX(30,6, 40, 0),
Box(27, -6, -6, 30, 6, 6)
])
x_axis = Color([1,0,0,0],[x_axis])
y_axis = Collection([
CylinderY(0, 3, 30, 3),
CylinderY(30,6, 40, 0),
Box(-6, 27, -6, 6, 30, 6)
])
y_axis = Color([0,1,0,0],[y_axis])
z_axis = Collection([
CylinderZ(0, 3, 30, 3),
CylinderZ(30,6, 40, 0),
Box(-6, -6, 27, 6, 6, 30)
])
z_axis = Color([0,0,1,0],[z_axis])
axes = Collection([
Box(-5, -5, -5, 5, 5, 5),
x_axis,
y_axis,
z_axis,
tooltip,work
])
model = Rotate([model],90,1,0,0)
main(model, tooltip, work, 200, lat=-60, lon=60)