#!/bin/perl my $sim = 0; my @pathArr; my $path = \@pathArr; my $pi = atan2( 1, 1 ) * 4; my $piOver180 = $pi / 180; if ( $sim ) { open( GCODE, ">Hex-Sim.nc" ); } else { open( GCODE, ">Hex.nc" ); } my $linearFeed = 6; my $angularFeed = 1000; print GCODE < 0 )) { $rotPath = RotatePath( $path, $angle ); } else { $rotPath = $path; } $z = 0; for ( $z = -0.016; $z >= -0.1601; $z -= 0.016 ) { printf( GCODE "G1 Z%6.3f F$linearFeed\n", $z ); PrintPointListAsGcode( $rotPath ); } } printf( GCODE "\n(Circlular recess )\n\n" ); for ( $z = -0.180; $z >= -0.2101; $z -= 0.015 ) { printf( GCODE "G0 Z%6.3f\n", $z ); printf( GCODE "G1 X0.146 Y0 F$linearFeed\n" ); if ( $sim ) { printf( GCODE "G2 X0.146 Y0 I-0.145 Y0\n" ); } else { printf( GCODE "G92 A0\n" ); printf( GCODE "G1 A-360 F$angularFeed\n" ); } printf( GCODE "G0 X0 Y0\n" ); } printf( GCODE "G0 Z1\n" ); printf( GCODE "M30\n" ); close( GCODE ); ############################################################################# # # AddPoint( x, y, list ) # # Adds the point represented by (x, y) to the end of the point list. sub AddPoint { my ( $x, $y, $list ) = @_; push( @{ $list }, [ $x, $y ] ); } ############################################################################# # # PrintPointList( $list ) # # Prints the points found on a list. sub PrintPointList { my ( $list ) = @_; foreach $pt ( @{$list} ) { printf( "%6.3f, %6.3f\n", $pt->[ 0 ], $pt->[ 1 ] ); } } ############################################################################# # # PrintPointListAsGCode( $list ) # # Prints the points found on a list as a series of G-Code instructions sub PrintPointListAsGcode { my ( $list ) = @_; my $firstPt = 1; foreach $pt ( @{ $list }) { if ( $firstPt ) { $firstPt = 0; printf( GCODE "G0 " ); } else { printf( GCODE "G1 " ); } printf( GCODE "X%6.3f Y%6.3f\n", $pt->[ 0 ], $pt->[ 1 ] ); } } ############################################################################# # # RotatePath( $path, $angle ) # # Rotates the points in $path by angle degrees about the origin. sub RotatePath { my ( $path, $angle ) = @_; my $radAngle = $angle * $piOver180; my $cosAngle = cos( $radAngle ); my $sinAngle = sin( $radAngle ); my @rotPath = (); foreach $pt ( @{$path} ) { my $x = $pt->[ 0 ]; my $y = $pt->[ 1 ]; my $newX = ( $cosAngle * $x ) - ( $sinAngle * $y ); my $newY = ( $sinAngle * $x ) + ( $cosAngle * $y ); push( @rotPath, [ $newX, $newY ]); } return \@rotPath; }