GSoC 2012

From LibreCAD wiki
Jump to: navigation, search



LibreCAD plans on participating in GSoC 2012 (if accepted). Google Summer of Code is an opportunity to connect open source projects with students to give the students an opportunity to "flip bits, not burgers" during their summer holiday. This page will bring together ideas from developers to give Google and perspective students lists of contacts and potential projects.

Interesting/useful links:

For Students

See the potential projects below. It is a VERY good idea to contact potential mentors prior to applying to help in your application, the earlier the better! You should also subscribe to our mailing list ( to introduce yourself and visit our IRC channel (#librecad on Also explore our feature request tracker on SourceForge ( for additional ideas if you'd like to propose something else.

A template application is found on the Student Application Template wiki page.

The application deadline for students is April 6, but you should contact perspective mentors very early. More info on the application schedule is available here: All applications must be made through Google here:

LibreCAD Idea List

What is an Ideas list?


An Ideas list should be a list of suggested student projects. This list is meant to introduce contributors to your project's needs and to provide inspiration to would-be student applicants. It is useful to classify each idea as specifically as possible, e.g. "must know Python" or "easier project; good for a student with more limited experience with C++." If your organization plans to provide an application template, it would be good to include it on your Ideas list. Keep in mind that your Ideas list should be a starting point for student applications; we've heard from past mentoring organization participants that some of their best student projects are those that greatly expanded on a proposed idea or were blue-sky proposals not mentioned on the Ideas list at all. A link to a bug tracker for your open source organization is NOT an ideas list.

LibreCAD Idea List Template

from CC-BY-SA-3.0

Title of Project

Brief explanation:

Expected results:

Knowledge Prerequisite:


When adding an idea to this section, please try to include the following data:

  • a brief explanation
  • the expected results
  • pre-requisites for working on your project
  • if applicable, links to more information or discussions
  • your name and email address for contact (if you're willing to be a mentor)
  • backup mentor name and email address for contact

If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.

Potential projects

LibreCAD for Mobile Platforms

Brief explanation: Android support. LibreCAD is lightweight by design, making it suitable for mobile platforms, such as tablets, smart phones, TV boxes, etc. A mobile port of LibreCAD allows convenient drawing on ubiquitous mobile devices. Qt for Android has been under active development for years, and is expected to be part of the Qt5.1 release, and it would be nice to have the mobile version of LibreCAD ready by then. QNX supports Qt natively, and it might be a good starting point by tBhe lackberry platform. It would be nice to have iOS supported as well. As the current LibreCAD is developed targeting PCs. Some customization is expected for GUI on mobile platforms. Some examples are: Significant tweaking of GUI support. Screen layout should be tweaked to fit various mobile sizes, and core drawing actions should support touch events natively. As Google drive supports previewing dxf files, and we would like to see the mobile version of LibreCAD allows file sharing over cloud.

Expected results: Mobile version of LibreCAD. LibreCAD is customized for mobile usage and packaged for mobile platforms.

Knowledge Prerequisite: Qt, c++, QML; one or more of Android, QNX, and iOS

Mentor: R. van Twisk <>, Dongxu Li < dongxuli2011 at gmail > )

Plugin Interface

Brief explanation: LibreCAD's plugin interface needs to be extended in the following ways:

  • so that a plugin can operate on entities available within LibreCAD including creation, deletion, selection as well as general CAD operations like scaling, rotation, copying, attribute changes.
  • so that a plugin can operate on LibreCAD's menu system so it is capable of creating new drawings, create blocks, layers and more.

Expected results: LibreCAD will be able to be controlled by pure scripting rather then user interaction.

Knowledge Prerequisite: c++, Qt

Mentor: R. van Twisk <>, Rallaz (J. Soriano < rallazz at gmail > )

DWG Support

Brief explanation: Allow to load and save files in the DWG format. The student doesn't have to write it's own DWG parser because it can use LibreDWG. However, some knowledge of the DWG or DXF formats, as they are somewhat similar, format is desirable. Loading and saving of the formats will go through LibreCAD's plugin interface.

Expected results: LibreCAD will be able to load and save files in the DWG format using file->open to open a file or file->save to save a file.

Knowledge Prerequisite: c++, Qt, file filters

Mentor: R. van Twisk <>, Rallaz (J. Soriano < rallazz at gmail > )

Scripting and CLI mode

Brief explanation: Provide a script based command line interface for CAD. This will allow LibreCAD to be scripted through an external file. From within LibreCAD or from Command line a user can supply LibreCAD with a script that can get executed. Another extension is to create an API interface for LibreCAD, so LibreCAD could be used as a drawing library for other programs.This project is in relation with LibreCAD's plugin interface.

Expected results: LibreCAD provides a unified command line interface for actions, and can be run in both an interactive cli mode and a non-interactive batch processing mode. There should be a link of edit in scripting feature so that after importing script, we can manually modify the script with some scripting code editor. It will help modifying scripting code in LibreCAD. LibreCAD provides APIs which can be called by external applications.

Knowledge Prerequisite: C++, Python, Qt, QtScript

Mentor: R. van Twisk <>, Dongxu Li < dongxuli2011 at gmail >

CAD Engine Features

Brief explanation: LibreCAD needs more features for its CAD engine.

Some examples could be:

A new spline library to support features like, spline fitting, trimming, hatching by spline borders, etc.; Complete spline support by allowing both Bézier and spline curves. It would be a nice feature to allow creation of curves by user data from files or formulae, to use LibreCAD as a plotting tool.

Support for more CAD entity types and more drawing methods for entity types, some examples are: entity Point enhancement, entity Text support. LibreCAD supports ellipse and circle entities, and it's reasonable to expect the support of other conic sections: hyperbola and parabola, which are important for both mechanical and optical drawings. More supported entity types allow LibreCAD to be used as a general drawing tool for 2D geometry.

Improve support for projection mode, in addition to isometric projection within LibreCAD. Need to handle 3D distance properly in all projection modes;

Support for geo-referenced data: support for georeferenced image; Accordingly, geo-grid, geo-distance, etc., are expected;

Support for Voronoi Diagram. While Voronoi diagram itself is an interesting feature to support, the requested Offset feature can be implemented by Voronoi analysis.

Improve hatch algorithm hatching by flood fill. The current hatch creation requires user to supply a closed contour, formed by lines, arcs (both circular and elliptic), or a single circle or ellipse. An automatic contour detection algorithm which supports all possible entity types including ellipses and splines is desired.

Partly related to the Voronoi diagram and hatching algorithms, LibreCAD's CAD engine should rely more on a general computational geometry framework, and possible candidates could be: Boost.Geometry or CGAL. Both Boost.Geometry and CGAL provide a broad set of generic computational geometry algorithms. If LibreCAD is expected to be a general geometry drawing tool, new features can be introduced by using a third party geometry library.

Improve text/fonts handling. There are several feature requests regarding text support, Outline font support , LibreCAD graphic performance, Text support

Improve block design/features. For example, extend snap/dimension actions to include block entities within document. LibreCAD currently treates a block as a single insertion point, therefore, can not use block entities directly. Also, block insertion point, save a block to library.

Add layer handling methods, reorder layers, and ability to save a layer to file.

Expected results: More CAD and useful generic geometry drawing features supported by LibreCAD. Significant addition of CAD features is expected on the chosen part of the LibreCAD CAD engine.

Knowledge Prerequisite: computational geometry, C++

Mentor: awallin (Anders Wallin < anders.e.e.wallin at gmail >, dli (Dongxu Li < dongxuli2011 at gmail > )

Meeting the Land Surveyor's Needs

Breif Explanation: Provide Land Surveyors and Mappers with functionality to meet the needs of a Boundary and/or Topographic Survey. This is related to both CAD engine and GUI design.

Expected Results: Functions and Routines that would attract Surveyors and Mappers to the Linux (FOSS) environment for the preparation of their clients needs, and further processing and reading of Survey Data into a spatial database.

Knowledge Prerequisites: C and/or C++, Data integration.

Mentor: Joe O'Connor, Professional Surveyor and Mapper (joseph at

General GUI improvement

Brief explanation: Some detailed ideas have been proposed here: ideas on GUI improvement.

Support user defined keyboard shortcuts.

Support CAD file templates.

Use the Qt graphic view framework to improve painter speed for entity drawing on screen.

Implement clipboard based copy&paste support.

Expected results: Improved GUI for better user experience.

Knowledge Prerequisite: Qt, C++

Mentor: R. van Twisk <>, dli (Dongxu Li < dongxuli2011 at gmail > )

Multi-threading Support

Brief explanation: LibreCAD does not support multi-threading yet, while overall performance and GUI responsive time can benefit from a multi-threading design.

Parallel processing is also expected for CAD engine related operations.

Expected results: Multi-threading support and better user experience.

Knowledge Prerequisite: Qt, C++

Mentor: R. van Twisk <>, dli (Dongxu Li < dongxuli2011 at gmail > )

Theme based UI

Brief explanation: LibreCAD's design is somewhat hard coded into the the core, and although it's possible to change the icons, this cannot be done after compilation of LibreCAD. We would like to have a UI where the icons can be replaced with a other set of icons, even after the program has been compiled.

Support SVG icons which can be resized by user theme.

Expected results: A dialog or method in LibreCAD to set the icons to be loaded.

Knowledge Prerequisite: Qt

Mentor: R. van Twisk <>, dli (Dongxu Li < dongxuli2011 at gmail > )

2D 'kernel'

Brief explanation: An API based 2D kernel with pluggable storage engine and operations module. This style 2D kernel would allows us to store 2D entities not only in memory but also in shared database. This would allow more then one user to work on the same drawing simultaneously.

Expected results: A new 2D kernel in LibreCAD in which operation can be performed. Only one backend (memory) needs to be provided so LibreCAD can operate the same way using the new kernel. This can later be extended to support multiple storage engines and UIs.

Knowledge Prerequisite: c++, c++ architect

Mentor: dli (Dongxu Li < dongxuli2011 at gmail > ) , R. van Twisk <>

Right Mouse click / Context Support

Brief explanation: Create a framework that allows to utilize the right mouse on entities for direct editing on action starting. This framework should allow us to easily add/change what's show during the right mouse click. to change attributes of a entity.

Expected results: Have LibreCAD respond to a right mouse click to directly manipulate selected entities or do operations.

Knowledge Prerequisite: Qt, c++

Mentor: R. van Twisk <>, dli (Dongxu Li < dongxuli2011 at gmail > )

Context sensitive entry of data

Brief explanation: When adding entities on screen it is desirable to have at some point LibreCAD asking for specific parameters at mouse courser for entering information. For example when placing the second point of a line, LibreCAD should ask for the angle or length of a line. When placing a circle it should ask the diameter, radios or start/stop angles. This allows for fast adding/changing of entities.

Add more features to the default action. Currently, LibreCAD supports modifying entities in default action by dragging the entities or their reference points. More context based features can be added.

Expected results: LibreCAD showing entity specific information at custom position when adding entities.

Knowledge Prerequisite: Qt

Mentor: R. van Twisk <>, dli (Dongxu Li < dongxuli2011 at gmail > )

Support for multiple units upon data entry

Brief explanation: Similar to feet and inches support, support for supplying LibreCAD with different units. For example if LibreCAD was set to 'foot' in the unit setup, it should be possible to enter a unit of [1" + 2'], or [1.2meter]. LibreCAD would then convert the entered units to the unit LibreCAD is operating/set for. Various measuring system should be supported.

Expected results: LibreCAD to accept different units on the command line

Knowledge Prerequisite: c++

Mentor: R. van Twisk <>,dli (Dongxu Li < dongxuli2011 at gmail > )

Smart Snap

Brief explanation: Currently LibreCAD has various snap capabilities, but they are only directly on entities, or on the grid. With smart snap LibreCAD can find endpoints, length, arc sizes of the 'same' at different locations. This allows for much faster creating of drawings because entering of new entities require less steps. Each time LibreCAD finds a smart snap, the point or entry would light up on the screen showing the users the snap interaction.

Expected results: Smart snap button on the snap toolbar with smart-snap capabilities.

Knowledge Prerequisite: Qt, c++, CAD

Mentor: R. van Twisk <>, dli (Dongxu Li < dongxuli2011 at gmail > )