Extrusion in Estlcam?

A bit of a strange question and completely off topic, but I’ll try it anyway:

I use a modified MPCNC as a plotter (see my earlier posts). The ink pen that I use opens and closes mechanically by the lifting and lowering of the Z-axis. I make the drawings in Photoshop and then Illustrator to vectorize. The final phase of the drawing goes to Estlcam for the gcode.

Now I would like to use thicker paint and for that I made a kind of paste extruder. But for this extruder I actually need an extrusion code that should be generated within the Estlcam gcode. Now I think this is not possible in Estlcam (?)

I understand that it is more obvious to pretend that I am working with a 3D printer, for example with Repetier or Simplify3d. But the problem is that I can’t get my (2D) drawings in there.

Is there perhaps someone with a bright idea or a hint how I could solve this problem?

Thanks in advance.

What file type are your drawings? Could you bring them into Fusion360 and export them as a .stl file to get them into Repetier (or just generate the code in Fusion360)?

Hi Jeff,

Usually svg for use in Estlcam, but Illustrator can export dwg and dxf too. But it takes lots of time to import such a dxf in Fusion360 and thereafter I can’t do anything with it. The drawing consists of many short lines.

The only solution I can think of now is to write an extrusion startcode at the beginning of the gcode and an endcode at the end. But then unfortunately every travel move will leave a paint track.

Thanks for thinking along.

I’ve not checked the gcode output by ESTLCam, but perhaps you can differentiate using G00 (Rapid move) and G01 -03 (cutting moves) then use that for enabling disabling your extruder directly (if you modify the marlin source) or via a postprocessor by automatically adding you specific gcode…

thinking about it some more, wouldn’t the “CNCProgram Settings/Laser Plasma Waterjet” commands in ESTLCAM insert your commands where you want ?

Hi thesfreader,

Unfortunately I am not that handy with coding…
Yes, I found the Laser Plasma Waterjet settings and give it a try, as far as I can.

Thanks a lot

Worst case, you generate the gcode and then insert the extrusion commands you need manually into the code before you run it. Gcode is fairly straight forward, tons of info on google.

Yes, I considered that, but as I said, there are many very short lines in a drawing and it would be too much work.

I tried a small drawing with a start cut (G1 E100) and end cut (G1 E0) setting and you’re right! This is one small line code:

;No. 6: Engraving 1
G00 X38.3117 Y127.2117 Z0.0000 F3600
G01 Z-6.0000 F6000
G1 E100
G02 X23.4608 Y140.7975 I24.7939 J42.0124 F6000
G02 X22.8553 Y142.6494 I2.5350 J1.8538 F6000
G01 X22.8695 Y142.7974 F6000
G01 X22.8953 Y142.9456 F6000
G1 E0
G00 Z0.0000 F1440

Don’t know this is the right code to use for my purpose but it is a promising step 1.

For now, you made my day :slight_smile:


Is that by adding the G1 commands in the Laser/Plasma ? \o/

However, do you just need to start/stop the “inkstruder” at “cutting” start/stop ?

Do you need to modulate the ink speed ?

Depending on what ?

How do you plan translate the code to electric activation ?


This will not work. you need to put an extrusion amount for each line. In this case, when it gets to the third line, it’s going to stay in one place and extrude 100mm (or whatever unit you have). The E0 after that will reverse the extruder 100mm, not shut it off (unless you set it to use relative extrusion.)


  1. Yes, I added the commands in the laser/plasma window;
  2. Yes, I only need start and stop;
  3. No modulation is not needed, I only have to find out the right flowrate once;
  4. Electric activation? Is it not enough to connect the extruder to the Ramps E0?

It was only a test to see the result of the laser/plasma window.

I can’t code myself. I would be very grateful if one of you could help me with this problem - give me the coding for this, if it’s possible anyway.
I know it is unwise to want something that you cannot make yourself. But I was able to adjust the device to my wishes, make a flowpen work and design a paste extruder. The only thing is the right code… But maybe I am too naive and are there many more problems to solve.

Thanks again,

Perhaps OpenSCAD can be used? It’s coding-like and the specific commands you’d be looking for are “import” and “linear_extrude” - something like:
// height is in millimeters
linear_extrude(height = 1, center = true) import(file = “my_extrusion.svg”)

Then select render (or press F6) and export the stl file. You should then be able to set up an equivalent to a 3D printer in your slicer to create the g-code.

