BRL-CAD

Basic NMG structural hierarchy definitions, including the necessary geometric definitions. More...

Collaboration diagram for Topology:

Files

file  topology.h
 

Data Structures

struct  vertex
 NMG topological vertex - the simplest element of the topology system. More...
 
struct  vertexuse
 NMG topological vertex usage. More...
 
struct  edge
 NMG topological edge. More...
 
struct  edgeuse
 NMG topological edge usage. More...
 
struct  loop
 NMG topological loop. More...
 
struct  loopuse
 NMG topological loop usage. More...
 
struct  face
 NMG topological face. More...
 
struct  faceuse
 NMG topological face usage. More...
 
struct  shell
 NMG topological shell. More...
 
struct  nmgregion
 NMG topological region. More...
 
struct  model
 NMG topological model. More...
 
struct  vertex_g
 Point in 3D space. More...
 
struct  edge_g_lseg
 Line in 3D space. More...
 
struct  face_g_plane
 Planar face geometry. More...
 
struct  knot_vector
 Definition of a knot vector. More...
 
struct  edge_g_cnurb
 Edge NURBS curve geometry. More...
 
struct  face_g_snurb
 Face NURBS surface geometry. More...
 
struct  vertexuse_a_plane
 Vertexuse normal. More...
 
struct  vertexuse_a_cnurb
 Vertexuse NURBS parameters. More...
 
struct  loop_a
 Loop bounding box. More...
 
struct  shell_a
 Shell bounding box. More...
 
struct  nmgregion_a
 Region bounding box. More...
 

Detailed Description

Basic NMG structural hierarchy definitions, including the necessary geometric definitions.

This is the interconnected hierarchical data scheme proposed by Weiler and documented by Muuss and Butler in: Combinatorial Solid Geometry, Boundary Representations, and Non-Manifold Geometry, State of the Art in Computer Graphics: Visualization and Modeling D. F. Rogers, R. A. Earnshaw editors, Springer-Verlag, New York, 1991, pages 185-223: https://ftp.arl.army.mil/~mike/papers/90nmg/joined.html

Because of the interconnectedness of these containers, they are defined together rather than in separate headers - all of the "use" containers need to know about other use container types, as seen in Figure 4 from the Muuss/Butler paper:

Model
  |
Region
  |
Shell
||||
|||*--> Faceuse <--------> Face
|||          |
||*---> Loopuse <--------> Loop
||      |    |
|*------|--> Edgeuse <---> Edge
|       |    |
|       *--> Vertexuse <-> Vertex
*------------^

Each element has a direct connection to its parent and child types. The elements are defined thusly:

The "use" notation refers to a conceptual separation between an entity and a reference to that entity. For example, a face has two sides - each of those sides is individually referenced by a "use" of the underlying face data structure, with the faceuse adding additional information to identify the specific side associated with that particular application of the underlying face data.