
Tips on how to read the logs:
In the “PRs” section you will find all the pull requests (PRs) related to my Google Summer of Code 2025 project.
In the “Logs” section instead you will find what I worked on each day. Most of the features/bugs I worked on each day are underlined and have a superscript number #n. This number is equivalent to the id of the PR that contains the underlined features/bugs. This was done to show in which PR my work went each day.
If the superscript number is x, it means that the feature that I worked on was discarded etiher to focus on more important features or because my idea/approach was wrong.
using directives in header files, in order to do fix the error rpcndr.h: 'byte': ambiguous symbol when building on WindowsQt Style Sheet “arbalest_simple.qss” to appear the same way on Windows and Linux.ObjectTree, which was based on QHashes that connect an id to one of the geometry object properties, with a new ObjectTree, in which a single QHash connects an id to an actual object that contains all the properties of a geometry objectQWidget Console, heavily based on libqtcad’s QgConsole, but without having direct connections to BRL-CAD’s internal libraries, and connecting instead only to MOOSE functionsObjectTreeWidget in order to handle non-existent geometry objectsObjectTree that allow it to update itself when a GED command that modified the geometry database was executedObjectTreeWidget to fix a segmentation fault that occurred when an object was selected (a consequence of the modifications made to ObjectTree)databaseChangeHandler to support the new ChangeType::ReferencesParse method (which handles the execution of GED commands) so that it returns additional information about the execution resultChangeSignalHandler callback function so that one of its arguments is the name of the object that triggered the callback, instead of a reference to the actual object. This avoids issues related to referencing a not-fully-constructed objectQt6OpenGLWidgets). Although, I spotted a bug that can be easily solved: when compiling arbalest, I got the error rpcndr.h: 'byte': ambiguous symbol (this is a known issue with Windows headers). To fix it, I simply removed the using namespace std; in Utils.h, and I then changed all the few instances where this statement was meaningful by manually adding std::#59QgConsole (in libqtcad)xlibqtcad’s QgConsolexlibqtcadlibqtcadxlibqtcadxQWidget side of the CLI#67libqtcad is implemented as deeply as possible, in order to understand how it can be connect with MOOSE and arbalestlibqtcad library works, focusing on understanding if it is possible to use its contents for arbalestlibqtcad library to MOOSE. This is because there is no way to connect them while preserving the main idea behind MOOSE, that is to be “a thin layer on top of BRL-CAD’s core libraries”. Maybe directly accessing the libqtcad library from arbalest could be a good temporary solution?ObjectTree class#66, which handles the creation of a tree data structure that represents the opened database. The ObjectTree needs to be improved to support the GED commands that the new CLI will executeQgConsole defined inside libqtcad will be used to create the actual QWidget console)libged (some GED commands do not work with “in-memory databases” yet, as they are a recent addition). In the mean time, I tried to see if implementing the QgConsole (defined inside libqtcad) directly into arbalest (without passing through MOOSE) would make sense, but it doesn’tx. This means that there is no way to reuse the already created QgConsole: a new Console QWidget specific for arbalest needs to be created.ObjectTree class#66. Finding a lot of issues to fix. The main one is having a way of knowing which objects in the database were added/modified/killed by a CLI command, without having to rewrite a GED parserdbi_changed_clbks() (a librt method that calls a specified function when an object in the database changes). These features will be implemented by my mentor Daniel RossbergObjectTree class, so that it can support many situations that are now buggy#66 (eg: killed objects inside a database, combinations that reference items that do not exists)ObjectTree so that now, instead of using a bunch of hashmaps and sets to represent all the items of the tree, it uses the 2 classes ObjectTreeItem (used for items in the tree) and ObjectTreeItemData (used for objects in the database)#66. Now the ObjectTree is clearer and more efficientObjectTree can store about the database objects, so that it can support killed objects and combinations that reference non-existent object in the database#66 (and, maybe in the future, support more advanced features)ObjectTree significantly#66. My calculations, from a pool of 39 generic databases, show that the new building time decreased by around 66.4% (by 24.3% in the worst case, and by 97.8% in the best case)ObjectTree to the actual GUI widgets#66ObjectTree builds, how it works, and how it connects to the GUI (used the ObjectTreeWidget as an example)#66ObjectTree#66, and pushed these changes to the PR#66ObjectTree gets changed, and update the GUI accordingly#69. My mentor Daniel Rossberg finished implementing ChangeSignalHandlers inside of MOOSE, which are a way to define a callback function that will be called after an object in the database is changed (it uses librt’s dbi_changed_clbks())QgConsole, and started making some modifications to adapt it to arbalest and MOOSE#67QWidget#67Database (the one of the currently active Document)#67QStyleSheet, events, how the results of commands are printed in the console)ged_cmd_completions() and ged_geom_completions() into CommandStringx, but my solution was not good enough, so my mentor Daniel Rossberg took care of it by implementing CompleteCommand and CompleteObjectQWidget for a CLI. The console is a simplified clone of QgConsole, the console defined in libqtcad and used by qged. It uses MOOSE instead of calling BRL-CAD’s libraries directly, and it supports command completion, geometry object names completion, and obviously the execution of commands#67CommandString module, that enables Parse() to give more information regarding the execution of a GED command#3. Added license, copyright notice and support for multi inputs commands#67 to PR#67ChangeSignalHandler#69 (added to MOOSE previously by my mentors), in order to update the GUI when the database gets changed.ChangeSignalHandler#69. Also had a discussion with my mentors regarding PR#3ObjectTree#66ObjectTreeWidget#68ChangeSignalHandler to the new ObjectTree#69ChangeSignalHandler, particularly regarding the usage of rt_db_get_internal() inside a callback function. My mentors suggest that maybe ChangeSignalHandler should take const char* objectName as an argument instead of const Object& object (to avoid getting the reference of a non-existent object). PR#3 got merged!Parse() new additional information causing problems with the execution of certain commandsx, but my solution was way too farfetched, and could have been solved in a much simpler way. My mentors took care of the issue instead. Made some adjustments to the console to adapt to the fixes made to MOOSE’s Parse()#67 in PR#67ChangeSignalHandler, particularly regarding the usage of rt_db_get_internal() inside a callback function (these other issue is better described in this message). To fix this and the previous issues I opened PR#5, which changes ChangeSignalHandler argument const Object& object to const char* objectName (to avoid getting the reference of a non-existent object)#5. PR#5 got merged!ObjectTreeWidget#68. Opened PR#68updateObjectTree() method that enables the ObjectTree to update itself, after a ChangeSignalHandler callback is called#69ChangeSignalHandlers to ObjectTree, so that now updateObjectTree() will be called if the database changed#69killrefs), it is also necessary to make it so that ChangeSignalHandler should be called when a “reference” changes (meaning a combination reference) through the db_add_update_nref_clbk() function. This will be handled by my mentorsupdateObjectTree() method#69updateObjectTree() method#69 (lot of stuff in the GUI still needs to be fixed, in order to support this new command). Opened PR#69ObjectTreeWidget, to support the updates done to ObjectTree#70. PR#69 got merged!ObjectTreeWidget#70ObjectTreeWidget, fixing also other parts of the GUI (eg: Properties)#70. Opened PR#70. Opened PR#71 that adds support for ChangeType::References (added by Daniel Rossberg), to update the ObjectTree only when necessary#71ObjectTreeItems were not inheriting the parent color#70 to PR#70