I begin the drawing optimizations this week.
After a profiling with callgrind (I had to remove a std::lock_guard which makes LC crash with callgrind), I began with LibreCAD internal functions.
Outside drawing, the function which takes most time is copy constructor of Coordinate, called by Area minP and maxP, Vector start and end functions. As Coordinate is immutable I changed these functions to return reference, it makes ~70% less calls and make a difference when it's slow.
Now the drawing, the paintEvent of LCADViewer (the function which copy from cairo to Qt) is taking 40% of execution time