IMP
2.0.0
The Integrative Modeling Platform
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
geometric_primitive_macros.h
Go to the documentation of this file.
1
/**
2
* \file IMP/algebra/geometric_primitive_macros.h
3
* \brief Various important macros
4
* for implementing geometry.
5
*
6
* Copyright 2007-2013 IMP Inventors. All rights reserved.
7
*
8
*/
9
10
#ifndef IMPALGEBRA_GEOMETRIC_PRIMITIVE_MACROS_H
11
#define IMPALGEBRA_GEOMETRIC_PRIMITIVE_MACROS_H
12
13
14
//! implement the needed namespace methods for a geometry type
15
/** These are
16
- IMP::algebra::get_surface_area()
17
- IMP::algebra::get_volume()
18
- IMP::algebra::get_bounding_box()
19
- output to a stream
20
21
The name of the argument is g and the code snipets should return
22
the expected value.
23
*/
24
#define IMP_VOLUME_GEOMETRY_METHODS(Name, name, area, volume, bounding_box) \
25
IMP_VALUES(Name, Name##s); \
26
/** \relates Name */
\
27
inline double get_surface_area(const Name &g) { \
28
area; \
29
} \
30
/** \relates Name */
\
31
inline double get_volume(const Name &g) { \
32
volume; \
33
} \
34
/** \relates Name */
\
35
inline BoundingBoxD<3> get_bounding_box(const Name &g) { \
36
bounding_box; \
37
} \
38
/** \relates Name */
\
39
inline const Name &get_##name##_geometry(const Name &g) {return g;} \
40
/** \relates Name */
\
41
IMP_NO_SWIG(inline void set_##name##_geometry(Name &g, const Name &v) {g=v;})
42
43
//! implement the needed namespace methods for a geometry type
44
/** These are
45
- IMP::algebra::get_surface_area()
46
- IMP::algebra::get_volume()
47
- IMP::algebra::get_bounding_box()
48
- output to a stream
49
50
The name of the argument is g and the code snipets should return
51
the expected value.
52
*/
53
#define IMP_VOLUME_GEOMETRY_METHODS_D(Name, name, area, volume, bounding_box) \
54
/** \relates Name */
\
55
inline double get_surface_area(const Name##D<3> &g) { \
56
area; \
57
} \
58
/** \relates Name */
\
59
inline double get_volume(const Name##D<3> &g) { \
60
volume; \
61
} \
62
/** \relates Name */
\
63
template <int D> \
64
inline BoundingBoxD<D> get_bounding_box(const Name##D<D> &g) { \
65
bounding_box; \
66
} \
67
/** \relates Name */
\
68
IMP_NO_SWIG(template <int D> \
69
inline void set_##name##_d_geometry(Name##D<D> &g, \
70
const Name##D<D> &v) { \
71
g=v; \
72
} \
73
/** \relates Name */
\
74
template <int D> \
75
inline const Name##D<D> &get_##name##_d_geometry(const Name##D<D> &g) { \
76
return g; \
77
}) \
78
/** Typedef for python. */
\
79
typedef Name##D<1> Name##1D; \
80
IMP_VALUES(Name##1D, Name##1Ds); \
81
/** Typedef for python. */
\
82
typedef Name##D<2> Name##2D; \
83
IMP_VALUES(Name##2D, Name##2Ds); \
84
/** Typedef for python. */
\
85
typedef Name##D<3> Name##3D; \
86
IMP_VALUES(Name##3D, Name##3Ds); \
87
/** Typedef for python. */
\
88
typedef Name##D<4> Name##4D; \
89
IMP_VALUES(Name##4D, Name##4Ds); \
90
/** Typedef for python. */
\
91
typedef Name##D<5> Name##5D; \
92
IMP_VALUES(Name##5D, Name##5Ds); \
93
/** Typedef for python. */
\
94
typedef Name##D<6> Name##6D; \
95
IMP_VALUES(Name##6D, Name##6Ds); \
96
/** Typedef for python. */
\
97
typedef Name##D<-1> Name##KD; \
98
IMP_VALUES(Name##KD, Name##KDs)
99
100
101
//! implement the needed namespace methods for a geometry type
102
/** These are
103
- IMP::algebra::get_bounding_box()
104
- output to a stream
105
106
The name should not include the D.
107
108
The name of the argument is g and the code snipets should return
109
the expected value.
110
*/
111
#define IMP_LINEAR_GEOMETRY_METHODS(Name, name, bounding_box) \
112
IMP_VALUES(Name, Name##s); \
113
/** \relates Name */
\
114
inline BoundingBoxD<3> get_bounding_box(const Name &g) { \
115
bounding_box; \
116
} \
117
/** \relates Name */
\
118
inline const Name &get_##name##_geometry(const Name &g) {return g;} \
119
IMP_NO_SWIG(inline void set_##name##_geometry( Name &g, const Name &gi)\
120
{g=gi;}) \
121
122
//! implement the needed namespace methods for a geometry type
123
/** These are
124
- IMP::algebra::get_surface_area()
125
- IMP::algebra::get_bounding_box()
126
- output to a stream
127
128
The name of the argument is g and the code snipets should return
129
the expected value.
130
*/
131
#define IMP_AREA_GEOMETRY_METHODS(Name, name, area, bounding_box) \
132
IMP_VALUES(Name, Name##s); \
133
/** \relates Name */
\
134
inline double get_area(const Name &g) { \
135
area; \
136
} \
137
/** \relates Name */
\
138
inline BoundingBoxD<3> get_bounding_box(const Name &g) { \
139
bounding_box; \
140
} \
141
/** \relates Name */
\
142
inline const Name &get_##name##_geometry(const Name &g) {return g;} \
143
/** \relates Name */
\
144
IMP_NO_SWIG(inline void set_##name##_geometry(Name &g, const Name &v) {g=v;})\
145
146
147
//! implement the needed namespace methods for a geometry type
148
/** These are
149
- IMP::algebra::get_surface_area()
150
- IMP::algebra::get_bounding_box()
151
- output to a stream
152
153
The name of the argument is g and the code snipets should return
154
the expected value.
155
*/
156
#define IMP_AREA_GEOMETRY_METHODS_D(Name, name, area, bounding_box) \
157
/** \relates Name */
\
158
template <int D> \
159
inline double get_area(const Name##D<D> &g) { \
160
area; \
161
} \
162
/** \relates Name */
\
163
template <int D> \
164
inline BoundingBoxD<D> get_bounding_box(const Name##D<D> &g) { \
165
bounding_box; \
166
} \
167
/** \relates Name */
\
168
template <int D> \
169
inline const Name &get_##name##_d_geometry(const Name##D<D> &g) { \
170
return g;} \
171
/** \relates Name */
\
172
IMP_NO_SWIG(template <int D> \
173
inline void set_##name##_d_geometry(Name &g, const Name##D<D> &v) { \
174
g=v;}) \
175
/** Typedef for python. */
\
176
typedef Name##D<1> Name##1D; \
177
IMP_VALUES(Name##1D, Name##1Ds); \
178
/** Typedef for python. */
\
179
typedef Name##D<2> Name##2D; \
180
IMP_VALUES(Name##2D, Name##2Ds); \
181
/** Typedef for python. */
\
182
typedef Name##D<3> Name##3D; \
183
IMP_VALUES(Name##3D, Name##3Ds); \
184
/** Typedef for python. */
\
185
typedef Name##D<4> Name##4D; \
186
IMP_VALUES(Name##4D, Name##4Ds); \
187
/** Typedef for python. */
\
188
typedef Name##D<5> Name##5D; \
189
IMP_VALUES(Name##5D, Name##5Ds); \
190
/** Typedef for python.*/
\
191
typedef Name##D<6> Name##6D; \
192
IMP_VALUES(Name##6D, Name##6Ds); \
193
/** Typedef for python. */
\
194
typedef Name##D<-1> Name##KD; \
195
IMP_VALUES(Name##KD, Name##KDs)
196
197
198
#endif
/* IMPALGEBRA_GEOMETRIC_PRIMITIVE_MACROS_H */