Difference between revisions of "User:Bhollister/Proposal"

From BRL-CAD
(GSoC 2015 Proposal)
 
Line 1: Line 1:
Currently being updated...
+
= Title =
 +
 
 +
Command-line Editing NMG and BoT Data-structures in BRL-CAD
 +
 
 +
= Abstract =
 +
 
 +
This project will expose some of the low-level NMG routines to a command-line interface. Users will be able to add and remove various parts of the NMG data structure, such as regions and shells, along with manipulation of vertices, edges, and faces. A similar set of command-lines will allow for manipulation of "Bag of Triangles" (BoT) data-structures. Users will see the results displayed in either MGED or Archer.
 +
 
 +
Additional info: http://people.ucsc.edu/~behollis/hollisterGSoC2015Revised2.pdf
 +
 
 +
= Benefits to BRL-CAD =
 +
BRL-CAD will gain a command-line interface for directly editing NMG / BoT data-
 +
structures via Archer. The new features will be:
 +
* Ability to select subsets of an NMG / BoT via the command-line.
 +
* Ability to add and remove elements of an NMG / BoT while still satisfying validity constraints through the command-line.
 +
* Ability to move parts of an NMG / BoT via the command-line.
 +
* Visual feedback in the geometry window.
 +
 
 +
= Deliverables =
 +
The implementation will consist of C code integrated with relevant modules
 +
(/librt/primitives/nmg/, etc.).
 +
 
 +
= Project Details =
 +
 
 +
The fundamental data-structure for boundary representation in BRL-CAD is
 +
the NMG. It is an implementation of a radial-edge data-structure and does
 +
not enforce manifold constraints on mesh data. Boolean operations are closed
 +
under the B-rep data type, thus making the NMG the preferred representation
 +
for BRL-CAD.
 +
The NMG Library Interface [1] is fundamental to the functionality proposed
 +
here. There are broad categories of function calls that allow a high-level manipulation of the NMG data-structure in BRL-CAD. The categories are:
 +
* CONSTRUCTION ROUTINES; for example: nmg mm(), nmg mmr()
 +
* DESTRUCTION ROUTINES; for example: nmg kill(), nmg kr()
 +
* MANIPULATION ROUTINES; for example: nmg face g(), nmg face bb()
 +
 
 +
The NMG data-structure hierarchically stores the mesh by: regions →
 +
shells → f aces → loops → edges → vertices. Access into the data-structure
 +
is provided by the high-level manipulation routines. For instance, when pro-
 +
viding the ability of a table edit to change a vertex position, it will be nec-
 +
essary to update the specific vertex in the table via the the nmg vertex gv()
 +
routine. This routine requires a pointer to the vertex struct in the NMG data-
 +
structure that represents the vertex. Other manipulation routines, such as
 +
nmg ck closed surf(), i.e. “Check for a Closed Surface,” provide tools to enforce
 +
various validation constraints.
 +
 
 +
The command-line functions will mirror the existing API, but expose as
 +
much as possible. The interface may borrow some from the Blender low-level
 +
API, using the following (see http://wiki.blender.org/index.php/Dev:2.
 +
6/Source/Modeling/BMesh/Design):
 +
* BM vert createkill: Make Vert and Kill Vert
 +
* BM edge createkill: Make Edge and Kill Edge
 +
* BM face createkill: Make Face and Kill Face
 +
* bmesh semvjekv: Split Edge, Make Vert and Join Edge, Kill Vert
 +
* bmesh sfmejfke: Split Face, Make Edge and Join Face, Kill Edge
 +
* bmesh loop reverse: Reverse the loop of a BMFace. Its own inverse
 +
 
 +
For roughly half of the summer, similar and appropriate command-line meth-
 +
ods will be implemented for the BoT data-structure as well.
 +
 
 +
= Project Schedule =
 +
 
 +
Milestones:
 +
* Week 1: Add placeholder commands by following example in commit 46507, which adds the exist command. Make sure that commands can be added and data is reflected internally.
 +
* Week 2: Identify ways of specifying to the command-line the parts of model to be changed. For example, how to specify a vertex to a command that removes a vertex and update the NMG model in the render window.
 +
* Week 3: Should be able to implement commands now. Allow two weeks to complete each type of command. Starting this week with NMG CONSTRUCTION ROUTINES.
 +
* Week 4: NMG - 2nd week for CONSTRUCTION ROUTINES.
 +
* Week 5: NMG - 1st week for DESTRUCTION ROUTINES.
 +
* Week 6: NMG - 2nd week for DESTRUCTION ROUTINES.
 +
* Week 7: NMG - 1st week for MANIPULATION ROUTINES.
 +
* Week 8: NMG - 2nd week for MANIPULATION ROUTINES.
 +
* Week 9: Start BoTs command-line command implementations. Starting this week with BoT CONSTRUCTION ROUTINES.
 +
* Week 10: BoT - 2nd week for CONSTRUCTION ROUTINES.
 +
