GSoC/GCI Archive
Google Summer of Code 2012


Web Page:

Mailing List:


BRL-CAD is a powerful cross-platform open source solid modeling computer-aided design (CAD) system.

BRL-CAD provides solid geometry editing, ray-tracing, geometric analysis, image and signal-processing, performance analysis tools, a robust high-performance geometry engine, and much more. It's more than a million lines of code, 400+ binary applications, dozens of libraries, and has been under development for more than 25 years.  BRL-CAD became an open source project in 2004.

The BRL-CAD community is represented and developed by a consortium of individuals in the open source community from industry, academia, government, and private industry all over the world. Our organizational interests in BRL-CAD vary across the project's primary focus areas including CAD, CAM (manufacturing), CAE (engineering), solid modeling (analysis), and computer graphics.

BRL-CAD's users are primarily composed of individuals in the CAD industry where modeling requirements are fundamentally different from those of content modelers (such as Blender) that are used for animation, gaming, and film purposes.  BRL-CAD's primary competitors are in an entirely separate industry where commercial products like AutoCAD, Solidworks, Pro/Engineer, and CATIA dominate. See our industry diagram for a visual overview of where BRL-CAD fits within the various CAD industries.

Our goal is to become the best solid modeling system by encouraging worldwide collaboration, improving recognition and awareness, providing effective user-friendly features, and by continuing to work hard at catering to our users' needs.


  • Benchmark Performance Database This project aims to provide more channels to the users to submit the benchmark logs of their brlcad installations ( via the web API, ftp, scp in addition to the existing channel of email), implement an efficient storage and retrieval of logs (via the database and the archiving of the files) and provide an interface to access the logs via graphical means or otherwise.
  • Code Refactoring for Reduced Maintenance Cost As there are many "copy-pastes", the main aim of this project is removing of duplications and decreasing in the count of lines of the BRL-CAD project. Such refactoring is necessary for reduced maintenance cost . The reduction must be very careful in order not to disrupt the project, so different unit tests will be necessary after reduction.
  • Implicit to NURBS conversion At present, BRL-CAD has implemented lots of geometric primitives in an implicit form, but when it comes to interactive shaded displays and conversion to other formats, the disadvantages of implicit primitives come out. So we need a conversion to NURBS bundary representations. Lots of primitives have already been implemented as NURBS, but some are not robust and some still need to be improved. Besides, some are still missing. This summer, if I'm accepted, I'm going to accomplish the goal of converting all (if needed) implicit primitives to NURBS, including fixing the bugs and correcting the errors existing now, and adding new conversions that have not been implemented yet. Finally, I'd like to build a converter that can walk a CSG tree and convert the implicit primitives in the tree altogether to their NURBS form. The original implementation in BRL-CAD is a good starting point, and I will take the current routines of BRL-CAD.
  • Package Library Extensions The Package Library Extensions project can be split in three parts. First one consists of implementing a testing framework. Parameters tested could include speed, delay, corruption and package loss as well as a general record of this parameters for different package sizes. Packages passed around will be compared md5sum in order to ensure consistency is maintained. I have used the “gettimeofday()” time stamp difference to simulate a package timer. When a package timer expires the package is resent, the lost package count is increased and the timer is reset. This would be a very basic way of obtaining loss rate (lost packages / total packages sent). Performance bottlenecks should be detected when using the above stated tests. For example, if we implement a Cyclic redundancyi check field in our package header on a very fast network there is a direct loss in performance. It is easier to resend the package that hasn't been received than to check each package. Having the above stated two fixed user callbacks will be added. Adding callbacks should make the program more flexible allowing user to choose between various situations. As well as enable a better error-detection.
  • Visualizing Constructive Solid Geometry (CSG) BRL-CAD already offers the possibility of generating geometry hierarchies corresponding to .g databases. These can be eventually interpreted through images. However, the purpose of this project is to provide more than this: an interactive graph editor that allows the user to modify the .g database by interacting with its displayed graph. In Constructive Solid Geometry a hierarchy is shaped as a tree which is in fact a directed acyclic graph. Thus an automatic graph layout API would be useful for representing the hierarchical structure of the .g databases. The visual layout will be built with interactive Tcl/Tk widgets. It will use graph algorithms in altering the graph structure as well as the .g geometric structure, as the user modifies the visualized graph. In the end, this graph based visualization should be part of BRL-CAD's model editing tools MGED and Archer.
  • Volume and Centroid Functions for Primitives Currently, most primitives in BRLCAD do not have volume, centroid, or surface area functions. My goal is to implement volume and centroid functions for many of these primitives. As well, I will be refactoring major sections of mged's analyze command so that it makes use of the functions I will be adding. I also plan on cleaning up the comments found in the source code that I will be working on throughout my project.
  • Voxelize Command The input for the voxelize command is going to be geometrical data. The output is a set of voxels which can be used to represent the input accurately enough so that it can be used for fluid dynamics and volume rendering work. The raytracing algorithm has to be implemented for the purpose of producing a set of arb8's that approximate the input accurately for the desired purpose. Finally, TCL binding has to be provided to connect mged editor to the functionality provided by the voxelize command.