LibreCAD v3 : A work in progress

Project : LibreCAD v3 Development.

Hi all, this is Gaganjyot Singh here. I am pursuing Bachelors of Computer Science and engineering at Chandigarh Engineering College, Chandigarh, Punjab. This year, I got a chance to  work for a pure CAD software. The LibreCAD. LibreCAD had a plan for a version 3 and the creator of LibreCAD had some code which he created 2 years ago for the v3 development. I begun working on the code. My first priority was to develop, polish and enhance the 2D kernel.

Looking towards the LibreCAD, the Code is kept pretty modularized so that the user can have choice. For example the LCviewerNoQt contains the code for rendering the drawings on the screen. At the moment the functionality is moved from Qt to Cairo but in future, the user may have an option to choose between Qt, Cairo or may be OpenGL too. This modularity is also designed keeping in mind the extensibility and usability of code. The LCKernel is a robust 2D kernel being developed at the moment. So it can be used in any other software which may require such functionalities ( transformations, Intersections etc). LibreCADv3 currently uses Lua as its scripting language, which is pretty finalised. The modularity code allows the developers to add their favourite scripting langauges, may be python, ruby or any preferred. The design principles of the LibreCAD v3 include the immutable concept. Every entity in the kernel is assigned with an ID at the time of creation. Whenever a transformation is to be processed on entity such as a move or rotate operation, the new data ( Coordinates, Radius, start/end angles ) etc are calculated and a new entity is created at the Coordinates calculated with the same ID and the older entity is deleted.

My main project was just concentrated over the kernel but the concepts to be implemented till the mid term were implemented very quicly so I went on implementing other extra functionalities to the code.

Tasks completed,

  • Implemented the Move, Copy, Rotate and Scale operations for all the entities.
  • Implemented Ellipse in kernel and viewer
  • Implemented Text in kernel and viewer
  • Implemented Point in kernel and viewer
  • Implemented Dimensioning in kernel
  • Implemented Arrowheads in viewer
  • Implemented MText in kernel
  • Spline in kernel.
  • Splitted the Viewer into ViewerQt and ViewerNoQt part
  • Ported LibreCADv3 to use CMake

My future work includes,

  • Porting of the Quadratic solvers from v2
  • Implementing the interseciton pattern in v3
  • Creating the Unit tests.

The nature of my project is Dynamic and research based( Sometimes ). So sometimes the code gets implemented before time and sometimes it takes longer then expected. Completing the above remaining tasks, I do expect there will be time left which I will be using in adding extra functionalities to the program. Expected functionalities which I plan to implement include DXF support, work on the UI portion.

My commits, code addition and deletion is as,

65 commits

24524 Additions

15446 Deletions

Off Topic:

While coding with the LibreCADv3, I shared it with a group of my friends and the played a bit with the Lua scripting and designed marvellous designs.

Please Vote for LibreCAD at SourceForge

LibreCAD looks good on SourceForge. We will be on the ballot for the July Project of Community Choice SourceForge project of the Month.

If you have a account, please login to vote for LibreCAD at . If you do not get a account yet, voting for LibreCAD is a good reason to register for one, and be able to submit bug reports and feature requests for LibreCAD at

The LibreCAD Team

July SourceForge Project of the Month Ballot

Vote for LibreCAD as

Now it’s your chance to vote for LibreCAD to be the project of the month July 2014!!

If you vote for LibreCAD you will be reward with the ultimate feeling of doing something great for the LibreCAD community! What are you waiting for? Stop reading and go to to place your vote and get that ultimate feeling right now!

LibreCAD 2.0.4 released

While our new LibreCAD_3 engine is under heavy development as part of the GSoC 2014 program, we will still have LibreCAD-2 developments, bugfixes and new features for this version of LibreCAD. Thanks to help from our small but dedicated developers, LibreCAD 2.0.4 is ready for end users.

Here are some major bugs fixed in this bug fixing release:

  • Windows and OS/X printer dialog fails to appear when running Qt5;
  • A patched version of muparser is used by default for OS/X and win32;
  • Update layer for selected entities when a layer is selected
  • Plotting/drawing mathematical equations by smallfix
  • Draw circle by 2 points and radius
  • PIC file importer by cgrzemba
  • Update layer for selected entities when a layer is selected by ajisaacs
  • Lots of shortcut fixes by thomas
  • Arc angle updates for negative z-axis by coryjc190
  • Drawing order regression in 2.0.3

It may take several days for us to prepare and upload win32 and OS/X installers to .

The LibreCAD Team





LibreCAD on ReactOS

Ever needed to run a windows application but you don’t have a Windows license? ReactOS allows you to do just that! From their website: 