* Week 11: BoT - 1st week for DESTRUCTION ROUTINES.
 +
* Week 12: BoT - 2nd week for DESTRUCTION ROUTINES
 +
* Week 13: BoT - 1st week for MANIPULATION ROUTINES.
 +
* Week 14: BoT - 2nd week for MANIPULATION ROUTINES. Final fixes and clean-up.

Revision as of 18:19, 22 May 2015

Title

Command-line Editing NMG and BoT Data-structures in BRL-CAD

Abstract

This project will expose some of the low-level NMG routines to a command-line interface. Users will be able to add and remove various parts of the NMG data structure, such as regions and shells, along with manipulation of vertices, edges, and faces. A similar set of command-lines will allow for manipulation of "Bag of Triangles" (BoT) data-structures. Users will see the results displayed in either MGED or Archer.

Additional info: http://people.ucsc.edu/~behollis/hollisterGSoC2015Revised2.pdf

Benefits to BRL-CAD

BRL-CAD will gain a command-line interface for directly editing NMG / BoT data- structures via Archer. The new features will be:

  • Ability to select subsets of an NMG / BoT via the command-line.
  • Ability to add and remove elements of an NMG / BoT while still satisfying validity constraints through the command-line.
  • Ability to move parts of an NMG / BoT via the command-line.
  • Visual feedback in the geometry window.

Deliverables

The implementation will consist of C code integrated with relevant modules (/librt/primitives/nmg/, etc.).

Project Details

The fundamental data-structure for boundary representation in BRL-CAD is the NMG. It is an implementation of a radial-edge data-structure and does not enforce manifold constraints on mesh data. Boolean operations are closed under the B-rep data type, thus making the NMG the preferred representation for BRL-CAD. The NMG Library Interface [1] is fundamental to the functionality proposed here. There are broad categories of function calls that allow a high-level manipulation of the NMG data-structure in BRL-CAD. The categories are:

  • CONSTRUCTION ROUTINES; for example: nmg mm(), nmg mmr()
  • DESTRUCTION ROUTINES; for example: nmg kill(), nmg kr()
  • MANIPULATION ROUTINES; for example: nmg face g(), nmg face bb()

The NMG data-structure hierarchically stores the mesh by: regions → shells → f aces → loops → edges → vertices. Access into the data-structure is provided by the high-level manipulation routines. For instance, when pro- viding the ability of a table edit to change a vertex position, it will be nec- essary to update the specific vertex in the table via the the nmg vertex gv() routine. This routine requires a pointer to the vertex struct in the NMG data- structure that represents the vertex. Other manipulation routines, such as nmg ck closed surf(), i.e. “Check for a Closed Surface,” provide tools to enforce various validation constraints.

The command-line functions will mirror the existing API, but expose as much as possible. The interface may borrow some from the Blender low-level API, using the following (see http://wiki.blender.org/index.php/Dev:2. 6/Source/Modeling/BMesh/Design):

  • BM vert createkill: Make Vert and Kill Vert
  • BM edge createkill: Make Edge and Kill Edge
  • BM face createkill: Make Face and Kill Face
  • bmesh semvjekv: Split Edge, Make Vert and Join Edge, Kill Vert
  • bmesh sfmejfke: Split Face, Make Edge and Join Face, Kill Edge
  • bmesh loop reverse: Reverse the loop of a BMFace. Its own inverse

For roughly half of the summer, similar and appropriate command-line meth- ods will be implemented for the BoT data-structure as well.

Project Schedule

Milestones:

  • Week 1: Add placeholder commands by following example in commit 46507, which adds the exist command. Make sure that commands can be added and data is reflected internally.
  • Week 2: Identify ways of specifying to the command-line the parts of model to be changed. For example, how to specify a vertex to a command that removes a vertex and update the NMG model in the render window.
  • Week 3: Should be able to implement commands now. Allow two weeks to complete each type of command. Starting this week with NMG CONSTRUCTION ROUTINES.
  • Week 4: NMG - 2nd week for CONSTRUCTION ROUTINES.
  • Week 5: NMG - 1st week for DESTRUCTION ROUTINES.
  • Week 6: NMG - 2nd week for DESTRUCTION ROUTINES.
  • Week 7: NMG - 1st week for MANIPULATION ROUTINES.
  • Week 8: NMG - 2nd week for MANIPULATION ROUTINES.
  • Week 9: Start BoTs command-line command implementations. Starting this week with BoT CONSTRUCTION ROUTINES.
  • Week 10: BoT - 2nd week for CONSTRUCTION ROUTINES.
  • Week 11: BoT - 1st week for DESTRUCTION ROUTINES.
  • Week 12: BoT - 2nd week for DESTRUCTION ROUTINES
  • Week 13: BoT - 1st week for MANIPULATION ROUTINES.
  • Week 14: BoT - 2nd week for MANIPULATION ROUTINES. Final fixes and clean-up.