Difference between revisions of "Geometry Viewer Application for BRL-CAD"

From BRL-CAD
(Task list)
(Identify .g headers)
Line 43: Line 43:
 
; 4. Create application interface with model file:
 
; 4. Create application interface with model file:
 
* Create input interface to parse “.g” 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.
 +
<source lang="bash">
 +
hexdump -C build/share/db/wave.g | head
 +
00000000  76 01 00 00 00 00 01 35  76 02 00 00 00 00 0a 00  |v......5v.......|
 +
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 +
*
 +
00000050  00 00 00 00 00 00 00 35  76 02 00 00 00 00 02 00  |.......5v.......|
 +
00000060  00 00 00 00 00 00 00 35  76 20 00 20 01 04 1a 06  |.......5v . ....|
 +
 +
 +
00000070  62 61 73 65 31 00 c0 40  82 c0 00 00 00 00 00 c0  |base1..@........|
 +
</source>
 +
 +
The next step is to simply use fread() and read this file into a buffer. The file can be identified with these bytes.
 +
 
* Create output interface to parse output from libdm.  
 
* Create output interface to parse output from libdm.  
 
; 5. Develop front end
 
; 5. Develop front end

Revision as of 22:43, 15 June 2016

European Summer of Code 2016

Mentor: Christopher Sean Morrison

Student: Asad

This document lists down the design for the project. This includes the major milestones and deadlines. Prettier Version


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:

Figure 1. BRL-CAD data flow structure

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.

Task list

1. Evaluate technology to be used
  • Develop initial project design draft
  • Setup development environment
  • Evaluate programming language choice (C decided, for GUI may use some Python)
2. Evaluate and look into current viewer applications
  • Mged / archer
  • Isst, it doesn’t use libdm.
  • Geometry viewer [1]
3. Create application interface to brlcad libraries [2]
  • Interface with librt
  • 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. <source lang="bash"> hexdump -C build/share/db/wave.g | head 00000000 76 01 00 00 00 00 01 35 76 02 00 00 00 00 0a 00 |v......5v.......| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

00000050 00 00 00 00 00 00 00 35 76 02 00 00 00 00 02 00 |.......5v.......| 00000060 00 00 00 00 00 00 00 35 76 20 00 20 01 04 1a 06 |.......5v . ....|


00000070 62 61 73 65 31 00 c0 40 82 c0 00 00 00 00 00 c0 |base1..@........| </source>

The next step is to simply use fread() and read this file into a buffer. The file can be identified with these bytes.

  • 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.
  • The source will be upload on: [3]
  • There will also be occasional weekly status meetings on irc #brlcad (Fridays 16:00 GMT+2)


References

[4] [5] [6]