LibreCAD 3 kickoff

From LibreCAD wiki
Jump to: navigation, search

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.

Architectural review

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.

Boost

We would like to see if some of our current entities can be based of Boost.

Operations

At this moment we only support Adding, deleting and trimming of operations. We would like to see the following operations to be added:

  • Copy
  • Move
  • Rotate

Type of entities

  • Text
  • Dimensions
  • 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)

Visitor Pattern

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)

Unit Tests

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.

Requirements

Familiarity with C++

Familiarity with Boost

Familiarity with CAD

Be able to create API's