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 #ifndef __LowSolid_h
00043 #define __LowSolid_h
00044
00045 #ifndef __HieGroup_h
00046 #include "hiegroup.h"
00047 #endif
00048
00049
00050
00051 #ifndef EXTERN
00052 #ifdef _DVS_
00053 #define EXTERN
00054 #else
00055 #define EXTERN extern
00056 #endif
00057 #endif
00058
00059 #define GRAVIDADE 9.8
00060
00061
00062
00063 #ifndef __double_real
00064 #define __double_real
00065 typedef double real;
00066 #endif
00067 #ifndef __double_vector
00068 #define __double_vector
00069 typedef real vector[4];
00070 #endif
00071 #ifndef __double_vect2
00072 #define __double_vect2
00073 typedef real vect2[3];
00074 #endif
00075 #ifndef __double_matrix
00076 #define __double_matrix
00077 typedef real matrix[4][4];
00078 #endif
00079 #ifdef __curved_env__
00080 #ifndef __surface1_SUSURF
00081 #define __surface1_SUSURF
00082 typedef struct surface SSURF;
00083 #endif
00084 #ifndef __curve1_CUCURV
00085 #define __curve1_CUCURV
00086 typedef struct curve CURVE;
00087 #endif
00088 #endif
00089 #ifndef __int_id
00090 #define __int_id
00091 typedef int Id;
00092 #endif
00093 #ifndef __struct_eulerop
00094 #define __struct_eulerop
00095 typedef struct eulerop EulerOp;
00096 #endif
00097 #ifndef __struct_axistp
00098 #define __struct_axistp
00099 typedef struct axistp ATYPE;
00100 #endif
00101 #ifndef __struct_grouptp
00102 #define __struct_grouptp
00103 typedef struct grouptp GTYPE;
00104 #endif
00105 #ifndef __struct_cameratp
00106 #define __struct_cameratp
00107 typedef struct cameratp CTYPE;
00108 #endif
00109
00110
00111
00112 #ifndef __struct_solid
00113 #define __struct_solid
00114 typedef struct solid STYPE;
00115 #endif
00116 #ifndef __struct_shell
00117 #define __struct_shell
00118 typedef struct shell DTYPE;
00119 #endif
00120 #ifndef __struct_face
00121 #define __struct_face
00122 typedef struct face FTYPE;
00123 #endif
00124 #ifndef __struct_loop
00125 #define __struct_loop
00126 typedef struct loop LTYPE;
00127 #endif
00128 #ifndef __struct_halfedge
00129 #define __struct_halfedge
00130 typedef struct halfedge HTYPE;
00131 #endif
00132 #ifndef __struct_vertex
00133 #define __struct_vertex
00134 typedef struct vertex VTYPE;
00135 #endif
00136 #ifndef __struct_edge
00137 #define __struct_edge
00138 typedef struct edge ETYPE;
00139 #endif
00140 #ifndef __struct_box
00141 #define __struct_box
00142 typedef struct box BTYPE;
00143 #endif
00144 typedef struct eulerco EulerCo;
00145 typedef union nodes NTYPE;
00146
00147 #ifdef __ROV__
00148 EXTERN real densifluido;
00149 #endif
00150
00151 struct box
00152 {
00153 vector max;
00154 vector min;
00155 };
00156
00157 struct eulerco
00158 {
00159 int shelln;
00160 int facen;
00161 int ringn;
00162 int edgen;
00163 int vertexn;
00164 int holen;
00165 };
00166
00167 struct solid
00168 {
00169 Id solidno;
00170 char name[20];
00171
00172 #ifdef __ROV__
00173 real densrel;
00174 real densabs;
00175 real areaproj;
00176 vector PrincDir;
00177 int type;
00178 int geometria;
00179 int fronteira;
00180 int bareaproj;
00181 real param1;
00182 real param2;
00183 real param3;
00184 real param4;
00185 vector center;
00186 real aux;
00187 int pos;
00188 Id corte;
00189 #endif
00190
00191 SPTYPE nxt;
00192 SPTYPE prevs;
00193 DPTYPE sshells;
00194 GPTYPE group;
00195 APTYPE oaxs;
00196 BTYPE box;
00197 short sbits;
00198 EulerCo eucoef;
00199 char dsp;
00200 int color;
00201
00202 #ifdef __curved_env__
00203 CURVE *scurvs;
00204 #endif
00205 };
00206
00207 struct shell
00208 {
00209 Id shellno;
00210 DPTYPE nextd;
00211 DPTYPE prevd;
00212 SPTYPE ssolids;
00213 FPTYPE sfaces;
00214 EPTYPE sedges;
00215 VPTYPE sverts;
00216 BTYPE box;
00217 short dbits;
00218 int color;
00219 };
00220
00221 struct face
00222 {
00223 Id faceno;
00224 DPTYPE fshell;
00225 FPTYPE nextf;
00226 FPTYPE prevf;
00227 LPTYPE flout;
00228 LPTYPE floops;
00229 vector feq;
00230 BTYPE box;
00231 short fbits;
00232 char fvisi;
00233 int color;
00234 int flag;
00235 };
00236
00237 struct loop
00238 {
00239 Id loopno;
00240 FPTYPE lface;
00241 LPTYPE nextl;
00242 LPTYPE prevl;
00243 HPTYPE ledg;
00244 short length;
00245 };
00246
00247 struct edge
00248 {
00249 Id edgeno;
00250 EPTYPE nexte;
00251 EPTYPE preve;
00252 HPTYPE he1;
00253 HPTYPE he2;
00254 real angle;
00255 char evis;
00256 char eclp;
00257 vector svclp3;
00258 vector evclp3;
00259 vect2 svclp2;
00260 vect2 evclp2;
00261 int color;
00262
00263 #ifdef __curved_env__
00264 int fg_round;
00265 int fg_make;
00266 real t1;
00267 real t2;
00268 real t3;
00269 real t4;
00270 real d;
00271 #endif
00272 };
00273
00274 struct halfedge
00275 {
00276 LPTYPE wloop;
00277 EPTYPE edg;
00278 HPTYPE nxt;
00279 HPTYPE prv;
00280 VPTYPE vtx;
00281 #ifdef __VIRTUAL_MEM
00282 HPTYPE nexth;
00283 #endif
00284 #ifdef __curved_env__
00285 CURVE *curv;
00286 real r;
00287 #endif
00288 };
00289
00290 struct vertex
00291 {
00292 Id vertexno;
00293 HPTYPE vedge;
00294 VPTYPE nextv;
00295 VPTYPE prevv;
00296 int fg_round;
00297 int fg_make;
00298 vector vcoord;
00299 };
00300
00301 union nodes
00302 {
00303 STYPE s;
00304 DTYPE d;
00305 FTYPE f;
00306 LTYPE l;
00307 ETYPE e;
00308 HTYPE h;
00309 VTYPE v;
00310 BTYPE b;
00311 ATYPE a;
00312 GTYPE g;
00313 };
00314
00315 EXTERN int maxs;
00316 EXTERN Id maxf;
00317 EXTERN Id maxv;
00318 EXTERN Id maxd;
00319 EXTERN int error;
00320 EXTERN VPTYPE hitvertex;
00321 EXTERN HPTYPE hithe;
00322 EXTERN SPTYPE objary;
00323 EXTERN int SetTrace;
00324 EXTERN int objused;
00325 EXTERN int facused;
00326 EXTERN int looused;
00327 EXTERN int edgused;
00328 EXTERN int vtxused;
00329 EXTERN long defonum;
00330
00331
00332 void MSD_lowAddList(int what, NPTYPE which, NPTYPE where);
00333 void MSD_lowDelList(int what, NPTYPE which, NPTYPE where);
00334
00335
00336 HPTYPE MSD_lowAddHE(EPTYPE e, VPTYPE v, HPTYPE where, int orient);
00337 HPTYPE MSD_lowDelHE(HPTYPE he);
00338
00339
00340 void MSD_lowSolidBoxFromBoxes(SPTYPE s, BTYPE *b);
00341 int MSD_lowEdgeBoxIntersection(BTYPE *b, EPTYPE e);
00342 int MSD_lowEdgeBoxIntersectionAux(real x1, real x2, real bx1, real bx2);
00343 int MSD_lowBoxBoxIntersection(BTYPE *b1, BTYPE *b2);
00344 int MSD_lowVertexInBox(BTYPE *b, real x, real y, real z);
00345 void MSD_lowSolidBox(SPTYPE s, BTYPE *bx);
00346 void MSD_lowShellBox(DPTYPE d);
00347 void MSD_lowFaceBox(FPTYPE f);
00348 void MSD_lowEdgeBox(BTYPE *b, EPTYPE e);
00349 void MSD_lowEvaluateSolidBoxes(SPTYPE s);
00350 void MSD_lowWidenBox(BTYPE *b, real eps);
00351 void MSD_lowUpdateBox(BTYPE *b1, BTYPE *b);
00352 void MSD_lowTranslatedBox(BTYPE *b, real dx, real dy, real dz);
00353 void MSD_lowUpdateDEBox(void);
00354
00355
00356 void MSD_execTrace(void);
00357 int TraceBoundaryStructure(void);
00358 int TraceSolid(SPTYPE s);
00359 int checkf(SPTYPE s);
00360 int findhes(DPTYPE d, HPTYPE he);
00361 int checke(SPTYPE s);
00362 int findhe(HPTYPE he, LPTYPE l);
00363 int findes(DPTYPE d, EPTYPE e);
00364 int findl(LPTYPE l, FPTYPE f);
00365 int finde(VPTYPE v, HPTYPE he);
00366 int findf(DPTYPE d, FPTYPE f);
00367 int findd(SPTYPE s, DPTYPE d);
00368 int findv(DPTYPE d, VPTYPE v);
00369 int checkv(SPTYPE s);
00370
00371
00372 int MSD_lowFaceEq(LPTYPE l, vector eq);
00373
00374
00375 SPTYPE MSD_lowFindSolidByName(char *name);
00376 Id MSD_getSolidIdFromName(char *name);
00377 SPTYPE MSD_getSolid(Id sn);
00378 DPTYPE MSD_getShell(SPTYPE s, Id dn);
00379 LPTYPE MSD_getLoop(FPTYPE f, Id vn, HPTYPE *h);
00380 LPTYPE MSD_getEdge(FPTYPE f, Id v1, Id v2, HPTYPE *ptr);
00381 LPTYPE MSD_getHalfedge(FPTYPE f1, FPTYPE f2, Id v1, Id v2, HPTYPE *ptr);
00382 FPTYPE MSD_getFace(SPTYPE s, Id fn);
00383 Id MSD_getMaxSolidId(void);
00384 Id MSD_getMaxShellId(SPTYPE s);
00385 Id MSD_getMaxFaceId(SPTYPE s);
00386 Id MSD_getMaxVertexId(SPTYPE s);
00387
00388
00389 void MSD_lowSetInfo(SPTYPE optr);
00390 void MSD_lowSetLoopEdge(SPTYPE optr);
00391 void MSD_lowCountFaceEdges(SPTYPE optr);
00392
00393
00394 void MSD_execListSolid(void);
00395 int MSD_highListSolid(Id sn, int sw);
00396 void MSD_lowListSolid(FILE *file, SPTYPE s, int sw);
00397 void MSD_lowListFace(FILE *file, FPTYPE f, int sw);
00398
00399
00400 NPTYPE MSD_lowNewElement(int what, NPTYPE where);
00401 void MSD_lowDelElement(int what, NPTYPE node, NPTYPE where);
00402 int bytesused(SPTYPE s);
00403
00404
00405 void MSD_execNameAffine(void);
00406 int MSD_highNameAffine(char *name, real a11, real a12, real a13, \
00407 real a21, real a22, real a23, \
00408 real a31, real a32, real a33, \
00409 real xc, real yc, real zc);
00410 void MSD_execAffine(void);
00411 int MSD_highAffine(Id sn, real a11, real a12, real a13, \
00412 real a21, real a22, real a23, \
00413 real a31, real a32, real a33, \
00414 real xc, real yc, real zc);
00415 int MSD_lowAffine(SPTYPE sptr, vector center, matrix mat);
00416
00417
00418 void MSD_execNameTransformation(void);
00419
00420 int MSD_highNameTransformation(char *name, matrix);
00421 void MSD_execTransformation(void);
00422
00423 int MSD_highTransformation(Id sn, matrix);
00424 void MSD_lowTransformation(SPTYPE s, matrix);
00425 int MSD_execStructTransformation(EulerOp *op);
00426 void MSD_printStructTransformation(FILE *f, EulerOp *op);
00427 int MSD_readStructTransformation(FILE *f, EulerOp *op);
00428 int MSD_modifyStructTransformation(EulerOp *op);
00429
00430
00431 void MSD_execNameRotate(void);
00432 int MSD_highNameRotate(char *name, real tx, real ty, real tz);
00433 void MSD_execRotate(void);
00434 int MSD_highRotate(Id sn, real tx, real ty, real tz);
00435 void MSD_lowRotate(SPTYPE s, real tx, real ty, real tz);
00436 int MSD_execStructRotate(EulerOp *op);
00437 void MSD_printStructRotate(FILE *f, EulerOp *op);
00438 int MSD_readStructRotate(FILE *f, EulerOp *op);
00439 int MSD_modifyStructRotate(EulerOp *op);
00440
00441
00442 void MSD_execNameRotateSolidAxis(void);
00443 int MSD_highNameRotateSolidAxis(char *name, real x1, real y1, real z1, \
00444 real x2, real y2, real z2, \
00445 real th);
00446 void MSD_execRotateSolidAxis(void);
00447 int MSD_highRotateSolidAxis(Id sn, real x1, real y1, real z1, \
00448 real x2, real y2, real z2, real th);
00449 int MSD_lowRotateSolidAxis(SPTYPE sptr, vector center, vector axis, real th);
00450
00451
00452 void MSD_execNameScale(void);
00453 int MSD_highNameScale(char *name, real tx, real ty, real tz);
00454 void MSD_execScale(void);
00455 int MSD_highScale(Id sn, real tx, real ty, real tz);
00456 void MSD_lowScale(SPTYPE s, real tx, real ty, real tz);
00457 int MSD_execStructScale(EulerOp *op);
00458 void MSD_printStructScale(FILE *f, EulerOp *op);
00459 int MSD_readStructScale(FILE *f, EulerOp *op);
00460 int MSD_modifyStructScale(EulerOp *op);
00461
00462
00463 void MSD_execNameTranslate(void);
00464 int MSD_highNameTranslate(char *name, real tx, real ty, real tz);
00465 void MSD_execTranslate(void);
00466 int MSD_highTranslate(Id sn, real tx, real ty, real tz);
00467 void MSD_lowTranslate(SPTYPE s, real tx, real ty, real tz);
00468 int MSD_execStructTranslate(EulerOp *op);
00469 void MSD_printStructTranslate(FILE *f, EulerOp *op);
00470 int MSD_readStructTranslate(FILE *f, EulerOp *op);
00471 int MSD_modifyStructTranslate(EulerOp *op);
00472
00473 #endif