LibreCAD 3 OpenGL Rendering – GSoC 2019


LibreCAD is a free Open Source CAD application for Windows, Apple and Linux. It allows industrial designers and graphics enthusiast to create CAD projects of the highest standard and precision. With this precision and standard comes the need of high quality and accelerated rendering to visualize a document.

This year during GSoC the project consists of making a complete well abstracted OpenGL implementation with C++ for the rendering in LibreCAD 3.

As the coding period is just about to begin next week right now i am doing some more research work and debugging on how it will be implemented. Till now a partial implementation of opengl painter is done with basic features of VertexBuffer Objects, pan, zoom etc. The Project is not just about to use OpenGL but to use it in the way LibreCAD painter calls. Few challenges in this project are the caching mechanism(saving buffer objects in GPU), text rendering( ttf fonts/MSDF fonts),complex entities(dimensions etc) , gradients,spline curves and doing all of them with keeping thread safe also.

From next week as the coding period will begin i will start working on caching mechanism and making graphic entities more robust and abstracted.

Google Summer of Code 2019 (GSoC)

A new round of Google Summer of Code is gather speed.

We are happy to announce, that once again, LibreCAD is part of GSoC in 2019!

Again, under the umbrella of BRL-CAD, a couple of CAD/CAM/CAE or short CAx organizations going to mentor students for a 3 month full time coding challenge during their summer break.
The students, when they participate successfully, will gain experience, reputation and also a certificate and a stipend from Google.
Our value will be the progress, bringing LibreCAD 3 to a new level and hopefully attract the participants to stay longer with us and become a regular contributor.

This year we try a new approach and created a common platform under the name OpenCAx for cross-cutting concerns. We use the OpenCAx term for quite some time, but now it becomes more clearer.
Beside the information from Google at we have additional content for students at
Project ideas are listed under and especially for LibreCAD one can filter by project.

If you are a student who is eligible for the program, have some C++ skills and prefer coding over selling burgers, don’t hesitate to get in touch with us. Or you know one who might be interested, let him know about this great chance.
Look out for Armin (LordOfBikes) or Florian (Feragon) on our community chat channels IRC #librecad or Zulip or reply to any project idea.

The LibreCAD Team

GSoC 2018, Week 4

Made few commits and submitted code with a few bugs left with the rendering of the painter due to QWidget.

June 8, 2018

Made a from changes in painter workflow. Now draw the line, rectangle, etc. will store instructions to draw particular patterns in form of drawing lines between two coordinates. Once stroke function is called all the data that is stored is drawn.

June 5-6, 2018

Removing the instances of the previous painter and working on rendering new painter.

June 4, 2018

Creating another function for the check of repeated drawing of the same pattern. So it stores the pattern in GPU cache and calls ‘glDrawArray’ to draw pattern instead of drawing it again.

June 4, 2018

Once the pattern is saved then dashes are rendered using stroke function by drawing the line for the ‘on’ part and draw nothing for the ‘off’ part.

June 3, 2018

Started working on the dash patterns. As no OpenGL libraries work on rendering dashes considering the line width and offset. For set_dash creating an array for storing the dash lengths with offset.

GSoC 2018, Week 3

June 1,2018

Continued working on replacing of the painter member functions.

May 31,2018

Working on replacing the part where the pointer to the painter is made and its member functions are called with the new painter and creating new member functions which do not exists in OpenGL library.

May 29-30,2018

Learning about OpenGL Shaders for the working of the fill (to fill an object with the color given through RGBA code). In particular, using vertex shaders and fragment shaders for rendering on the graphics card and not on CPU.

May 28,2018

Rendering of the coordinates with the cursor using OpenGL functions. Using glutBitmapCharacter() for the printing of the text on the screen and glRasterPos2f(x,y) for the position to render the text. Also changing the font type and font size.

GSoC 2018, Week 2

May 26,2018

Read about working of OpenGL Vertex Buffers and usage of some new functions like glPushMatrix and glPopMatrix and implemented the conversion of the device to user coordinates and vice versa.

May 25,2018

Got stuck with the rendering of the new painter due to some issues with the pointers but was finally able to resolve them with the help of my mentors. Also used QOpenGLWidget in place of QWidget for the rendering and read its documentation.

May 24,2018

Add new functions to the new painter such as creating lines, rectangles, etc using Vertex buffer objects. Also added many similar functions like clear, fill color with arguments as RGB codes.