ReactOS® is a free open source operating system based on the best design principles found in the Windows NT® architecture (Windows versions such as Windows XP, Windows 7, Windows Server 2012 are built on Windows NT architecture). Written completely from scratch, ReactOS is not aLinux based system, and shares none of the UNIX architecture.

Here is a screenshot of LibreCAD running on ReactOS.

LibreCAD on ReactOS










LibreCAD runs fine in reactOS and in my limited testing It doesn’t crash or did anything strange, the people of ReactOS has done a great job!

ReactOS is under heavy development at the moment and they are prepping for 0.4 release, here you can find more information ReactOS 0.4. Additionally, I would like to point out their Indiegogo campaign. ReactOS is a very complicated system and they need all the help in the world. If you find this a useful project and have used it yourself or planning to, you can support ReactOS financially, go to the IndieGOG campaign and read about more about the plan’s and goals.


We hit the one million download mark!

Hey all, look at what I found here!

Download statistics

We hit the one million download mark! Since we don’t track any user’s through LibreCAD we can only rely on statistics given to us from Source Forge. So I suspect we will have more download’s then just a million, but hé, these are some official statistics, proof!

I am very happy to see this number of downloads and this give’s us all more the reason to keep working on LibreCAD.

happy drawing!

LibreCAD and GSoC 2014 – Under the umbrella of BRL-CAD

This year LibreCAD will be participating in GSoC (Google Summer of Code).

We have tried to get into GSoC in 2012 and 2013 aswell, but unfortunately we where not picked by the good guy’s at google. This year we have been asked by our friend’s at BRL-CAD! Not only did they ask us, but they also asked OpenSCAD and STEPcode.

The main goal of this collaboration is to bring the project’s closer together and hopefully in future we can have these tools collaborate better. Not only on a human level, but also on a integration level for these projects.

For GSoC 2014 we unfortunately will have a lower set a projects due to the lack of resources on our end. Our GSoC 2014 is located overhere : If you have any question’s please don’t hesitate to talk to use on freenode on our #LibreCAD channel or if you want to talk to our umbrella organisation BRL-CAD on #brlcad.

Or send a mail to use through the forum or directly!

R. van Twisk





LibreCAD 2.0.1 Released

Update: 2.0.2 was released after two serious bugs in 2.0.1 were fixed.

After two years of development by our small group of developers, LibreCAD-2.0 is deemed stable enough to replace the aging LibreCAD-1.0.4.Two serious bugs  were fixed in version 2.0.1 after the release of 2.0.0 at the end of 2013. We recommend users to upgrade to 2.0.1 from previous versions of LibreCAD. Windows and OS/X users can download 2.0.1 installers at . If you come across issues due to upgrading from 1.0 series, please report in or at our sourceforge bug tracker.

Some notable changes visible to users:

  1. reworked snapping system to allow simultaneous multiple snapping options; snapping of equidistant middle points;
  2. Helping/scratch layer support. Straight lines are kept infinite and entities are skipped  in printout;
  3. isometric grids;
  4. architectural tick;
  5. support of new ellipse features missing in version 1.0, such as, intersection, middle point, arc length, and tangential direction;
  6. several new drawing features for line, circle, and ellipse;
  7. improved localization, translation for plugins and standard dialogs;
  8. support for a general factor for drawing size dimensions to help scaled drawings;
  9. revert entities direction, developed by effad;
  10. some UI tweaking;
  11. Windows setup registration to add LC in Windows Control Panel
    ‘Programs and Features’.
LibreCAD-2.0 is using a new dxfrw library to handle the DXF file format, and some advantage of the dxfrw library brings are:
  1. New dxf library supporting ascii and binary files, more versions and fully compatible with the specification;
  2. Support of templates;
  3. Dimensions: support for aligned / horizontal text;
  4. Dimensions: added general scale property;
  5. Added support for single line text.
Some internal changes since LibreCAD-1.0 series:
  1. removed Qt3 dependency;
  2. reworked methods to calculate intersections to simplify support for new entity types;
  3. improved many drawing algorithms for performance;
  4. added scripts to allow automatic building on OS/X and Windows;
  5. added boost and C++11 support ;
  6. various code review and bug fixes.
Looking forward to LibreCAD-2.1:
Please share your ideas about the next major release of LibreCAD, and help us reaching there. Help is any form is welcome, and you can talk to us at
The LibreCAD Team

LibreCAD 2.0.0rc3 released

In this last release candidate of our next major stable release 2.0.0, we fixed several critical CAD engine bugs related to arc and ellipse classes, and we also improved packaging for both OS/X and Windows.

While the current OS/X installers are more stable compared with our previous releases, we encourage OS/X users/developers to help the stabilization process by testing and reporting issues/patches to our bug trackars or user forums.