i guess the extruder stepper scheduled same way as other axis steppers. so if you just add G1 E commands at the begin and at the end of some scope it doesn’t mean that the scheduler will keep rotating of E in parallel to a few lines of gcode that surrounded by your commands.

even if you somehow connect a motor that could rotate at fixed rpm and you will turn it on/off by your commands that may not help to get best result. because a movement has acceleration\stable speed\deceleration phases. and your fixed-rpm-extruder will not match to real speed of movements and width of extruded fiber will vary.

so you have to add E subcommands to each G1 and lenght of extrusion should be proportional to real lenght of current movement path.

I did something similar many months ago. I was using a different CAD program though. So here is what I suggest:

  • export your DXF file (2 dimensional)
  • import that file into a CAD program like fusion 360 or Onshape.com. (I am more familiar with Onshape so I will pretend that is what you will use.)
  • it will import as a 2D sketch.
  • use the “extrude” feature to make it 3D. Maybe .2 mm thick.
  • then export the 3D file as an STL file for repettier host to slice.
the one thing that I am not sure about is if it will work with thin 2D lines. Each line might need to be “thickened” or something to make them tiny rectangles so they have a surface area to extrude.

When I did mine it was a sign so everything including the words were closed shapes in the DXF file.

So yeah I don’t know if this idea will work for you or not but there it is.

I don’t agree with Guffy : if you have a specific “feedrate” for your tracing and you manager to fix the corresponding speed on your “inkstruder”, that could work, if your inkstruder is not a stepper motor but a DC motor.

In the case where you indeed use a DC motor, you should be able to switch it on/off by piloting a relay through one of the free pins of the board (to be defined). In which case, there are a few GCode “codes” that can be used/interpreted by the firmware (Marlin ?) to activate that pin (hence the questions)

If, however, you planned to use a stepper motor for controlling the extrusion, you would need to include, as Guffy says, a computation of the advancement in each G01-G03 lines of the gcode, which would need some code.

as i said this will work, but probably far from perfect result. because velocity of head movements varying

S-curve Profile and Trapezoidal Profile

S-curve Profile and Trapezoidal Profile

, but extruding feedrate will be fixed. this will produce lines with varying thickness.

may be same feedrate for G0 and G1 could help for make better lead-in and lead-out, but on sharp edges of dxf the machine will slow down and in these areas line can be thicker

the possible way i see is:
for not too complex designs you can use import dxf to fusion 360 with using this trick -
surround the sketch with a rectangle, then extrude body (you have to manually select internal faces),
[attachment file=94835]
[attachment file=94836]
then in manufacturing workspace make laser setup and use “select same plane faces”.
[attachment file=94837]
[attachment file=94838]

and of course you need to be able programming JavaScript :wink:
to make modified post-processor that will add E directives to each onLinear event (and probably have to linearize all onCircle)

First of all, I highly appreciate all your help and suggestions.

I do understand now that the use of a stepper motor is impossible, because of the E-factor needed for every line. (A pity, I just ordered a nice Nema with leadscrew through it in China)

I think in my case that the modulation of the paintflow isn’t an issue because I don’t use acceleration. On this moment I am using a flowpen (see video: https://www.dropbox.com/s/i796kparcvoxq9k/IMG_0844.MOV?dl=0) with Golden acrylic fluid. That’s not ink but thin paint that flows by gravity. This works fine because I have lowered the acceleration. (And besides, this machine is not about speed.)

All the workarounds with Fusion360 etc. does not fit for me. I make drawings (paintings) with lots of (short) lines and not in an orderly way. So importing in Fusion will take much time and Fusion often collapses.

Taking everything into consideration, it seems that a DC motor is a possible solution. But I don’t know if I am able to get it working because of my lack of knowledge of electronics and coding. It would need an activation in the gcode or a mechanical trigger on the Z-axis like the flowpen that I use now.

I have to sleep another night about it if I can handle this challenge ?


And at any time whenever someone will complain that lines aren’t equal you can say him to don’t worry because that’s an art)

So if you ok with that you may use a stepper with an external controller. Something like cheapest cnc shield with arduino nano or uno.

Hell yes :slight_smile:
(btw, this is one of my latest drawings with unequal lines… 1000x650mm)

Going to try this, maybe I surpass myself with electronic skills.

Thanks, I will probably come back here with a little follow-up question.