Project proposal for Visualizing Constructive Solid Geometry, GSoC 2012
- 1 Personal information
- 2 Project information
- 3 Progress
- Name: Cristina Precup
- E-mail address: firstname.lastname@example.org
- IRC username: cristina
- I am in my third year as a student of Software Engineering at the Babeș-Bolyai University (Cluj-Napoca, Romania).
- A successful attendance in the GSoC 2011 during which I worked on the “Netgen: Constructive Solid Geometry in 2D” project for the TU Wien organization. The goal was to create an extension for the Netgen mesh generator that would allow the user to construct complex 2d shapes starting from some basic shapes, just by applying boolean operations over them. Apart from the implementation of geometric construction, there was also needed a parser for the input file format defined. The programming language used was C++ and for the geometric part the Open Cascade library. More information can be found on my wiki page
- Tags: C/C++, OpenCascade, Netgen, Doxygen
- Internship at National Instruments where I’ve developed an application that would process images in order to classify the objects in it and reconstruct a LabView schema
- Tags: C++, OpenCV, LabView
- For my thesis I am working on a scientific computing project developed in C++ as well. Staying in touch with the TU Wien organization made the possibility of developing my thesis in collaboration with the administrator of the organization.
- Tags: C++, Qt, ViennaGrid, ViennaSHE
Visualizing Constructive Solid Geometry (CSG)
Brief project summary
BRL-CAD already offers the possibility of generating geometry hierarchies corresponding to .g databases but this can be eventually interpreted just by 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 just by interacting with its displayed graph.
A hierarchy in Constructive Solid Geometry is shaped as a tree. But this is nothing but a directed acyclic graph and thus an automatic graph layout API would be useful for representing the structure of the .g databases.
The visual layout will be built with interactive Tcl/Tk widgets and will make use of graph algorithms to alter the graph structure as well as the .g geometry structure as the user modifies the visualized graph.
In the end, this graph based visualization should be part of mged and/or archer.
Detailed project description
In my opinion, this interactive graph editor would be very useful for the user. It would provide the ability to modify the .g geometry in a more intuitive, fast and user-friendly way. Moreover, construction flaws could be discovered by the representation of the CSG tree and imediately alter it.
Firstly, I'd extract the corresponding BRL-CAD's geometry hierarchy. After some familiarization with the part of the source code that concerns me, I've got an idea of where I should try to get this information from. There is this file,
which has methods that might be useful in accessing the boolean tree.
Secondly, I intend to format this data structure such that it can be fed to a graph layout API. Here I'm thinking of using the tool GOBLIN. It's a C++ class library which will help me in handling the boolean tree represented internally as a graph. Two of the file formats that it can import are Dimacs and Steinlib so I could format the geometry's boolean tree into one of these file formats. In this way, afterwards I could handle the graph. Another method of formatting the boolean tree would be to build the graph from scratch and then feed it to GOBLIN.
My Tcl/Tk lack of knowledge can be enriched within the next step in an effective way: GOBLIN has its GUI GOBLET that, among other things, it can be used to edit graphs. This could help me understand how the C++ data can be graphically represented with Tcl/Tk (the editor code for GOBLIN is written in the Tcl/Tk scripting language).
Further on, the output of the graph generator GOBLIN has to be used in the interactive visual layout. This will be implemented in Tcl/Tk and implies two phases:
- implement it as a stand-alone application
- hook it into mged and/or archer -> this needs advanced knowledge in using capabilities of mged/archer for their widgets
(A second approach was discussed about the implementation of the visual layout by using Qt. I chose to work with Tcl/Tk because althought I have to learn the capabilities of mged/archer, I can use them eventually in developing the graph editor.)
Actions of the user upon the boolean tree represented graphically include changing the location of a node in the graph, excluding nodes from the graph.
- To this part are to be added other actions available for the user.
- Mockups are to be included in a future version of the proposal.
Links to any code or algorithms I intend to use
- GOBLIN graph library:
- BRL-CAD mged/archer:
- source code repository: http://sourceforge.net/projects/brlcad/
- Feed the geometry hierarchy to GOBLIT
- Create the interactive visual layout for the boolean trees
- Eventually, hook it into mged/archer
- April 23 - May 20 (community bonding period)
- Decide how to extract the data about the geometry hierarchy
- Further study of the way in which I will represent the C++ data into Tcl/Tk graphics
- Further study of potential user actions for the interactive graph visualization tool
- Clarify the approach followed, the implementation needed to be done, and the future tasks
- May 21 - June 03 (coding period start)
- Extract BRL-CAD's geometry hierarchy
- June 04 - June 17
- Format the data extracted so that it can be fed to GOBLIT (either by implementing from scratch or using one of the two file formats Dimacs or Steinlib)
- June 18 - June 24
- wrap graph algorithms of GOBLIN needed for handling the boolean tree
- start representing the C++ data into Tcl/Tk graphics
- June 25 - July 12
- continue representing the transition from C++ data to Tcl/Tk graphics
- start working on the interactive capabilities of the visual layout
- July 13 - July 26
- continue working on the interactive side of the project
- study the hooking into mged/archer
- July 27 - August 17
- integrate the application into mged/archer
- bugs tracking: make sure that the work is flawless by testing and carefully checking if there are any errors
- document the source code
- August 18 - August 24
- buffer for unexpected delay
Describe time availability
I will dedicate 40 hours/week, but will be capable of expanding this limit.
Between June 11 and July 1 I will have my exams session. Although this represents an interval of three weeks, I have to take only three exams. Therefore, I will still have time available for maintaining the pace of the development.
Apart from this, sometime during my summer holiday (not necessarily during GSoC) I will have to participate in a three week internship (I have been in the same situation in the previous year, GSoC + a three week internship and I tackled the situation just fine). The problem with my university is that it won’t accept a GSoC participation as an internship so I need to participate in one separately. However, I will still consider GSoC as a primary focus because it is the most exciting thing for me. During these three weeks I could work up to 30 hours/week but, as I explained above, when in need I can invest a larger number of hours dedicated to work (this would be in order to compensate the ones lost during the internship).
I chose BRL-CAD because I think it's great to work on such a powerful Open Source modelling system.
The reason why I want to apply for the "Visualizing CSG" project is because I enjoyed working on the previous GSoC project which contributed in forming a CSG background. I am aware that it's not the type of knowledge mostly needed for this project but I hope that my C++ experience along with the desire to learn new interesting things (such as work with Tcl/Tk, GOBLIN, see how mged/archer are implemented) will suite the requirements for it.
Community bonding period
1. Compile & install BRL-CAD
I created my first patch for BRL-CAD by using the virtual machine disk image so now I want to compile and install BRL-CAD from source (from a svn checkout).
I've followed the instructions with respect to the dependencies (the ones from here http://brlcad.org/wiki/Compiling and from the doc/README.Linux). I've used the command
cmake -DCMAKE_BUILD_TYPE=Debug -DBRLCAD_BUNDLED_LIBS=Bundled .
but after using
, I kept getting these errors http://pastebin.mozilla.org/1602696.
Afterwards, I decided to try the command
cmake -DCMAKE_BUILD_TYPE=Debug .
but then I encountered another error while running it: http://pastebin.mozilla.org/1602697. I managed to solve the problem by installing itk3 and itk3-dev. However, while running the make command I bumped into the previously mentioned make errors and this one: http://pastebin.mozilla.org/1602700. The first ones refer to fontconfig symbols.