BRL-CAD
defines.h
Go to the documentation of this file.
1
/* D E F I N E S . H
2
* BRL-CAD
3
*
4
* Copyright (c) 2004-2023 United States Government as represented by
5
* the U.S. Army Research Laboratory.
6
*
7
* This library is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public License
9
* version 2.1 as published by the Free Software Foundation.
10
*
11
* This library is distributed in the hope that it will be useful, but
12
* WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with this file; see the file named COPYING for more
18
* information.
19
*/
20
21
/*----------------------------------------------------------------------*/
22
/** @addtogroup nmg_defines
23
* @brief
24
* Common definitions for the headers used in nmg.h (i.e. the headers found in include/nmg)
25
*
26
* * NOTE: We rely on the fact that the first 32 bits in a struct is the
27
* magic number (which is used to identify the struct type). This may
28
* be either a magic value, or an rt_list structure, which starts with
29
* a magic number.
30
*
31
* To these ends, there is a standard ordering for fields in
32
* "object-use" structures. That ordering is:
33
*
34
* 1) magic number, or rt_list structure
35
* 2) pointer to parent
36
* 5) pointer to mate
37
* 6) pointer to geometry
38
* 7) pointer to attributes
39
* 8) pointer to child(ren)
40
*/
41
/** @{ */
42
/** @file nmg/defines.h */
43
44
#ifndef NMG_DEFINES_H
45
#define NMG_DEFINES_H
46
47
#include "
common.h
"
48
49
#ifndef NMG_EXPORT
50
# if defined(NMG_DLL_EXPORTS) && defined(NMG_DLL_IMPORTS)
51
# error "Only NMG_DLL_EXPORTS or NMG_DLL_IMPORTS can be defined, not both."
52
# elif defined(NMG_DLL_EXPORTS)
53
# define NMG_EXPORT COMPILER_DLLEXPORT
54
# elif defined(NMG_DLL_IMPORTS)
55
# define NMG_EXPORT COMPILER_DLLIMPORT
56
# else
57
# define NMG_EXPORT
58
# endif
59
#endif
60
61
/* Boolean operations */
62
#define NMG_BOOL_SUB 1
/**< @brief subtraction */
63
#define NMG_BOOL_ADD 2
/**< @brief addition/union */
64
#define NMG_BOOL_ISECT 4
/**< @brief intersection */
65
66
/* Boolean classifications */
67
#define NMG_CLASS_Unknown -1
68
#define NMG_CLASS_AinB 0
69
#define NMG_CLASS_AonBshared 1
70
#define NMG_CLASS_AonBanti 2
71
#define NMG_CLASS_AoutB 3
72
#define NMG_CLASS_BinA 4
73
#define NMG_CLASS_BonAshared 5
74
#define NMG_CLASS_BonAanti 6
75
#define NMG_CLASS_BoutA 7
76
77
/* orientations available. All topological elements are orientable. */
78
#define OT_NONE 0
/**< @brief no orientation (error) */
79
#define OT_SAME 1
/**< @brief orientation same */
80
#define OT_OPPOSITE 2
/**< @brief orientation opposite */
81
#define OT_UNSPEC 3
/**< @brief orientation unspecified */
82
#define OT_BOOLPLACE 4
/**< @brief object is intermediate data for boolean ops */
83
84
/** values for the "allhits" argument to mg_class_pt_fu_except() */
85
#define NMG_FPI_FIRST 0
/**< @brief return after finding first
86
* touch
87
*/
88
#define NMG_FPI_PERGEOM 1
/**< @brief find all touches, call
89
* user funcs once for each geometry
90
* element touched.
91
*/
92
#define NMG_FPI_PERUSE 2
/**< @brief find all touches, call
93
* user funcs once for each use of
94
* geom elements touched.
95
*/
96
97
/**
98
* storage allocation/deallocation support
99
*/
100
#define NMG_GETSTRUCT(p, str) p = (struct str *)bu_calloc(1, sizeof(struct str), "NMG_GETSTRUCT"
)
101
#define NMG_FREESTRUCT(p, str) bu_free(p, "NMG_FREESTRUCT"
)
102
#define NMG_ALLOC(_ptr, _type) _ptr = (_type *)bu_calloc(1, sizeof(_type), #_type " (NMG_ALLOC) "
CPP_FILELINE)
103
104
/**
105
* macros to check/validate a structure pointer
106
*/
107
#define NMG_CKMAG(_ptr, _magic, _str) BU_CKMAG(_ptr, _magic, _str)
108
#define NMG_CK2MAG(_ptr, _magic1, _magic2, _str) \
109
if (!(_ptr) || (*((uint32_t *)(_ptr)) != (_magic1) && *((uint32_t *)(_ptr)) != (_magic2))) { \
110
bu_badmagic((uint32_t *)(_ptr), _magic1, _str, __FILE__, __LINE__); \
111
}
112
113
#define NMG_CK_LIST(_p) BU_CKMAG(_p, BU_LIST_HEAD_MAGIC, "bu_list"
)
114
#define NMG_CK_RADIAL(_p) NMG_CKMAG(_p, NMG_RADIAL_MAGIC, "nmg_radial"
)
115
#define NMG_CK_INTER_STRUCT(_p) NMG_CKMAG(_p, NMG_INTER_STRUCT_MAGIC, "nmg_inter_struct"
)
116
117
/*
118
* Macros to create and destroy storage for the NMG data structures.
119
* Since nmg_mk.c and g_nmg.c are the only source file which should
120
* perform these most fundamental operations, the macros do not belong
121
* in nmg.h In particular, application code should NEVER do these
122
* things. Any need to do so should be handled by extending nmg_mk.c
123
*/
124
#define NMG_INCR_INDEX(_p, _m) \
125
NMG_CK_MODEL(_m); (_p)->index = ((_m)->maxindex)++
126
127
128
#endif
/* NMG_DEFINES_H */
129
/** @} */
130
/*
131
* Local Variables:
132
* mode: C
133
* tab-width: 8
134
* indent-tabs-mode: t
135
* c-file-style: "stroustrup"
136
* End:
137
* ex: shiftwidth=4 tabstop=8
138
*/
common.h
Header file for the BRL-CAD common definitions.
include
nmg
defines.h
Generated on Tue Mar 7 2023 23:41:50 for BRL-CAD by
1.9.3