Supports Engraving and V-Carving
Uses CXF and TTF fonts
Imports DXF and Bitmap images


Related Links


F-Engrave is a text to g-code program that is written in python and is based on the text engraving software (engrave-11) available in the LinuxCNCKnowledgeBase. The name F-Engrave is simply the predecessor programs name "engrave" with an "F" slapped on to indicate that the program can perform more formating functions like justification (left, right and center) and text on a circle. When I first released the program I had no idea I was going to add v-carving or DXF features so the name does not reflect any of those features. F-Engrave is a free open source program released under the GNU General Public License (GPL) Version 3. There is not much left of the original engrave-11 script but I needed a jumping off point. One of the things that remained intact for the most part is the CXF font reading. (although I tweaked it to accept a second variation of the CXF font format.)

F-Engrave Features

- V-carve for outline fonts and images (images and fonts should be composed of closed section loops when v-carving)
- Imports DXF files
- Imports PBM images (with potrace helper program)
- Uses TTF font files (with the help of ttf2cxf_stream, not all formats are supported)
- Capable of exporting Scalable Vector Graphics (SVG) file
- Opens previously saved G-Code file and retrieve the settings and text
- Supports multiple lines of text with justification (Left, Right and Centered)
- Mirroring text (vertical) and flipping text (horizontal)
- Create text that follows an arc
- Origin selection allows user to select the location of g-code zero position
- Display line thickness to be used during engraving allows visualization of end result
- Use inches or mm as export units
- Customizable G-Code preamble and postamble
- Usable as an LinuxCNC Axis filter program (open the f-engrave.py file from within LinuxCNC Axis File-Open-f-engrave.py. when you are finished with your text select File-Write To Axis and Exit, This option only existed when executed from within Axis)

Changes in Version 1.37

- Added logic to ignore very small line segments that caused problems v-carving some graphic input files.

Changes in Version 1.38

- Changed default origin to the DXF input file origin when height is set by percentage of DXF image size.

Changes in Version 1.39

- Fixed bug in v-carving routine resulting in failed v-carve calculation. (Bug introduced in Version 1.37)

Changes in Version 1.40

- Added code to increased v-carving speed (based on input from geo01005. See the VIDEO comparison)
- Windows executable file now generated from Python 2.5 with Psyco support (significant speed increase)
- Changed Default Origin behavior(for DXF/Image files) to be the origin of the DXF file or lower left corner of the input image.
- Added automatic scaling of all linear dimensions values when changing between units (in/mm)
- Fixed bug in clean up function in the v-carve menu. (the bug resulted in excessive Z motions in some cases)
- Fixed bug resulting in the last step of v-carving for any given loop to be skipped/incorrect.

Changes in Version 1.41

- Adjusted global Zero value (previous value resulted in bad tool paths resulting from rounding errors during v-carving for nearly parallel lines)
- Removed use of accuracy (Acc) in the v-carve circle calculation

Changes in Version 1.42

- Changed default setting in General Settings to disable variables. (This is intended to help new Shapoko users get past GRBL limitations.)

Changes in Version 1.43

- Fixed a bug that prevented clean up in some areas after the v-carve clean up calculation.

Changes in Version 1.44

- Fixed really bad bug in v-carve cleanup for bitmap images introduced in V1.43

Changes in Version 1.45

- Added multipass cutting for v-carving

Settings for multipass cutting are in the V-Carve Settings:
-Finish Pass Stock is the amount of material that will be removed on the last pass
-Max Depth per Pass is the maximum depth of material that can be removed in one cut.
- Removed "Inside Corner Angle" and "Outside Corner Angle" options from v-carve settings

Changes in Version 1.46

- Fixed bug that resulted in multipass cutting all of the time for v-carving

Changes in Version 1.47

- Added ability to read more types of DXF files (files using BLOCKS with the INSERT command)
- Fixed errors when running batch mode for v-carving.
- Added .tap to the drop down list of file extensions in the file save window

Changes in Version 1.48

- Fixed another bug in the multipass code resulting in multipass cutting when multipass cutting was disabled.

