#!/usr/bin/python2.4 # # Visulization model of Chris's MAX-NC mill, as modified to 5-axis # # Copyright 2007 John Kasunich # Derived from a work by John Kasunich, Jeff Epler, and Chris Radek # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA from vismach import * import hal import math import sys # give endpoint Z values and radii # resulting cylinder is on the Z axis class HalToolCylinder(CylinderZ): def __init__(self, comp, *args): CylinderZ.__init__(self, *args) self.comp = comp def coords(self): return (45, self.comp["tool-radius"], -self.comp["tool-length"], self.comp["tool-radius"]) c = hal.component("max5gui") # table c.newpin("table", hal.HAL_FLOAT, hal.HAL_IN) # saddle c.newpin("saddle", hal.HAL_FLOAT, hal.HAL_IN) # head vertical slide c.newpin("head", hal.HAL_FLOAT, hal.HAL_IN) # head tilt c.newpin("tilt", hal.HAL_FLOAT, hal.HAL_IN) # rotary table c.newpin("rotate", 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() pivot_len=100 tool_radius=5 for setting in sys.argv[1:]: exec setting tooltip = Capture() tool = Collection([ HalTranslate([tooltip], c, "tool-length", 0, 0, -1), HalToolCylinder(c), ]) tool = Color([1,0,0,0], [tool] ) spindle = Collection([ tool, # spindle housing CylinderZ( 55, 20, 140, 20), # spindle nose and/or toolholder CylinderZ( 45, 12, 55, 15), ]) # move spindle to position in head spindle = Translate([spindle], 0, 40, 0) head = Collection([ spindle, # front part, holds spindle Box( -25, 10, 60, 25, 125, 135 ), # back part of head Box( -45, 125, 60, 45, 160, 135 ), # plate that carries head Box( -50, 160, 0, 50, 170, 135 ) ]) brotary = Collection([ head, # rotating part of rotary table CylinderY(161, 50, 185, 50), ]) brotary = HalRotate([brotary],c,"tilt",1,0,-1,0) brotary = Color([0,1,0,0], [brotary] ) brotary = Collection([ brotary, # rotary table base - under rotating part Box(-53, 185, -53, 53, 230, 53), # part that mounts motor Box(-73, 170, -53, -53, 230, 85), # motor - 46 x 46 x 60 mm Box( -68, 177, 85, -22, 223, 145) ]) zslide = Collection([ brotary, # this part is simple - not modeling leadscrews, etc Box(-53, 230, -53, 53, 256, 53), ]) # default Z position is with the center of the # slide at 200 mm above benchtop zslide = Translate([zslide], 0, 0,200) zslide = HalTranslate([zslide],c,"head",0,0,1) zslide = Color([1,1,0,0], [zslide] ) column = Collection([ zslide, # main part of slide Box(-50, 256, 15, 50, 275, 315), # ways Box(-40, 250, 15, 40, 256, 315), # motor - 46 x 46 x 60 mm Box(-23, 227, 315, 23, 273, 375) ]) column = Color([0,0,1,0], [column] ) work = Capture() crotary = Collection([ work, CylinderZ(130, 50, 150, 50), # center marker #CylinderZ(150, 3, 170, 1), # can't see a cylinder turn, so stick a lump on one side Box( 40,-5, 131, 54, 5, 149) ]) crotary = HalRotate([crotary],c,"rotate",1,0,0,-1) crotary = Color([1,0,1,0], [crotary] ) crotary = Collection([ crotary, # rotary table base - part under table Box(-53,-53, 100, 53, 53, 130), # part that mounts motor Box( 53,-85, 100, 73, 53, 148), # motor - 46 x 46 x 60 mm Box( 22,-85, 102, 68, -145, 146) ]) # main table - for three axis, put work here instead of rotary table = Collection([ crotary, # body of table # if I was ambitious I'd model the slots # but I'm not Box(-150,-50, 81, 150, 50, 100), # ways - box, not dovetail Box(-150,-40, 75, 150, 40, 81), # motor - 46 x 46 x 60 mm Box(150, -23, 52, 210, 23, 98) ]) table = HalTranslate([table],c,"table",-1,0,0) table = Color([0,1,1,0], [table] ) saddle = Collection([ table, # this part is simple - not modeling leadscrews, etc Box(-53,-53, 44, 53, 53, 81), ]) saddle = HalTranslate([saddle],c,"saddle",0,-1,0) saddle = Color([1,1,0,0], [saddle] ) base = Collection([ saddle, # main part Box(-50, -150, 25, 50, 150, 44), # ways Box(-40,-150, 44, 40, 150, 50), # foot in front Box(-70, -150, 0, 70, -135, 25), # motor - 46 x 46 x 60 mm Box(-23, -150, 27, 23, -210, 73), # aluminum part that mounts column Box(-50, 125, 0, 50, 300, 25), Box(-50, 275, 25, 50, 300, 50), ]) base = Color([0,0,1,0], [base] ) model = Collection([column, base]) main(model, tooltip, work, 500)