nmg.h File Reference

Definition of data structures for "Non-Manifold Geometry Modelling." Developed from "Non-Manifold Geometric Boundary Modeling" by Kevin Weiler, 5/7/87 (SIGGraph 1989 Course #20 Notes). More...

#include "common.h"
#include "rtlist.h"
#include "bu.h"
#include "machine.h"
#include "vmath.h"

Include dependency graph for nmg.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  knot_vector
 Definition of a knot vector. More...
struct  model
struct  nmgregion
struct  nmgregion_a
struct  shell
struct  shell_a
struct  face
struct  face_g_plane
struct  face_g_snurb
struct  faceuse
struct  loop
struct  loop_g
struct  loopuse
struct  edge
struct  edge_g_lseg
struct  edge_g_cnurb
struct  edgeuse
struct  vertex
struct  vertex_g
struct  vertexuse
struct  vertexuse_a_plane
struct  vertexuse_a_cnurb
struct  nmg_boolstruct
struct  nmg_struct_counts
struct  nmg_visit_handlers

Defines

#define NMG_H   seen
#define NMG_EXTERN(type_and_name, args)   RT_EXTERN(type_and_name,args)
#define DEBUG_PL_ANIM   0x00000001
 1 mged: animated evaluation
#define DEBUG_PL_SLOW   0x00000002
 2 mged: add delays to animation
#define DEBUG_GRAPHCL   0x00000004
 3 mged: graphic classification
#define DEBUG_PL_LOOP   0x00000008
 4 loop class (needs GRAPHCL)
#define DEBUG_PLOTEM   0x00000010
 5 make plots in debugged routines (needs other flags set too)
#define DEBUG_POLYSECT   0x00000020
 6 nmg_inter: face intersection
#define DEBUG_VERIFY   0x00000040
 7 nmg_vshell() frequently, verify health
#define DEBUG_BOOL   0x00000080
 8 nmg_bool:
#define DEBUG_CLASSIFY   0x00000100
 9 nmg_class:
#define DEBUG_BOOLEVAL   0x00000200
 10 nmg_eval: what to retain
#define DEBUG_BASIC   0x00000400
 013 nmg_mk.c and nmg_mod.c routines
#define DEBUG_MESH   0x00000800
 12 nmg_mesh: describe edge search
#define DEBUG_MESH_EU   0x00001000
 13 nmg_mesh: list edges meshed
#define DEBUG_POLYTO   0x00002000
 14 nmg_misc: polytonmg
#define DEBUG_LABEL_PTS   0x00004000
 15 label points in plot files
#define DEBUG_NMGRT   0x00010000
 17 ray tracing
#define DEBUG_FINDEU   0x00020000
 18 nmg_mod: nmg_findeu()
#define DEBUG_CMFACE   0x00040000
 19 nmg_mod: nmg_cmface()
#define DEBUG_CUTLOOP   0x00080000
 024 nmg_mod: nmg_cut_loop
#define DEBUG_VU_SORT   0x00100000
 025 nmg_fcut: coincident vu sort
#define DEBUG_FCUT   0x00200000
 026 nmg_fcut: face cutter
#define DEBUG_RT_SEGS   0x00400000
 027 nmg_rt_segs:
#define DEBUG_RT_ISECT   0x00800000
 028 nmg_rt_isect:
#define DEBUG_TRI   0x01000000
 029 nmg_tri
#define DEBUG_PT_FU   0x02000000
 029 nmg_pt_fu
#define DEBUG_MANIF   0x04000000
 029 nmg_manif
#define NMG_DEBUG_FORMAT   "\020\033MANIF\032PTFU\031TRIANG\030RT_ISECT\\027RT_SEGS\026FCUT\025VU_SORT\024CUTLOOP\023CMFACE\022FINDEU\021RT_ISECT\020(FREE)\\017LABEL_PTS\016POLYTO\015MESH_EU\014MESH\013BASIC\012BOOLEVAL\011CLASSIFY\\010BOOL\7VERIFY\6POLYSECT\5PLOTEM\4PL_LOOP\3GRAPHCL\2PL_SLOW\1PL_ANIM"
#define NMG_ARGS(args)   ()
#define NMG_BOOL_SUB   1
 subtraction
#define NMG_BOOL_ADD   2
 addition/union
#define NMG_BOOL_ISECT   4
 intsersection
#define NMG_CLASS_Unknown   -1
#define NMG_CLASS_AinB   0
#define NMG_CLASS_AonBshared   1
#define NMG_CLASS_AonBanti   2
#define NMG_CLASS_AoutB   3
#define NMG_CLASS_BinA   4
#define NMG_CLASS_BonAshared   5
#define NMG_CLASS_BonAanti   6
#define NMG_CLASS_BoutA   7
#define OT_NONE   0
 no orientation (error)
#define OT_SAME   1
 orientation same
#define OT_OPPOSITE   2
 orientation opposite
#define OT_UNSPEC   3
 orientation unspecified
#define OT_BOOLPLACE   4
 object is intermediate data for boolean ops
#define NMG_MODEL_MAGIC   0x12121212
#define NMG_REGION_MAGIC   0x23232323
#define NMG_REGION_A_MAGIC   0x696e6720
#define NMG_SHELL_MAGIC   0x71077345
 shell oil
#define NMG_SHELL_A_MAGIC   0x65207761
#define NMG_FACE_MAGIC   0x45454545
#define NMG_FACE_G_PLANE_MAGIC   0x726b6e65
#define NMG_FACE_G_SNURB_MAGIC   0x736e7262
 was RT_SNURB_MAGIC
#define NMG_FACEUSE_MAGIC   0x56565656
#define NMG_LOOP_MAGIC   0x67676767
#define NMG_LOOP_G_MAGIC   0x6420224c
#define NMG_LOOPUSE_MAGIC   0x78787878
#define NMG_EDGE_MAGIC   0x33333333
#define NMG_EDGE_G_LSEG_MAGIC   0x6c696768
#define NMG_EDGE_G_CNURB_MAGIC   0x636e7262
 was RT_CNURB_MAGIC
#define NMG_EDGEUSE_MAGIC   0x90909090
#define NMG_EDGEUSE2_MAGIC   0x91919191
 used in eu->l2.magic
#define NMG_VERTEX_MAGIC   0x00123123
#define NMG_VERTEX_G_MAGIC   0x72737707
#define NMG_VERTEXUSE_MAGIC   0x12341234
#define NMG_VERTEXUSE_A_PLANE_MAGIC   0x69676874
#define NMG_VERTEXUSE_A_CNURB_MAGIC   0x20416e64
#define NMG_KNOT_VECTOR_MAGIC   0x6b6e6f74
 aka RT_KNOT_VECTOR_MAGIC
#define NMG_CKMAG(_ptr, _magic, _str)   BU_CKMAG(_ptr,_magic,_str)
#define NMG_CK2MAG(_ptr, _magic1, _magic2, _str)
#define NMG_CK_MODEL(_p)   NMG_CKMAG(_p, NMG_MODEL_MAGIC, "model")
#define NMG_CK_REGION(_p)   NMG_CKMAG(_p, NMG_REGION_MAGIC, "region")
#define NMG_CK_REGION_A(_p)   NMG_CKMAG(_p, NMG_REGION_A_MAGIC, "region_a")
#define NMG_CK_SHELL(_p)   NMG_CKMAG(_p, NMG_SHELL_MAGIC, "shell")
#define NMG_CK_SHELL_A(_p)   NMG_CKMAG(_p, NMG_SHELL_A_MAGIC, "shell_a")
#define NMG_CK_FACE(_p)   NMG_CKMAG(_p, NMG_FACE_MAGIC, "face")
#define NMG_CK_FACE_G_PLANE(_p)   NMG_CKMAG(_p, NMG_FACE_G_PLANE_MAGIC, "face_g_plane")
#define NMG_CK_FACE_G_SNURB(_p)   NMG_CKMAG(_p, NMG_FACE_G_SNURB_MAGIC, "face_g_snurb")
#define NMG_CK_FACE_G_EITHER(_p)   NMG_CK2MAG(_p, NMG_FACE_G_PLANE_MAGIC, NMG_FACE_G_SNURB_MAGIC, "face_g_plane|face_g_snurb")
#define NMG_CK_FACEUSE(_p)   NMG_CKMAG(_p, NMG_FACEUSE_MAGIC, "faceuse")
#define NMG_CK_LOOP(_p)   NMG_CKMAG(_p, NMG_LOOP_MAGIC, "loop")
#define NMG_CK_LOOP_G(_p)   NMG_CKMAG(_p, NMG_LOOP_G_MAGIC, "loop_g")
#define NMG_CK_LOOPUSE(_p)   NMG_CKMAG(_p, NMG_LOOPUSE_MAGIC, "loopuse")
#define NMG_CK_EDGE(_p)   NMG_CKMAG(_p, NMG_EDGE_MAGIC, "edge")
#define NMG_CK_EDGE_G_LSEG(_p)   NMG_CKMAG(_p, NMG_EDGE_G_LSEG_MAGIC, "edge_g_lseg")
#define NMG_CK_EDGE_G_CNURB(_p)   NMG_CKMAG(_p, NMG_EDGE_G_CNURB_MAGIC, "edge_g_cnurb")
#define NMG_CK_EDGE_G_EITHER(_p)   NMG_CK2MAG(_p, NMG_EDGE_G_LSEG_MAGIC, NMG_EDGE_G_CNURB_MAGIC, "edge_g_lseg|edge_g_cnurb")
#define NMG_CK_EDGEUSE(_p)   NMG_CKMAG(_p, NMG_EDGEUSE_MAGIC, "edgeuse")
#define NMG_CK_VERTEX(_p)   NMG_CKMAG(_p, NMG_VERTEX_MAGIC, "vertex")
#define NMG_CK_VERTEX_G(_p)   NMG_CKMAG(_p, NMG_VERTEX_G_MAGIC, "vertex_g")
#define NMG_CK_VERTEXUSE(_p)   NMG_CKMAG(_p, NMG_VERTEXUSE_MAGIC, "vertexuse")
#define NMG_CK_VERTEXUSE_A_PLANE(_p)   NMG_CKMAG(_p, NMG_VERTEXUSE_A_PLANE_MAGIC, "vertexuse_a_plane")
#define NMG_CK_VERTEXUSE_A_CNURB(_p)   NMG_CKMAG(_p, NMG_VERTEXUSE_A_CNURB_MAGIC, "vertexuse_a_cnurb")
#define NMG_CK_VERTEXUSE_A_EITHER(_p)   NMG_CK2MAG(_p, NMG_VERTEXUSE_A_PLANE_MAGIC, NMG_VERTEXUSE_A_CNURB_MAGIC, "vertexuse_a_plane|vertexuse_a_cnurb")
#define NMG_CK_LIST(_p)   BU_CKMAG(_p, BU_LIST_HEAD_MAGIC, "bu_list")
#define NMG_TEST_EDGEUSE(_p)
#define RT_KNOT_VECTOR_MAGIC   NMG_KNOT_VECTOR_MAGIC
 nurb.h compat
#define NMG_GET_FU_NORMAL(_N, _fu)
#define NMG_GET_FU_PLANE(_N, _fu)
#define RT_LIST_SET_DOWN_TO_VERT(_hp, _vu)
#define NMG_GETSTRUCT(p, str)   BU_GETSTRUCT(p,str)
#define NMG_FREESTRUCT(ptr, str)
#define NMG_INCR_INDEX(_p, _m)   NMG_CK_MODEL(_m); (_p)->index = ((_m)->maxindex)++
#define GET_REGION(p, m)   {NMG_GETSTRUCT(p, nmgregion); NMG_INCR_INDEX(p,m);}
#define GET_REGION_A(p, m)   {NMG_GETSTRUCT(p, nmgregion_a); NMG_INCR_INDEX(p,m);}
#define GET_SHELL(p, m)   {NMG_GETSTRUCT(p, shell); NMG_INCR_INDEX(p,m);}
#define GET_SHELL_A(p, m)   {NMG_GETSTRUCT(p, shell_a); NMG_INCR_INDEX(p,m);}
#define GET_FACE(p, m)   {NMG_GETSTRUCT(p, face); NMG_INCR_INDEX(p,m);}
#define GET_FACE_G_PLANE(p, m)   {NMG_GETSTRUCT(p, face_g_plane); NMG_INCR_INDEX(p,m);}
#define GET_FACE_G_SNURB(p, m)   {NMG_GETSTRUCT(p, face_g_snurb); NMG_INCR_INDEX(p,m);}
#define GET_FACEUSE(p, m)   {NMG_GETSTRUCT(p, faceuse); NMG_INCR_INDEX(p,m);}
#define GET_LOOP(p, m)   {NMG_GETSTRUCT(p, loop); NMG_INCR_INDEX(p,m);}
#define GET_LOOP_G(p, m)   {NMG_GETSTRUCT(p, loop_g); NMG_INCR_INDEX(p,m);}
#define GET_LOOPUSE(p, m)   {NMG_GETSTRUCT(p, loopuse); NMG_INCR_INDEX(p,m);}
#define GET_EDGE(p, m)   {NMG_GETSTRUCT(p, edge); NMG_INCR_INDEX(p,m);}
#define GET_EDGE_G_LSEG(p, m)   {NMG_GETSTRUCT(p, edge_g_lseg); NMG_INCR_INDEX(p,m);}
#define GET_EDGE_G_CNURB(p, m)   {NMG_GETSTRUCT(p, edge_g_cnurb); NMG_INCR_INDEX(p,m);}
#define GET_EDGEUSE(p, m)   {NMG_GETSTRUCT(p, edgeuse); NMG_INCR_INDEX(p,m);}
#define GET_VERTEX(p, m)   {NMG_GETSTRUCT(p, vertex); NMG_INCR_INDEX(p,m);}
#define GET_VERTEX_G(p, m)   {NMG_GETSTRUCT(p, vertex_g); NMG_INCR_INDEX(p,m);}
#define GET_VERTEXUSE(p, m)   {NMG_GETSTRUCT(p, vertexuse); NMG_INCR_INDEX(p,m);}
#define GET_VERTEXUSE_A_PLANE(p, m)   {NMG_GETSTRUCT(p, vertexuse_a_plane); NMG_INCR_INDEX(p,m);}
#define GET_VERTEXUSE_A_CNURB(p, m)   {NMG_GETSTRUCT(p, vertexuse_a_cnurb); NMG_INCR_INDEX(p,m);}
#define FREE_MODEL(p)   NMG_FREESTRUCT(p, model)
#define FREE_REGION(p)   NMG_FREESTRUCT(p, nmgregion)
#define FREE_REGION_A(p)   NMG_FREESTRUCT(p, nmgregion_a)
#define FREE_SHELL(p)   NMG_FREESTRUCT(p, shell)
#define FREE_SHELL_A(p)   NMG_FREESTRUCT(p, shell_a)
#define FREE_FACE(p)   NMG_FREESTRUCT(p, face)
#define FREE_FACE_G_PLANE(p)   NMG_FREESTRUCT(p, face_g_plane)
#define FREE_FACE_G_SNURB(p)   NMG_FREESTRUCT(p, face_g_snurb)
#define FREE_FACEUSE(p)   NMG_FREESTRUCT(p, faceuse)
#define FREE_LOOP(p)   NMG_FREESTRUCT(p, loop)
#define FREE_LOOP_G(p)   NMG_FREESTRUCT(p, loop_g)
#define FREE_LOOPUSE(p)   NMG_FREESTRUCT(p, loopuse)
#define FREE_LOOPUSE_A(p)   NMG_FREESTRUCT(p, loopuse_a)
#define FREE_EDGE(p)   NMG_FREESTRUCT(p, edge)
#define FREE_EDGE_G_LSEG(p)   NMG_FREESTRUCT(p, edge_g_lseg)
#define FREE_EDGE_G_CNURB(p)   NMG_FREESTRUCT(p, edge_g_cnurb)
#define FREE_EDGEUSE(p)   NMG_FREESTRUCT(p, edgeuse)
#define FREE_VERTEX(p)   NMG_FREESTRUCT(p, vertex)
#define FREE_VERTEX_G(p)   NMG_FREESTRUCT(p, vertex_g)
#define FREE_VERTEXUSE(p)   NMG_FREESTRUCT(p, vertexuse)
#define FREE_VERTEXUSE_A_PLANE(p)   NMG_FREESTRUCT(p, vertexuse_a_plane)
#define FREE_VERTEXUSE_A_CNURB(p)   NMG_FREESTRUCT(p, vertexuse_a_cnurb)
#define NMG_ARE_EUS_ADJACENT(_eu1, _eu2)
#define EDGESADJ(_e1, _e2)   NMG_ARE_EUS_ADJACENT(_e1,_e2)
#define PLPRINT(_s, _pl)
#define NMG_FPI_FIRST   0
 return after finding first touch
#define NMG_FPI_PERGEOM   1
 find all touches, call user funcs once for each geometry element touched
#define NMG_FPI_PERUSE   2
 find all touches, call user funcs once for each use of geom elements touched
#define PREEXIST   1
#define NEWEXIST   2
#define VU_PREEXISTS(_bs, _vu)
#define VU_NEW(_bs, _vu)
#define NMG_INDEX_VALUE(_tab, _index)   ((_tab)[_index])
#define NMG_INDEX_TEST(_tab, _p)   ( (_tab)[(_p)->index] )
#define NMG_INDEX_SET(_tab, _p)   {(_tab)[(_p)->index] = 1;}
#define NMG_INDEX_CLEAR(_tab, _p)   {(_tab)[(_p)->index] = 0;}
#define NMG_INDEX_TEST_AND_SET(_tab, _p)   ( (_tab)[(_p)->index] == 0 ? ((_tab)[(_p)->index] = 1) : 0 )
#define NMG_INDEX_IS_SET(_tab, _p)   NMG_INDEX_TEST(_tab,_p)
#define NMG_INDEX_FIRST_TIME(_tab, _p)   NMG_INDEX_TEST_AND_SET(_tab,_p)
#define NMG_INDEX_ASSIGN(_tab, _p, _val)   {(_tab)[(_p)->index] = _val;}
#define NMG_INDEX_GET(_tab, _p)   ((_tab)[(_p)->index])
#define NMG_INDEX_GETP(_ty, _tab, _p)   ((struct _ty *)((_tab)[(_p)->index]))
#define NMG_INDEX_OR(_tab, _p, _val)   {(_tab)[(_p)->index] |= _val;}
#define NMG_INDEX_AND(_tab, _p, _val)   {(_tab)[(_p)->index] &= _val;}
#define NMG_INDEX_RETURN_IF_SET_ELSE_SET(_tab, _index)
#define NMG_3MANIFOLD   16
#define NMG_2MANIFOLD   4
#define NMG_1MANIFOLD   2
#define NMG_0MANIFOLD   1
#define NMG_SET_MANIFOLD(_t, _p, _v)   NMG_INDEX_OR(_t, _p, _v)
#define NMG_MANIFOLDS(_t, _p)   NMG_INDEX_VALUE(_t, (_p)->index)
#define NMG_CP_MANIFOLD(_t, _p, _q)   (_t)[(_p)->index] = (_t)[(_q)->index]
#define NMG_VLIST_STYLE_VECTOR   0
#define NMG_VLIST_STYLE_POLYGON   1
#define NMG_VLIST_STYLE_VISUALIZE_NORMALS   2
#define NMG_VLIST_STYLE_USE_VU_NORMALS   4
#define NMG_VLIST_STYLE_NO_SURFACES   8


Detailed Description

Definition of data structures for "Non-Manifold Geometry Modelling." Developed from "Non-Manifold Geometric Boundary Modeling" by Kevin Weiler, 5/7/87 (SIGGraph 1989 Course #20 Notes).

Author:
Lee A. Butler

Michael John Muuss

Source
The U. S. Army Research Laboratory
Aberdeen Proving Ground, Maryland 21005-5066
Include Sequencing - # include <stdio.h> # include <math.h> # include "machine.h" /_* For fastf_t definition on this machine *_/ # include "vmath.h" /_* For vect_t definition *_/ # include "rtlist.h" /_* OPTIONAL, auto-included by raytrace.h *_/ # include "rtstring.h" /_* OPTIONAL, auto-included by raytrace.h *_/ # include "nmg.h" # include "raytrace.h" # include "nurb.h" /_* OPTIONAL, follows raytrace.h when used *_/

Libraries Used -
LIBRT LIBRT_LIBES -lm -lc
Header
/cvsroot/brlcad/brlcad/include/nmg.h,v 14.10 2006/09/18 05:24:07 lbutler Exp

Definition in file nmg.h.


Generated on Mon Sep 18 01:25:00 2006 for BRL-CAD by  doxygen 1.4.6