Kudos and thanks to Dave for taking the initiative. Great work, especially towards integrating the various efforts.
To affirm a few design intents and organizational motivations, the purpose and intent of the 'rt^3' module was (and still is) to be the foundation for a new "unified" framework that would sit on top of the "heart" of BRL-CAD -- i.e., all the code in the 'brlcad' module. Moreover, when the 'rt^3' module was started, we weren't putting C++ code into the 'brlcad' module and given the new unified framework's design was planned to be implemented OO/C++, it made (and still makes) sense to keep the work separate.
As for the suggested restructuring, the only issue I see is with the applications and the mix of conventions. For example, application-wise, I don't see a difference between the 'g3d' work and 'iBME' design and the original 'rt^3' effort. I don't think we should keep the original 'rt^3' name, though, and 'g3d' conflicts with the name of another popular project. So we can just call it iBME for now. But!...
This new integrated/unified environment is going to eventually be installed as the single application front to BRL-CAD, so it could also just be called 'BRL-CAD' or 'brlcad' as that is what the binary itself will eventually become.
All of the binaries and commands of functionality in the core module effectively become plugins and foundation for the new system.
Few other comments to think about (not all of which affect the restructure much):
* the 'date' directory is a build-system stamping tool (that applies to all products, not just GS). It was a means to guarantee that all application could accurately report their build date even through relinks. The 'brlcad' module does this much better.
* the 'lib' prefixes can go away. That's a mix of conventions -- the sub-functionality should 'em or not, but not mixed. Common practice for installed libraries to use that convention, but thus far the only library we're talking about keeping as an API is the GE (which may be a lib or collection of libs).
* 'coreInterface' is effectively a combination of what was libGeometry and libRaytrace. The Interface 'suffx' is implicit as part of the GE. Should probably become either 'Core' or 'Geometry' or simply be the contents of GE.
* interface and integration tests are relatively low-maintenance. comprehensive unit tests are very expensive. non-comprehensive unit tests tend to decay. GE public API could benefit greatly from unit tests. GS network protocol could benefit greatly from interface tests. GUIs tend to be pretty unstable for anything more than integration tests.
* cmake is good. Kudos to Ralith for fixing the 'brlcad' module pkg-config files and getting the new gui cmake build files to use it!
On Thursday, April 16, 2009, at 09:58AM, "David Loman" <dloman77@...> wrote:
>Ladies and Gents,
>I am in the process of trying to round up and organize the rt^3 module. It
>appears to me that there are three major ongoing efforts happening in
>parallel and with little to no communication with each other:
> Daniel's coreInterface work
> Manuel's GUI work
> My GE/GS work ( heh, attempts really )
> With GSoC starting soon (and me returning from Vacation) I realized that
>now is a perfect time to try to synchronize, standardize, and organize
>things a bit. So here is my proposal.
>I was tasked with bringing the concept of a Geometry Service and Geometry
>Engine from paper into reality. The Geometry Engine is to have all the
>functionality of the existing brlcad library suite and act as the C++ API
>for brlcad. The Geometry Service is designed to utilize the Geometry Engine
>while adding in Network capabilities, Access Controls and SVN repository
>functionality. The third piece to all of this is a 'thin' or 'dumb' client.
>After lengthy discussions with Sean, Erik and others in the office, it came
>to be apparent (to me) that the ultimate goal for the rt^3 is to be the
>'Next-Gen' brlcad and that my new tasking fits into that role. The terms
>'Integrated Brlcad Environment' and 'Brlcad Modeling Enviousness' were
>tossed around during that discussion and gave birth to my notion of an
>'Integrated Brlcad Modeling Environment' or 'iBME' (spoken I-Beam).
>Realistically speaking, there are no real reasons to use the term iBME over
>rt^3 other than the '^' is a pain to type and iBME has a modern(read
>trendy?) sound to it. :)
>According to the aggregated design, iBME/rt^3 consists of the three distinct
>products mentioned above: Geometry Engine (GE), Geometry Service (GS), and
>one or more GUIs/Thin Clients(TC). Following that, I propose the following
>source directory structure: (The include directories would be very similar)
>- - GUIs/
>- - - g3d/
>- - GE/
>- - - coreInterface/
>- - - date/
>- - - exception/
>- - - io/
>- - - libImage/
>- - - libNumeric/
>- - - libRaytrace/
>- - - libUtility/
>- - GS/
>- - - Jobs/
>- - - netMsgs/
>- - - netMsgActionDefs/
>- - - libNetwork/
>- - other/
>- - - rbgui/
>- - - mocha/
>- - - orge/
>- - - ois/
>- - - uuid/
>- - iBME/ (or rt3)
> I suggest removing the superceded_GS/ directory as it is no longer needed
>and the rt^3/, rt^3d,/ rt^3dbd/, and scratch/ directories as their
>functionality will be reproduced in the new rt3/ or iBME/ directory. I also
>see the GE/ and GS/ sub directories changing as all of our ideas merge.
>I would like to get moving on the re-org ASAP, preferably within the next
>3-4 days. Let me know what you all think.
> Other Discussion Points:
>-Should we implement unit testing? I say yes.
>-Should we switch over to CMake? I say yes, while things are still 'simple'.
>-We need to agree upon coding standards (aka hash out the Hacking doc)