Flamingo is written in Python 3.9, C/C++, and some Tcl/Tk. Python is by far the most prevalent and most new work is done in Python. The display and editing portions of the program utilizes X-Windows. While working in X-Windows is pretty archaic, it's fast and does the job and it's already written. No need to change at the moment.. There are five main portions of the program (GUI, preprocessor, drawing, display, and testing suite) as well as 60-some-odd utilities that are applied after the main drawing functions are ru. The Python and C/C++ portions utilize PyQt and the Tcl/Tk portions utilize the native Tk GUI libraries.. Flamingo is approximately 120,000 lines when all the different parts of it are included. With the exception of 30 lines that I looked up in a book for a random number generator and a few other short function in range from three to thirty lines, every single line was written by myself.
The drawings you see here are eventually drawn on a pen plotter using light fast acrylic inks and 100% cotton rag, acid free paper. It's all museum and archival quality materials. A pen plotter is not a regular printer, such as an inkjet or laser printer. The plotter actually draws the pictures by moving a technical pen around the page. The technical pens have tungsten carbide points that from .13mm to 1.0mm. Mylar, a frosted plastic 'paper' is also used for some applications. When using mylar, a .13mm pen can be used. Trying to use such a tiny pen with paper is problematical as the paper fibers can clog the pen.
Pen plotters are much more labor intensive than a more modern inkjet plotter but when it comes to work like Flamingo, which is line oriented, the pen plotter is second-to-none when it comes to anything approaching an affordable plotter. The pen plotter can take between a few minutes to a few hours for a drawing. In the case of the biggun drawing, 9-12 hours were required to render the work each of the four pieces. The plotter I use is a Houston Instruments DMP-162R, which has the capability of plots up to 3 feet wide by 20 feet long (.9 by 6 meters). The plotter pictured to the right is not the 162R, but is quite similar. One feeds the paper into the front of the plotter and rolls in the bed of the plotter move the paper back and forth. The pens are held in a small arm and they move from side-to-side. To draw a diagonal line, both the rollers and pen move at the same time. Any linear drawing that a person can draw, a plotter can draw The 'thing' above the paper in the picture is a pen holder. The plotter can hold up to eight pens of differening widths and colors at one time and the arm will swap the pens as needed. If more than eight pens are needed, the plotter can pause and send a message asking for a new pen.
Flamingo runs under Fedora 34 with a Linux 5.11 on an AMD 5900X (12 cpus) with 128 GB of memory. Unfortunately due to graphic card shortages in 2021, it's running with an Nvidia GE Force 710 awaiting an Nvidia 3070. It has been tested under several Unix and non-Unix systems alike, but I very, very much prefer to stay in the Linux environment. I sometimes use an Intuos graphics tablet which is 12 by 8 inches (30 * 20 cm) in size. Since I actually have to do the programming, there are three monitors with a 32" 4k Dell U3219Q, 2560*1440 27" Dell U2713HM, and a 24 inch monitor, 1920*1200 Dell 2407WFP.
There is a pretty sophisticated testing
suite that's been written to ensure that no older drawings are
broken with new code. It utilizes all twelve cpus for
efficiency. It used to take seven hours to run the tests using
the primary drawing engine in a compiled language and over twenty four
hours with a newer Python version. With Python multiprocessing, a
few compiler flags I missed, and moving from standard Python to PyPy,
the testing time has been reduced to about nine minutes. The Huevos
pieces are use multiprocessing and other sections will eventually use
it also. Hopefully, I'll be able to move into using the Cuda
graphics cores with PyCuda once a proper video card is obtained.