Changes in Version 1.49

- Added option to suppress option recovery comments in the g-code output
- Added button in "General Settings" to automatically save a configuration (config.ngc) file

Changes in Version 1.50

- Modified helper program (ttf2cxf_stream) and F-Engrave interaction with it to better control the line segment approximation of arcs.
- Added straight cutter support
- Added option to create prismatic cuts (inverse of v-carve). This option opens the possibility of making v-carve inlays.
- Fixed minor bug in the v-bit cleanup tool path generation
- Changed the behavior when using inverting normals for v-carving. Now a box is automatically generated to bound the cutting on the outside of the design/lettering. The size of the box is controlled by the Box/Circle Gap setting in the general settings.
- Removed v-carve accuracy setting
- Added option for radius format g-code arcs when arc fitting. This will help compatibility with g-code interpretors that are missing support for center format arcs.

For the full history look at the F-Engrave Change Log


(Right click on the link and select "Save target as" or "Save link as")
Source files
(zip file)
Windows Executable Files
(zip file)
Python File Only (.py - text file)
(No True Type Font (TTF) support)

If the windows executable does not work right away install the
“ Microsoft Visual C++ 2005 Redistributable Package (x86)”. The program I use to create the Windows executables (py2exe) has a dependency to this package.


F-Engrave Setup

F-Engrave V-Carving Tutorial (PDF Version: F-engrave_tutorial.pdf) (BMP File Used in Tutorial: Polski_Crest.bmp)

F-Engrave Manual

F-Engrave V-Carve Algebra/Geometry Details

The videos embedded below contain a lot of the information regarding the F-Engrave input fields and the basic capabilities of F-Engrave.

Video Tutorial (in French) by EquinoxeFR

F-Engrave video manual addendum
using the DXF import feature

F-Engrave video manual addendum
describing the v-carving feature

V0.1 F-Engrave video manual

Using F-Engrave to engrave text on hockey pucks


F-Engrave can generate tool paths for v-carving. I posted algebra behind the geometric calculations here:Algebra/Geometry.

V-Carve Pic
Sample v-carve generated using F-Engrave. See the Video

F-Engrave can also generate tool paths for b-carving. What is b-carving? B-carving is analogous to v-carving only the bit used in b-carving is a round nose (ball nose) cutter.

B-Carve Pic
Sample b-carve generated using F-Engrave (pictured with the round nose bit used to cut the letters.)

Mayan/Aztec Pattern pic Theater Masks pic
Tribal Pattern pic celtic bird pic
Other v-carvings made with F-Engrave.


- Déjà vu detection (Try not to carve the same place twice)
- More Documentation

Related Links

Utility that converts True Type font (TTF) files into CXF format:
TTF2CXF (Ribbonsoft) (To compile on Ubuntu I had to add "-lm" in the Makefile and "#include <math.h>" in the main.cpp file.)
F-Engrave uses a modified version of TTF2CXF (called TTF2CXF_STREAM) to import TTF fonts on the fly. The source for TTF2CXF_STREAM is available in the F-Engrave source code zip file.
Font File Links:
Hershey Fonts (CXF) (Stick and Outline Fonts) [zip file] [individual cxf files]
CamBam Fonts (TTF) (Stick Fonts, Each line is cut twice for this font set.)
Liberation Fonts (TTF) (Outline Fonts)

Other Text to G-Code Programs:
Engrave-11 (LinuxCNC)
Hershey Text: An Inkscape extension (Evil Mad Scientist)
DeskEngrave (DeskCNC)
StickFont (NCPlot)
DeskEngrave (DesKAM)
PyCAM (looks like PyCAM can do centering and multiple lines of text. Thumbs up!)

Another Approach to V-carving:
My method for determining the tool paths for v-carving are detailed in the link above. Another method involves calculating Voronoi diagrams or Voronoi nodes. Here are a couple of links to other peoples work.
Calculating Voronoi Nodes and CNC Projects (Andy Payne)
OpenVoronoi (Anders Wallin)

Scorch Works Home
Scorch Works Home
Scorch Works Blog
@scorchworks On Twitter