LibreCAD 3 kickoff
The Current version of LibreCAD was forked from QCad that was release in 2004 where QT 3 was 'mainstream' This makes the codebase at least 10 years old and there are still sign's of the Qt 3 dependencies. Fixes have been made to work with Qt 4, specially in rendering area but the code base is at this point had to add features to.
LibreCAD 3 kickoff tries to make a new codebase, completely rewritten use modern techniques and design's. In 2012 a highly experimental 'kernel' was created to see of LibreCAD can be re-written with some idea's in mind and we want to continue on this code base for a new design of LibreCAD 3.
At this stage the new codebase has been designed with 3 main functions
- kernel or document model : A Library where we can store CAD entities and do operations on these entities
- CAD Viewer : A Qt Widget that allows to visualise a document stored in the kernel
- A UI : The UI that call's functions to the kernel and CAD viewer to operate on the document in the kernel.
The LibreCAD 3 kickoff will concentrate on the kernel only.
This task involves making the current kernel which is pre-alpha more mature to a more alpha stage. We do expect that quite a bit of time will be spend on the design and re-visiting the current design to see if this can be well used for a CAD document. Our current codebase can be found here : http://github.com/rvt/kerneldev
A proposal of changes will need to be written up and discussed beforehand, but we are looking into the direction of the below items.
The current codebase was designed by one person, we would require the student to review the codebase and we would like to have this reviewed.
We would like to see if some of our current entities can be based of Boost.
At this moment we only support Adding, deleting and trimming of operations. We would like to see the following operations to be added:
Type of entities
- polyline (optional)
- Image (optional)
- Block (optional)
- PaperSpace (optional) (added as a entity because it's properly something we need to store or can be multiple)
For some operations we use the visitor pattern to have entities calculate the their interation point's. We would like to have them extended for all basic entities (Arc, Ellipse, Line)
Within LibreCAD 2 we don't do any unit tests, this put's us into problems when we want to test some operations on different operating systems. We would like see unit tests being added to the code to test for correct behaviour of the system.
Familiarity with C++
Familiarity with Boost
Familiarity with CAD
Be able to create API's