May 23,2018

Learned few things about QOpenGLWidget and replaced it with QWidget at few places in order to create an OpenGL window. Removed the previous function to create painter and added files for new painter and make use of its members to create a window.

May 22,2018

Removing the part of the grid that was earlier rendered through Cairo but now it is done with the new painter. Now the grid will be rendered using the new painter and rest all things are same. Changes made are mostly in grid.cpp file and the functions related to the previous painter is removed.

May 21,2018

Completing the task of the grid for the new painter. The grid is rendered through OpenGL and lines are formed using ‘vertex buffer objects’ and then glDrawArrays(GL_LINES, 0, 2) will draw them on the painter.

Beginning of the Working period for GSoC 2018


With the end of the Community Bonding period, the official coding period has begun. During the Community Bonding period, I interacted with my mentors and did some research for my projects i.e. LibreCAD 3 OpenGL Rendering. With help from them, I was able to build the LibreCAD 3 and run it. I went through the code base and had a reading of the module ‘lcviewernoqt’ inside LibreCAD 3 which is directly involved with my project.

Also along with these readings, I went through some research papers and articles for the formation of different types of lines i.e. different dashed lines/strokes formed using OpenGL libraries that is to be used in the formation of the grid in the painter and other shapes such as lines, circles, etc.

During the first week of the coding period, I would be working on the formation of the grid inside the painter, creating lines using Vertex Buffers and working of the scrollbar. Also, it would involve the extraction of the coordinates of the mouse pointer.

Thank You

Congrats for another LibreCAD 3 Google Summer of Code in 2018

Yesterday Google announced the 1,264 students from 64 countries, who have been accepted to work with 206+ open source projects for Google Summer of Code 2018!
Congratulations to all of them!

We are happy to welcome Parth Partani to become a member of our team. He was accepted with his proposal about LibreCAD 3 OpenGL rendering and will spend his summer with coding for LibreCAD. Florian and I will mentor Parth to make this GSoC participation a success for all again.

We expect an exciting time working with Parth and hope to have also a lot of fun together.

Many thanks to our friends at BRL-CAD too, who again take us under their umbrella, with several other CAx related organizations. Beside mentoring a couple of students for themselves they also have to administer the 9 students with their mentors from 4 organizations this year.

Good luck for Parth, our friends students from BRL-CAD, FreeCAD and slic3r and all the other GSoC participants!

The LibreCAD Team

LibreCAD is preparing for GSoC 2018

LibreCAD is again on course for a Summer of Code with Google in 2018.

The first step is done, our umbrella organization BRL-CAD is again selected for mentoring students in GSoC 2018 and so we are too.
Now its up to eligible students to take the challenge and get in contact with us to prepare a great proposal, so we can get at least one of the treasured slots.

More information is available on our wiki page GSoC Check List and the Google site linked above.

The LibreCAD Team

2.2.0 Release Candidate

There were more than 250 commits since 2.2.0-alpha, thus it was overdue to get rid of the alpha in the tag now.
With some more improvements in the last couple weeks, we switch directly to Release Candidate as the response from community is, that the master branch is stable.
There are only some minor changes in the line before the final 2.2.0 release.

Punctual with the release of 2.2.0-rc1 SourceForge’s file upload is down because they moved to a new datacenter this week. They work hard on it.
When the upload is available again, we will supply the new installer there.

Source code and a Windows installer is available on GitHub already: LibreCAD-Installer-2.2.0-rc1.exe

Kind Regards,

LibreCAD team

LibreCAD 2.0.8 released!

It has been 8 months since 2.0.7, and LibreCAD v2 has become better.

Exciting New Features:

1. DWG read support! Big thanks to our CAD expert @Rallaz ;
2. SVG export support! Salute to @dinkel ;
3. Arabic Language GUI support. More work is needed for:
* Right-to-left support for Text entities;
* Arabic fonts for Text.
4. More user configurable settings in App Preferences.

Under the hood, there’s lots of cleanup and coding style tweaking towards C++11, and the code base should be cleaner for new developers.

There is also lots of GUI and user experience tweaking, mostly following user requests. Clearly, LibreCAD needs help from more developers with the large volume of feature requests and bug reports from our user community.

A list of all commits since 2.0.7 can be found at 2.0.8 Forum Announcement

Feel free to join the development, if you are interested in C++/Qt.

The LibreCAD Team