How to set qtdragon to re-face my spoilboard

  • Revinvoss
  • Revinvoss's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
16 Aug 2025 00:16 #333487 by Revinvoss
For the life of me, I can not find ANY useful info on how to re-face my spoilboard. Sure, I would have to buy hundreds of dollars to get a program to do what Qtdragon should be able to do with out that. I have FreeCAD but, I also seems to not have the means to do this. Is there any one here that knows how to make a G-code operated machine simply go back and forth at a set high across a set dimension?
As you guys will have questions, I will be glade to answer to get this spoilboard faced. before I burn it to the ground.

Please Log in or Create an account to join the conversation.

  • tommylight
  • tommylight's Avatar
  • Away
  • Moderator
  • Moderator
More
16 Aug 2025 00:32 #333488 by tommylight
Replied by tommylight on topic How to set qtdragon to re-face my spoilboard
I might not be the "best" to answer this, but since i see you're head first into self destruction, leme help :) :
-QtDragon does not care about your spoil board, nor does FreeCAD
-... i am out ... :)
Back on topic, i can not recall what i used some 15 or more years back for that exact purpose, but i am sure it was free and Open Source, but:
forum.linuxcnc.org/20-g-code/42707-g-code-generators
wiki.linuxcnc.org/cgi-bin/wiki.pl?Simple...NC_G-Code_Generators
And most probably this will do just fine
github.com/LinuxCNC/simple-gcode-generators/tree/master/face
and the bunch here
github.com/LinuxCNC/simple-gcode-generators?tab=readme-ov-file

Please Log in or Create an account to join the conversation.

More
16 Aug 2025 01:37 #333492 by rodw
qtdragon has a facing option built in. Why not use that?
The following user(s) said Thank You: tommylight

Please Log in or Create an account to join the conversation.

  • tommylight
  • tommylight's Avatar
  • Away
  • Moderator
  • Moderator
More
16 Aug 2025 02:09 #333494 by tommylight
Replied by tommylight on topic How to set qtdragon to re-face my spoilboard

qtdragon has a facing option built in. Why not use that?

I was not aware of that, thank you.
The following user(s) said Thank You: rodw

Please Log in or Create an account to join the conversation.

More
16 Aug 2025 11:50 #333507 by unknown
Replied by unknown on topic How to set qtdragon to re-face my spoilboard
Would be simple enough to hand code.
FreeCAD has built in CAM.

Please Log in or Create an account to join the conversation.

  • pippin88
  • Away
  • Elite Member
  • Elite Member
More
17 Aug 2025 00:10 #333530 by pippin88
Replied by pippin88 on topic How to set qtdragon to re-face my spoilboard
Worth learning a bit of gcode.

Subroutines and parameters are quite powerful

Example code to get you started. I have not checked this on a machine / linuxcnc simulator. Probably has errors.
( Zig-Zag Spoilboard Facing Program with Parameters and Subroutine )
( Fully commented for beginners - for use with LinuxCNC )
( Units are millimeters - use G21 for mm or G20 for inches )

G21                ( Set units to millimeters - use G20 for inches )
G17                ( Use XY plane for machining )
G90                ( Use absolute positioning mode )
G64                ( Best path blending mode for smoother motion )

( --- USER-DEFINED PARAMETERS --- )
#100 = 12.0         ( Tool diameter - useful for planning )
#101 = 10.0         ( Step-over between each row in Y direction )
#102 = 1.0          ( Total depth to cut into the spoilboard )
#103 = 0.5          ( Depth per pass - amount to cut per layer )
#104 = 600.0        ( Width of the area to face in X direction )
#105 = 300.0        ( Height of the area to face in Y direction )
#106 = 1000         ( Spindle speed in RPM )
#107 = 500          ( Feedrate in units per minute for cutting moves )
#108 = 5.0          ( Safe Z height above material to avoid collisions )

( --- INTERNAL / TEMPORARY VARIABLES --- )
#110 = 0.0          ( Current Z depth, starts at zero on surface )
#111 = 0            ( Row counter for Y passes )
#115 = 0            ( Direction toggle for zig-zag: zero means forward pass, one means reverse pass )

( --- DERIVED VALUES FROM PARAMETERS --- )
#112 = [#104 / #101]   ( Calculate how many rows fit across X based on step-over )
#113 = [#102 / #103]   ( Calculate how many depth passes needed to reach total depth )

( --- PROGRAM START --- )

G0 Z#108            ( Move Z to safe height before starting )
M3 S#106            ( Turn spindle on clockwise at RPM from parameter )
G4 P2               ( Wait for 2 seconds to let spindle reach speed )

G0 Z#108            ( Confirm safe Z before any XY moves )
G0 X0 Y0            ( Move to starting XY origin at safe Z )

( --- Z-DEPTH PASS LOOP --- )
#114 = 0            ( Initialize Z pass counter )

o100 while [#114 LT #113]      ( Repeat passes until total depth reached )

    G0 Z#108            ( Retract to safe Z before repositioning )
    G0 X0 Y0            ( Return to XY origin at safe Z )

    #110 = [#110 - #103]       ( Lower cutting depth by depth per pass )

    o110 if [#110 LT -#102]    ( If cutting deeper than total depth )
        #110 = -#102           ( Clamp cutting depth to max depth )
    o110 endif

    G1 Z#110 F#107             ( Feed down to current cutting depth )

    #111 = 0                   ( Reset Y row counter for this depth pass )
    #115 = 0                   ( Reset zig-zag direction toggle to forward )

    ( --- Y ROW LOOP --- )
    o200 while [#111 LT #112]  ( Loop through all rows across Y direction )

        o<zigzag_row> call     ( Call subroutine to cut one row, direction depends on toggle )

        #111 = [#111 + 1]      ( Increment Y row counter )
        #115 = [1 - #115]      ( Toggle direction: 0 becomes 1, 1 becomes 0 )

    o200 endwhile             ( End Y row loop )

    G1 Z#108 F#107             ( Retract to safe Z before next depth pass )

    #114 = [#114 + 1]          ( Increment Z pass counter )

o100 endwhile                 ( End Z pass loop )

( --- PROGRAM END --- )

M5                    ( Stop spindle )
G0 Z#108              ( Move to safe Z )
G0 X0 Y0              ( Return to origin )
M2                    ( End of program )

( --- SUBROUTINE: ZIGZAG ROW --- )

o<zigzag_row> sub

( Cuts one row in X direction, then steps over in Y )
( Uses toggle #115 to choose direction )

o<zigzag_row_dir0> if [#115 EQ 0]   ( Forward pass )
    G90                             ( Use absolute positioning )
    G1 X[#104] F#107                ( Move forward in X to max distance )
    G91                             ( Switch to relative positioning )
    G1 Y[#101] F#107                ( Step over in Y by step-over distance )
    G90                             ( Return to absolute positioning )
o<zigzag_row_dir0> endif

o<zigzag_row_dir1> if [#115 EQ 1]   ( Reverse pass )
    G90                             ( Absolute positioning )
    G1 X0 F#107                    ( Move X back to zero )
    G91                             ( Relative positioning )
    G1 Y[#101] F#107                ( Step over in Y )
    G90                             ( Absolute positioning )
o<zigzag_row_dir1> endif

o<zigzag_row> endsub
The following user(s) said Thank You: tommylight

Please Log in or Create an account to join the conversation.

Moderators: cmorley
Time to create page: 0.064 seconds
Powered by Kunena Forum