00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192 #ifndef INC_MI32_RVCTIN_H
00193 #define INC_MI32_RVCTIN_H
00194
00195 #ifndef INC_MI32_RECT_H
00196 #include <mi32/rect.h>
00197 #endif
00198
00199
00201 struct RVCTINNODE : public DPOINT3D {
00202
00203 RVCTINNODE& operator= (
00204 const DPOINT3D& pt
00205 ) {
00206 *static_cast<DPOINT3D*>(this) = pt;
00207 return (*this);
00208 }
00209
00212 DRECT3D GetExtents (
00213 ) const { return (DRECT3D(*this)); }
00214
00215 bool IsValid (
00216 ) const { return (true); }
00217 };
00218
00220 struct RVCTINTRIANGLE {
00221 INT32 node1;
00222 INT32 node2;
00223 INT32 node3;
00224 INT32 triangle12;
00225 INT32 triangle23;
00226 INT32 triangle31;
00227 INT32 edge12;
00228 INT32 edge23;
00229 INT32 edge31;
00230 UINT8 edgeflags12;
00231 UINT8 edgeflags23;
00232 UINT8 edgeflags31;
00233 #ifndef GENERATING_DOXYGEN_OUTPUT
00234 UINT8 spare;
00235 #endif
00236
00237 bool IsValid (
00238 ) const { return (true); }
00239 };
00240
00242 struct RVCTINEDGE {
00243 INT32 nodefrom;
00244 INT32 nodeto;
00245 INT32 trileft;
00246 INT32 triright;
00247
00248 bool IsValid (
00249 ) const { return (true); }
00250 };
00251
00253 struct RVCTINHULL {
00254 DPOINT3D minval;
00255 DPOINT3D maxval;
00256 DOUBLE length;
00257 DOUBLE area;
00258 DOUBLE volume;
00259 DOUBLE zerolevel;
00260 INT32 exthull;
00261 UINT16 hulltype;
00262 UINT16 spare;
00263
00266 DRECT3D GetExtents (
00267 ) const {
00268 DRECT3D retval(minval);
00269 retval.Extend(maxval);
00270 return (retval);
00271 }
00272
00273 bool IsValid (
00274 ) const { return (true); }
00275
00277 void SetExtents (
00278 const DRECT3D& rect
00279 ) {
00280 minval.x = rect.xinit;
00281 minval.y = rect.yinit;
00282 minval.z = rect.zinit;
00283 maxval.x = rect.xlast;
00284 maxval.y = rect.ylast;
00285 maxval.z = rect.zlast;
00286 return;
00287 }
00288
00289 };
00290
00292 struct RVCTINHULLEDGE {
00293 INT32 nodefrom;
00294 INT32 trileft;
00295 };
00296
00297
00299 struct TRIANGLEREF {
00300 INT32 node1;
00301 INT32 node2;
00302 INT32 node3;
00303 INT32 triangle12;
00304 INT32 triangle23;
00305 INT32 triangle31;
00306 };
00307
00309 struct TRIANGLENODES {
00310 INT32 node1;
00311 INT32 node2;
00312 INT32 node3;
00313 UINT32 flags;
00314 };
00315
00317 struct TRIANGLEEDGES {
00318 INT32 edge1;
00319 INT32 edge2;
00320 INT32 edge3;
00321 UINT32 flags;
00322 };
00323
00325 struct TRIANGLETRIANGLES {
00326 INT32 triangle1;
00327 INT32 triangle2;
00328 INT32 triangle3;
00329 UINT32 flags;
00330 };
00331
00333 struct TRIANGLEINFO {
00334 INT32 node1;
00335 INT32 node2;
00336 INT32 node3;
00337 INT32 triangle12;
00338 INT32 triangle23;
00339 INT32 triangle31;
00340 INT32 edge12;
00341 INT32 edge23;
00342 INT32 edge31;
00343 UINT32 flags;
00344 };
00345
00347 struct EDGEINFO {
00348
00349 enum FLAG {
00350 FLAG_HardEdge = 0x00000001
00351 };
00352
00353 INT32 startnode;
00354 INT32 endnode;
00355 INT32 lefttriangle;
00356 INT32 righttriangle;
00357 UINT32 flags;
00358 };
00359
00361 #define TINEDGE_Hard 0x01
00362
00364 #define TINHULL_Convex 0
00365 #define TINHULL_Clip 1
00366 #define TINHULL_Exclude 2
00367
00368 #if defined(__cplusplus)
00369 extern "C" {
00370 #endif
00371
00372 #ifdef GEOMDLL
00373 #define GEOMLIBEXPORT MI_DLLEXPORT
00374 #else
00375 #define GEOMLIBEXPORT MI_DLLIMPORT
00376 #endif
00377
00386 GEOMLIBEXPORT int DelaunayProc (
00387 DPOINT3D **Nodes,
00388 TRIANGLEREF **Triangles,
00389 RVCTINHULLEDGE **Con,
00390 RVCTINHULL *HullInfo,
00391 INT32 *NumNodes,
00392 INT32 *NumTriangles,
00393 INT32 *NumHullEdges,
00394 double Tolerance
00395 );
00396
00400 GEOMLIBEXPORT int Delaunay3D (
00401 DPOINT3D **Nodes,
00402 TRIANGLEREF **Triangles,
00403 INT32 *NumNodes,
00404 INT32 *NumTriangles,
00405 double Tolerance
00406 );
00407
00408 #undef GEOMLIBEXPORT
00409
00410 #if defined(__cplusplus)
00411 }
00412 #endif
00413
00414 #endif // #ifndef INC_MI32_RVCTIN_H
00415