What is Embroidermodder ?
Embroidermodder is a free machine embroidery application. The newest version, Embroidermodder 2 can:
- edit and create embroidery designs
- estimate the amount of thread and machine time needed to stitch a design
- convert embroidery files to a variety of formats
- upscale or downscale designs
- run on Windows, Mac and Linux
For more information, see our website.
Embroidermodder 2 is very much a work in progress since we're doing a ground up rewrite to an SDL2 GUI. The reasoning for this is detailed in the issues tab.
To see what we're focussing on at the moment check this table.
| Date | Event |
|---|---|
| Dec 2021 - Jan 2022 | libembroidery 1.0 work and bugfixing |
| 31st of Jan 2022 | libembroidery 1.0 will be released, then updates will slow down and the Embroidermodder 2 development version will be fixed to the API of this version. |
| Feb 2022 | An overview of what has changed will be written up for the website as a news update, along with better documentation of libembroidery. |
| Feb-April | Finish the FreeGLUT 3 conversion |
| April-May 2022 | Finish all the targets in the Design, or assign them to 2.1. |
| May-June 2022 | Bugfixing, Testing, QA |
| Summer Solstice (21st of June) 2022 | Embroidermodder 2 is officially released. |
| July 2022 | News and Documentation work for Embroidermodder 2 |
Build and Install
Dependencies
To build Embroidermodder 2 from source run:
On most systems:
./build.sh --get-dependencies
If you have a more unusual package installer, try:
./build.sh --build-dependencies
On Windows:
.\build.bat --build-dependencies
FreeGLUT 3
We're working on an FreeGLUT 3 version of the library that will require no non-standard dependencies not included in the source.
On systems where you use --build-dependencies the system will
build and install the libraries if they are not already present
from the versions in extern/. This way a copy of
the Embroidermodder 2 source code
on a machine with a build environment can be built without a connection
to the internet access and insures against FreeGLUT 3 going out of support.
Building
Assuming you have the above dependancies these commands should build embroidermodder
./build.sh
or (on Windows)
.\build.bat
with the install argument it will also install the program to user space
./build.sh --install
or (on Windows)
.\build.bat --install
Documentation
The documentation is in the form of the website (included in the docs/
directory) and the printed docs in the three files:
- docs/libembroidery_0.1_manual.pdf
- docs/embroidermodder_1.90.0_user_manual.pdf
- docs/embroidermodder_1.90.0_developer_notes.pdf.
Development
Current work:
- Converting C++ to C throughout.
- All comments to multiline
/* C-style comments */. - Replace variables with variables of C or libembroidery type. (QColor to EmbColor, QPointF to EmbVector)
- Reduce the reliance on Qt functions while allowing boot of the program.
- Turn settings into array type, to aid read/write in loops.
- QCheckBoxes into an array to simplify
Settings_Dialog::createTabOpenSave.
- All comments to multiline
- OpenGL Rendering
- "Real" rendering to see what the embroidery looks like.
- Icons and toolbars.
- Menu bar
- Libembroidery interfacing:
- Get all classes to use the proper libembroidery types within them.
So
EllipseObjecthasEmbEllipseas public data within it. - Move calculations of rotation and scaling into
EmbVectorcalls.
- Get all classes to use the proper libembroidery types within them.
So
- Get undo history widget back (BUG).
- Switch website to a CMake build.
- GUI frontend for embroider features that aren't supported by embroidermodder: flag selector from a table
- Update all formats without color to check for edr or rgb files.
- EmbroideryFLOSS - Color picker that displays catalog numbers and names
- Setting for reverse scrolling direction (for zoom, vertical pan)
- Stitching simulation
- User designed custom fill
- Keyboard zooming, panning
- Advanced printing
- Libembroidery 1.0
- Better integrated help: I don't think the help should backend to a html file somewhere on the user's system. A better system would be a custom widget within the program that's searchable.
- New embroidermodder2.ico 16x16 logo that looks good at that scale.
- saving dst, pes, jef
- Settings dialog: notify when the user is switching tabs that the setting has been changed, adding apply button is what would make sense for this to happen.
- Update language translations
- Replace KDE4 thumbnailer.
- Import raster image
- Statistics from 1.0, needs histogram.
- SNAP/ORTHO/POLAR
- Cut/copy allow post-selection
- Layout into config
- Notify user of data loss if not saving to an object format.
- Add which formats to work with to preferences.
- Cannot open file with # in the name when opening multiple files but works with opening a single file.
- Closing settings dialog with the X in the window saves settings rather than discarding them.
- Otto theme icons: units, render, selectors, what's this icon doesn't scale
- Layer manager and Layer switcher dock widget
- test that all formats read data in correct scale (format details should match other programs).
- Custom filter bug -- doesn't save changes in some cases.
For more details read on into the Design section.
Sample Files
Various sample embroidery design files can be found in the embroidermodder2/samples folder.
Design
These are key bits of reasoning behind why the software is built the way it is.
CAD command review
- scale
- circle
- offset
- extend
- trim
- BreakAtPoint
- Break2Points
- Fillet
- star
- singlelinetext
- Chamfer
- split
- area
- time
- pickadd
- zoomfactor
- product
- program
- zoomwindow
- divide
- find
- record
- playback
- rotate
- rgb
- move
- grid
- griphot
- gripcolor
- gripcool
- gripsize
- highlight
- units
- locatepoint
- distance
- arc
- ellipse
- array
- point
- polyline
- polygon
- rectangle
- line
- arc (rt)
- dolphin
- heart
So, it means weighing up some simplifications.
Removed Elements
So I've had a few pieces of web infrastructure fail me recently and I think it's worth noting. An issue that affects us is an issue that can effect people who use our software.
googletests
In development we attempted using googletests. Googletests require a web connection to update and they update on each compilation.
gtests are non-essential, testing is for developers not users so we can choose our own framework. I think the in-built testing for libembroidery was good and I want to re-instate it.
Qt and dependencies
Downloading and installing Qt has been a pain for some users (46Gb on possibly slow connections).
I'm switching to FreeGLUT 3 (which is a whole other conversation) which means we can ship it with the source code package meaning only a basic build environment is necessary to build it.
Social Platform
Github is giving me a server offline (500) error and is still giving a bad ping.
So... all the issues and project boards etc. being on Github is all well and good assuming that we have our own copies. But we don't if Github goes down or some other major player takes over the space and we have to move (again, since this started on SourceForge).
This file is a backup for that which is why I'm repeating myself between them.
Pandoc Documentation
The documentation is, well better in that it's housed in the main repository, but I'm not a fan of the "write once build many" approach as it means trying to weigh up how 3 versions are going to render.
Can we treat the website being a duplicate of the docs a non-starter? I'd be happier with tex/pdf only and (I know this is counter-intuitive) one per project.
OpenGL
OpenGL rendering within the application. This will allow for Realistic Visualization - Bump Mapping/OpenGL/Gradients?
Configuration Data Ideas
Ok this is changing slightly. embroidermodder should boot from the command line
regardless of whether it is or is not installed (this helps with testing and
running on machines without root). Therefore, it can create an initiation file
but it won't rely on its existence to boot: this is what we currently do with settings.ini.
- Switch colors to be stored as 6 digit hexcodes with a #.
- We've got close to a hand implemented ini read/write setup in
settings.c.
Distribution
- Mac Bundle
.tar.gzand.zipsource archive.- NSIS installer for Windows
- Debian package
- RPM package
Scripting Overhaul
Originally Embroidermodder had a terminal widget, this is why we removed it.
ROBIN: I think supporting scripting within Embroidermodder doesn't make sense.
All features that use scripting can be part of libembroidery instead. Users who are capable of using scripting won't need it, they can alter their embroidery files in CSV format, or import pyembroidery to get access. It makes maintaining the code a lot more complicated, especially if we move away from Qt. Users who don't want the scripting feature will likely be confused by it, since we say that's what libembroidery, embroider and pyembroidery are for.
How about a simpler "call user shell" feature? Similar to texmaker we just call system on a batch or shell script supplied by the user and it processes the file directly then the software reloads the file. Then we aren't parsing it directly.
I don't want to change this without Josh's support because it's a fairly major change.
JOSH: I totally agree.
I like the idea of scripting just so people that know how to code could write their own designs without needing to fully build the app. Scripting would be a very advanced feature that most users would be confused by. Libembroidery would be a good fit for advanced features.
Perennial Jobs
- Check for memory leaks
- Clear compiler warnings on
-Wall -ansi -pedanticfor C.
Developing for Android
https://developer.android.com/studio/projects/add-native-code
apt install google-android-ndk-installer cmake lldb gradle