simu - is the program for generation and simulation gcode (track) files for CNC
simu - is the public domain
currently implemented only 4-axis milling (rotate model around X axis)
simulator simulates all four axes, but generator uses only three: X, Z and Angle
in the world exists a lot of opensource XYZ generators but XZA is the rare,
so i implement it first for my CNC
i hope it will easy to implement classic XYZ miling (basreliefs), can you?
requirements:
SDL2
build:
just run build.sh
executable file is ./simu
if you want to build it for windows (i have not tried)
you need to compile and link all *.cpp files in current folder
and link libSDL2
run:
./simu <file-to-simulate.tap|.> [<model.stl|.> [output-generated-file.tap|.]]
in other words first argument is always filename of input gcode for simulation,
if you does not need this just set the dot as first arg
second argument is always input model in binary STL format,
you may set the dot to do not load model
third argument is always filename for output gcode,
you may set the dot too
you cannot generate something without a model
you cannot generate something if you use simulaton arg
examples:
simulate already generated gcode:
./simu file.tap
simulate already generated gcode and show the target model:
./simu file.tap model.stl
just show the model:
./simu . model.stl
in this mode you can move the tool by W, S, A, D keys
to check how collision detection works
generate gcode from model:
./simu . model.stl newfile.tap
in all modes use the left mouse button to rotate camera,
right button to zoom and middle button to translate
options:
- looks easy but where the other options - cutter shape, strateg, layers etc?
- in the code
first look function main() in main.cpp
this line sets the simulatior options:
SimulatorXYZA simulator_xyza(400, 360);
- simulatior is XYZA with resolution along X axis is 400 samples,
angular resolution is 360 samples per round
see: simulator.h, simulator.cpp
these lines configure a tool:
//FlatTool tool(1.5);
ConeTool tool(1.25, 10, 0.75);
- base radius, height of cone part, small radius at the end of cone (can be zero)
see: tool.h, tool.cpp
direction of the tool for testing:
Vector3 dir(1, 3, -3);
- when you pass only model as argument (./simu . model.stl)
you can move the tool manually (by WSAD) and see how collision detector works
this line determines direction (angle) of the tool
look down in parsing third arg there is lines to configure generator:
GeneratorRowsZAX generator;
//generator.step_z = 1.5;
generator.step_z = 0;
//generator.step_a = 2*tool.radius*0.5;
generator.step_a = 0.5*1.5;
generator.step_x = 0.5;
//generator.skip_middle_layers = true;
generator.feed_speed = 150;
generator supports layered milling (output/example-tux-p1.tap)
step_z, mm - determines a maximum height of layer (zero for no layers, output/example-tux-p3.tap)
step_a, mm - step along rotation in millimeters! generator will calculate degrees
combination of step_z and skip_middle_layers helps to optimize final processing
model splits to several layers (layer heigth is near to step_z) and for each layer determines an angular step
for points near to axis of rotation angular step is bigger than for that points far from axis
(output/example-tux-p2.tap)
- see: generator.h, generator.cpp
also look constructor Scene::Scene() in scene.cpp
here you can set:
time_forward, seconds - draw path to the future for some seconds while path animation
time_backward, seconds - draw path to the past for some seconds while path animation
time_speed, positive float - amplifier of animation speed (10 - is 10x time speed)
move_tool, bool - move or do not move the tool while animation
rotate_model, bool - rotate or do not rotate the model while animation
example files:
models:
input/example-pyramid.stl - simple shapes
input/example-triangle.stl - single triangle
input/example-tux-small.stl - Tux model
gcode:
output/example-tux-p1.tap - preprocessing of tux-small.stl for FlatTool(1.5)
output/example-tux-p2.tap - optimized final processing of tux-small.stl for ConeTool(1.25, 10, 0.75)
output/example-tux-p3.tap - final processing of tux-small.stl for ConeTool(1.25, 10, 0.75)