Contents

Outline

The idea is to build a geometry viewer application that generates a standalone double-clickable file that views a given model. The approach is to concatenate the contents of a given “.g” file with the function calls from librt, libdm that parse and display a “.g” file, in a standard brlcad setup.

Our motivation is to introduce portability and ability to share results of brlcad via email with users who don’t have brlcad setup in their environments. First we will develop a standalone application but later this can be integrated into mged or any other tool as a brlcad feature.

Task Breakdown

The brlcad suite has many tools and libraries that interact with each other to render and view models. The general architecture is given below:

The most important part for us out of this architecture is the geometry rendering libraries, to be more specific librt & libdm.

• Librt, the library that contains all of the geometry support. It parses the “.g” file and its function calls can be used to extract contents of “g” file. We will use this to parse our model file for Libdm. The relevant function call is “db_open”. There is also possibility to use a higher level library “libged” (ged_open)

• Libdm is BRL-CAD's primary graphics display manager (dm) library. It is used to display geometry in GUI. This will be utilized by our source to visualize model files.

This resulting draw result will then be bundled into an “.exe” (windows) and later into packages for Mac & Linux.

Librt is used to open brlcad geometry files and edit them. It reads a .g file by calling the function db_open and populates a db_i structure. To view the geometry files we need Libdm which takes this db_i structure as input to do so.

This commit takes a .g file and calls the db_open function from within the viewer application. Right now it just prints out a single value from the populated structure.

An example is already available that shows the usage of db_open. We are utilizing the skeleton of this example to populate the struct db_i.

Interface with libdm

4. Create application interface with model file

Create input interface to parse “.g” file

We need to read the binary ".g" file and concatenate it with our program. The first step is to identify the .g files from their file header. Using the hexdump command it is confirmed that all " .g" files have first 40 bytes common.

The commit, simply reads a file into a buffer and prints out its contents. Our interest is in the header bits of the file i.e., the bits that start with 7601...., these will help us identify the start of a ".g" file later.

Create output interface to parse output from libdm.

5. Develop front end

Develop Single window view

Develop File Input

6. Write Functional testing test cases.

Project Workflow

This design document will be updated regularly to include the status of tasks as well as any changes in project scope and/or approach.