I have been battling gCode's fairly complex scheme for turning arcs and cirxcles. This bash script produces gCode to cut a circle centered in a biounding box specified byn the first four values, starting at z cutting circles at specified step size at the specified feed rate for a hole of specified size and mill diamete. There are a lot of intermediate steps there m ostly for debugging but likely useful for understanding the process.
#!/bin/bash
# Cut an interior circle starting at xStartBB yStartBB xEndBB yEndBB zStart zStep zEnd feedRate holeDiameter endMillDiameter
# BB is short for BoundingBox
if [ "$#" -eq 0 ];
then echo "$0 xBB yBB xEndBB yEndBB zStart stepZ endZ feedRate holeDiameter endMillDiameter"
else
xStartBB=$1
yStartBB=$2
xEndBB=$3
yEndBB=$4
startZ=$5
stepZ=$6
endZ=$7
feedRate=$8
holeDiameter=$9
endMillDiameter=${10}
millRadius=`echo "$endMillDiameter/2"|bc -l`
# Calculate starting cut points
echo $xEndBB $xStartBB $holeDiameter
center=`echo "(($xEndBB-$xStartBB)/2)"|bc -l`
offset=`echo "((($xEndBB-$xStartBB)-($holeDiameter))/2)"|bc -l`
startXCut=`echo "$xStartBB+$offset+$millRadius"|bc -l`
startYCut=`echo "($yEndBB-$yStartBB)/2"|bc -l`
endYCut=$startYCut
endXCut=`echo "$yEndBB - $offset - $millRadius"|bc -l`
# calculate radius for i
i=`echo "($center-$startXCut)"|bc -l`
cat prolog.nc >rotate.nc
echo "g1 z1.0 f$feedRate" >>rotate.nc
echo "g1 x$startXCut y$startYCut f$feedRate" >>rotate.nc
echo "g1 z$startZ y$startYCut f$feedRate" >>rotate.nc
newstartZ=`echo "$startZ+$stepZ"|bc -l`
for curZ in `seq $newstartZ $stepZ $endZ`
do
echo "g1 z$curZ f$feedRate" >>rotate.nc
echo "g2 x$endXCut y$endYCut i$i j0 f$feedRate" >>rotate.nc
echo "x$startXCut y$startYCut j0 i-$i" >>rotate.nc
done
echo "g1 z1.0 f$feedRate" >>rotate.nc
cat epilog.nc >>rotate.nc
fi
The two external files are prolog.nc
%
g17 g20 g54
and epilog.nc
m2
%
No comments:
Post a Comment