I was feeling like making something fun, and this looked like it.
I stole the original code from EMC's wiki but then modified it slightly to run on fanuc controls, and added roughing passes. I only had a stub ball mill, so the roughing lets you specify a max cutter engagement depth for each pass. There are lots more ways to clean it up an add more features.
I made the mistake of trying to cut the 6th side while just grabbing the sides of the ball :/ It is cut free at least, just not a full sphere.Code:% O0070 (BALL IN CUBE) (CENTER TOP OF CUBE IS XYZ ZERO) #1=1.5 (SIZE OF BOX AND DIAMETER OF FINISHED BALL) #2=0.0625 (BALL MILL CUTTER RADIUS) #3=0.125 (SIZE OF BOX BARS) #4=5.0 (DEGREES OF STEPOVER RESOLUSION AT THE CORNERS) #5=#4 (STEPOVER COUNTER) #6=[[#1/2]+#2] (ACTUAL CUTTER PATH RADIUS OF SPHERE -- CUTTER RADIUS + RADIUS) (#6 ALSO MINIMUM TOOL FLUTES REQUIRED FOR FULL SPHERE) #7=5.0 (FEED RATE) #10=2.0 ( > 1 EQUALS A ROUGH PASS AT #10*#4 STEPOVER) IF [#10 LT 1.0] THEN #10=1.0 (SAFTEY CHECK - KEEP #10 >= 1.0) #11=0.05 (ROUGH PASS MATERIAL TO LEAVE IN Z) #12=0.17 (MAX Z DEPTH PER ROUGH PASS) #13=FUP[[#6-#11]/#12] (ROUGH PASSES TO TAKE) #14=[#6-#11]/#13 (Z PER ROUGH PASS) #15=#11+#14*#13 (SET ROUGHPASS Z OFFSET) G90 G57 G0 X0 Y0 M3 S4000 (G43 Z1.0 H1) Z0.1 N0010 IF [#10 LE 1.0] THEN #15=0 (FINISH Z LEVEL) #8 = [[SIN[#5*#10]*#6]*SIN[45]] ( X AND Y ARC START POSISION) #9 = [0-[[1-COS[#5*#10]]*#6]]+#15 (ARC Z START HIGHT) IF [#8 LT [#1/2-#2-#3]] GOTO 20 #8 = [#1/2-#2-#3] (SET LAST PASS AT FINISHED BAR SIZE) #9 = 0-[#6 - SQRT[#6*#6 - [#8*#8+#8*#8]]]+#15 N0020 IF [#9 GT 0] GOTO 15 (WOULD ONLY CUT AIR, STILL ABOVE Z0) G1X[#8]Y[#8] F#7 Z[#9] F[#7/3] G18 G02 X[0-#8]Z[#9]I[0-#8]K[0-[#9+[#6]]] F[#7] G19 G03 Y[0-#8]Z[#9]J[0-#8]K[0-[#9+[#6]]] G18 G03 X[#8]Z[#9]I[#8]K[0-[#9+[#6]]] G19 G02 Y[#8]Z[#9]J[#8]K[0-[#9+[#6]]] N0015 #5=[#5+#4] IF [#8 LT [#1/2-#2-#3]] GOTO 10 #5=#4 (RESET STEPOVER COUNTER FOR NEXT ROUGH-FINISH PASS) G0 Z0.1 X0 Y0 IF [#10 LE 1.0] GOTO 9000 (DONE) #13=#13-1.0 (STEP DOWN Z RIOUGHING PASS) IF [#13 LT 0] GOTO 100 (ROUGHING DONE) #15=#11+#14*#13 (STARTING ROUGHPASS Z OFFSET) GOTO 10 N0100 #10=1.0 GOTO 10 N9000 G0 Z1.0 M9 M5 M30 %