Thanks to contributions from our large user community, LibreCAD-2.0.0rc3 supports 46 localizations in 25 languages.

We will start 2.1 forking soon with the formal release of 2.0.0. and interested developers may start sharing their ideas and pull requests by then. Please join us to make LibreCAD better!

The 2.0.0rc3 installers for Windows and OS/X can be found at:

The LibreCAD Team

LibreCAD-2.0.0rc2 released

After nearly three months of hard work, we are glad to announce the release of 2.0.0rc2 of LibreCAD, one more step towards our next major stable release 2.0.0. A short list of commit log is attached for your convenience.

As of 2.0.0rc2, we expect LibreCAD to be stable enough for daily usage, as we have fixed some serious issues since 2.0.0rc1 and have had more time for testing. As a free software project, we highly value feedback from our user community, whether it’s in form of bug reporting, wiki building, template/library sharing, or a friendly chat on IRC.

Our LibreCAD users would be pleased to welcome our new developers who are working hard to make LibreCAD better: Armin Stebich(LordOfBikes) and Tamas TEVESZ (g0rdon).

Beyond 2.0: please feel free to share your vision on LibreCAD-2.1 with our developers.

Thank you and enjoy LibreCAD-2.0.0rc2!

The LibreCAD Team

Armin Stebich (25):

  • added more initialization regarding bug #396
  • fixed ticket #414, font size of selected length in qg_selectionwidget
  • fixed more ellipse tolerance issues
  • fixed bug #419, MText line spacing not saved
  • fixed missing tr() method
  • load Qt standard dialog translations
  • added Qt translation files to windows NSIS installer package
  • set the output folder for Qt qm-files in Windows NSIS installer config
  • applied patch #38, added strings to translation
  • improvement of windows build batch files
  • merge changes from lordofbikes/master
  • fixed issue with save/restore of snap modes
  • applied patch #39, added strings to translation
  • Merge pull request #402 from alice23/master
  • fixed bug #417 saving layer attributes
  • Merge branch ‘master’ of
  • added plugins translation files and include them in LC and build process
  • fixed typo in
  • fixed windows build in new *.pri files
  • fixed wrong icon file name in LibreCADdoc.qhcp
  • Merge branch ‘master’ of
  • improvement of postprocess-win.bat
  • added missing doc file
  • fixed windows build of ttf2lff, included time.h
  • ttf2lff – eliminate goto jumps in main()

Chris J. Mutter (1):

  • fixed compile error on newer C++11 compilers (g++48, clang33) that dont accept a cast to (char)NULL

Dongxu Li (25):

  • disabled ModifyText button from toolbar Modify, bug #415
  • ellipse3p: fixed a tolerance issue
  • floating point tolerance cleanup, more work needed
  • Merge pull request #398 from jasleenkaur/patch-1
  • updated README
  • fixes for macx building issues
  • use snprintf() instead of sprintf()
  • Do not use stringstream for osx
  • Do not print help layer, bug#406
  • Replacing uint with unsigned for gcc-4.8
  • qmake building scripts for boost, muparser, and freetype
  • fixed a qmake warning
  • Building script for FreeBSD
  • clang building
  • fixed building issues with clang
  • fbsd: script fix for user mode building
  • renamed setting .pro files to .pri
  • exclude images from snapIntersection, bug#426
  • SCMREVISION updated to 2.0.0rc2
  • fixed another compiler warning revert this if this commit causes regression of dimensions
  • fixed a building issue for macx, bug#422
  • minor command line fixes, issue#400
  • updated windows building scripts for Qt-5.1.1
  • dxfrw: disabled output of unused ACADVER key, more work needed to fix the real cause
  • win32: avoid adding empty boostlib to LIBS

Jasleen Kaur (1):

  • updated librecad.dox

Rallaz (5):

  • added patch #37 crash on load fixed
  • correct ellipse extrusion from Florian
  • Merge branch ‘master’ of
  • remove Qt dependency for ttf2lff
  • hack: disable boost lib check in boost.pri

Tamas TEVESZ (16):

  • Corrent limit for strftime()
  • FreeBSD-related fixes
  • Kill unused files
  • Fix permissions on non-executables
  • Fix qmake variable names
  • Rationalize ttf2lff
  • Merge branch ‘master’ of
  • Fix for Qt5
  • Add compiler and Qt version info to About panel
  • Somewhat better fix for building on FreeBSD
  • Tame runaway search and replace.
  • Missed>settings.pri in previous commit.
  • Correct fix for #406
  • Generic approach to detect versioned Qt executables.
  • Some instructions for building on Red Hat-like distros
  • Add pkg-config to dep list for Debian-ish distros