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 QHash
es 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::References
Parse
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 QgConsole
xlibqtcad
libqtcad
xlibqtcad
xQWidget
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 ChangeSignalHandler
s 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 CommandString
x, but my solution was not good enough, so my mentor Daniel Rossberg took care of it by implementing CompleteCommand
and CompleteObject
QWidget
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#69ChangeSignalHandler
s 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#71ObjectTreeItem
s were not inheriting the parent color#70 to PR#70