import nc units = 1.0 class Redirector(nc.Creator): def __init__(self, original): nc.Creator.__init__(self) self.original = original self.x = None self.y = None self.z = None if original.x != None: self.x = original.x * units if original.y != None: self.y = original.y * units if original.z != None: self.z = original.z * units self.imperial = False def cut_path(self): pass ############################################################################ # Programs def write(self, s): self.original.write(s) def output_fixture(self): self.original.output_fixture() def increment_fixture(self): self.original.increment_fixture() def get_fixture(self): return self.original.get_fixture() def set_fixture(self, fixture): self.original.set_fixture(fixture) def program_begin(self, id, name=""): self.cut_path() self.original.program_begin(id, name) def program_stop(self, optional=False): self.cut_path() self.original.program_stop(optional) def program_end(self): self.cut_path() self.original.program_end() def flush_nc(self): self.cut_path() self.original.flush_nc() ############################################################################ # Subprograms def sub_begin(self, id, name=None): self.cut_path() self.original.sub_begin(id, name) def sub_call(self, id): self.cut_path() self.original.sub_call(id) def sub_end(self): self.cut_path() self.original.sub_end() def disable_output(self): self.original.disable_output() def enable_output(self): self.original.enable_output() ############################################################################ # Settings def imperial(self): self.cut_path() self.imperial = True self.original.imperial() def metric(self): self.cut_path() self.original.metric() def absolute(self): self.cut_path() self.original.absolute() def incremental(self): self.cut_path() self.original.incremental() def polar(self, on=True): self.cut_path() self.original.polar(on) def set_plane(self, plane): self.cut_path() self.original.set_plane(plane) def set_temporary_origin(self, x=None, y=None, z=None, a=None, b=None, c=None): self.cut_path() self.original.set_temporary_origin(x, y, z, a, b, c) def remove_temporary_origin(self): self.cut_path() self.original.remove_temporary_origin() ############################################################################ # Tools def tool_change(self, id): self.cut_path() self.original.tool_change(id) def tool_defn(self, id, name="", params=None): self.cut_path() self.original.tool_defn(id, name, params) def offset_radius(self, id, radius=None): self.cut_path() self.original.offset_radius(id, radius) def offset_length(self, id, length=None): self.cut_path() self.original.offset_length(id, length) ############################################################################ # Datums def datum_shift(self, x=None, y=None, z=None, a=None, b=None, c=None): self.cut_path() self.original.datum_shift(x, y, z, a, b, c) def datum_set(self, x=None, y=None, z=None, a=None, b=None, c=None): self.cut_path() self.original.datum_set(x, y, z, a, b, c) def workplane(self, id): self.cut_path() self.original.workplane(id) ############################################################################ ## Rates + Modes def feedrate(self, f): self.cut_path() self.original.feedrate(f) def feedrate_hv(self, fh, fv): self.cut_path() self.original.feedrate_hv(fh, fv) def spindle(self, s, clockwise=True): self.cut_path() self.original.spindle(s, clockwise) def coolant(self, mode=0): self.cut_path() self.original.coolant(mode) def gearrange(self, gear=0): self.cut_path() self.original.gearrange(gear) ############################################################################ # Moves def rapid(self, x=None, y=None, z=None, a=None, b=None, c=None): self.cut_path() self.original.rapid(x, y, z, a, b, c) if x != None: self.x = x * units if y != None: self.y = y * units if z != None: self.z = z * units def cut_path(self): pass def z2(self, z): return z def feed(self, x=None, y=None, z=None, a=None, b=None, c=None): px = self.x py = self.y pz = self.z if x != None: self.x = x * units if y != None: self.y = y * units if z != None: self.z = z * units if self.x == None or self.y == None or self.z == None: self.cut_path() self.original.feed(x, y, z) return if px == self.x and py == self.y: # z move only self.cut_path() self.original.feed(self.x / units, self.y / units, self.z2(self.z) / units) return def arc(self, x=None, y=None, z=None, i=None, j=None, k=None, r=None, ccw=True): if self.x == None or self.y == None or self.z == None: raise "first attached move can't be an arc" px = self.x py = self.y pz = self.z if x != None: self.x = x * units if y != None: self.y = y * units if z != None: self.z = z * units def arc_cw(self, x=None, y=None, z=None, i=None, j=None, k=None, r=None): self.arc(x, y, z, i, j, k, r, False) def arc_ccw(self, x=None, y=None, z=None, i=None, j=None, k=None, r=None): self.arc(x, y, z, i, j, k, r, True) def dwell(self, t): self.cut_path() self.original.dwell(t) def rapid_home(self, x=None, y=None, z=None, a=None, b=None, c=None): self.cut_path() self.original.rapid_home(x, y, z, a, b, c) def rapid_unhome(self): self.cut_path() self.original.rapid_unhome() ############################################################################ # Cutter radius compensation def use_CRC(self): return self.original.use_CRC() def start_CRC(self, left=True, radius=0.0): self.cut_path() self.original.start_CRC(left, radius) def end_CRC(self): self.cut_path() self.original.end_CRC() ############################################################################ # Cycles def pattern(self): self.cut_path() self.original.pattern() def pattern_uses_subroutine(self): return self.original.pattern_uses_subroutine() def pocket(self): self.cut_path() self.original.pocket() def profile(self): self.cut_path() self.original.profile() def circular_pocket( self, x=None, y=None, ToolDiameter=None, HoleDiameter=None, ClearanceHeight=None, StartHeight=None, MaterialTop=None, FeedRate=None, SpindleRPM=None, HoleDepth=None, DepthOfCut=None, StepOver=None, ): self.cut_path() self.circular_pocket( x, y, ToolDiameter, HoleDiameter, ClearanceHeight, StartHeight, MaterialTop, FeedRate, SpindleRPM, HoleDepth, DepthOfCut, StepOver, ) def drill( self, x=None, y=None, dwell=None, depthparams=None, retract_mode=None, spindle_mode=None, internal_coolant_on=None, rapid_to_clearance=None, ): self.cut_path() self.original.drill( x, y, dwell, depthparams, spindle_mode, internal_coolant_on, rapid_to_clearance ) # argument list adapted for compatibility with Tapping module # wild guess - I'm unsure about the purpose of this file and wether this works -haberlerm def tap( self, x=None, y=None, z=None, zretract=None, depth=None, standoff=None, dwell_bottom=None, pitch=None, stoppos=None, spin_in=None, spin_out=None, tap_mode=None, direction=None, ): self.cut_path() self.original.tap( x, y, self.z2(z), self.z2(zretract), depth, standoff, dwell_bottom, pitch, stoppos, spin_in, spin_out, tap_mode, direction, ) def bore( self, x=None, y=None, z=None, zretract=None, depth=None, standoff=None, dwell_bottom=None, feed_in=None, feed_out=None, stoppos=None, shift_back=None, shift_right=None, backbore=False, stop=False, ): self.cut_path() self.original.bore( x, y, self.z2(z), self.z2(zretract), depth, standoff, dwell_Bottom, feed_in, feed_out, stoppos, shift_back, shift_right, backbore, stop, ) def end_canned_cycle(self): self.original.end_canned_cycle() ############################################################################ # Misc def comment(self, text): self.cut_path() self.original.comment(text) def variable(self, id): self.cut_path() self.original.variable(id) def variable_set(self, id, value): self.cut_path() self.original.variable_set(id, value) def set_ocl_cutter(self, cutter): self.original.set_ocl_cutter(cutter)