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 __HieGroup_h
00043 #define __HieGroup_h
00044
00045 #include <stdio.h>
00046
00047 #ifndef EXTERN
00048 #ifdef _DVS_
00049 #define EXTERN
00050 #else
00051 #define EXTERN extern
00052 #endif
00053 #endif
00054
00055 extern char *x_malloc(unsigned int a);
00056 extern char *x_calloc(unsigned int a, unsigned int b);
00057 extern char x_free(char *a);
00058
00059 #ifndef __double_real
00060 #define __double_real
00061 typedef double real;
00062 #endif
00063 #ifndef __double_matrix
00064 #define __double_matrix
00065 typedef real matrix[4][4];
00066 #endif
00067 #ifndef __int_id
00068 #define __int_id
00069 typedef int Id;
00070 #endif
00071 #ifndef __double_vector
00072 #define __double_vector
00073 typedef real vector[4];
00074 #endif
00075 #ifndef __struct_solid
00076 #define __struct_solid
00077 typedef struct solid STYPE;
00078 #endif
00079 #ifndef __struct_face
00080 #define __struct_face
00081 typedef struct face FTYPE;
00082 #endif
00083 #ifndef __struct_loop
00084 #define __struct_loop
00085 typedef struct loop LTYPE;
00086 #endif
00087 #ifndef __struct_edge
00088 #define __struct_edge
00089 typedef struct edge ETYPE;
00090 #endif
00091 #ifndef __struct_halfedge
00092 #define __struct_halfedge
00093 typedef struct halfedge HTYPE;
00094 #endif
00095 #ifndef __struct_vertex
00096 #define __struct_vertex
00097 typedef struct vertex VTYPE;
00098 #endif
00099 #ifndef __struct_axistp
00100 #define __struct_axistp
00101 typedef struct axistp ATYPE;
00102 #endif
00103 #ifndef __struct_grouptp
00104 #define __struct_grouptp
00105 typedef struct grouptp GTYPE;
00106 #endif
00107 #ifndef __struct_eulerop
00108 #define __struct_eulerop
00109 typedef struct eulerop EulerOp;
00110 #endif
00111
00112 typedef union hierarq QTYPE;
00113
00114 struct grouptp
00115 {
00116 Id groupno;
00117 char gname[18];
00118 GPTYPE parent;
00119 APTYPE gaxs;
00120 GPTYPE nextg;
00121 GPTYPE prevg;
00122 int gcolor;
00123 };
00124
00125 union hierarq
00126 {
00127 GPTYPE agroup;
00128 SPTYPE asolid;
00129 };
00130
00131 struct axistp
00132 {
00133 Id axisno;
00134 char aname[18];
00135 char type;
00136 #ifndef __VIRTUAL_MEM
00137 QTYPE hierarq;
00138 #else
00139 long hierarq;
00140 #endif
00141 APTYPE nexta;
00142 APTYPE preva;
00143 char amode;
00144 vector acenter;
00145 vector avector;
00146 };
00147
00148 EXTERN APTYPE axsary;
00149 EXTERN int axsused;
00150 EXTERN Id AxisNo;
00151
00152 EXTERN GPTYPE grpary;
00153 EXTERN GPTYPE def_grpptr;
00154 EXTERN int grpused;
00155 EXTERN Id GroupNo;
00156
00157 GPTYPE MSD_getGroup(Id);
00158 APTYPE MSD_getAxis(Id);
00159 Id MSD_getGroupIdFromName(char *);
00160 Id MSD_getAxisIdFromName(char *);
00161 Id MSD_getMaxGroupId(void);
00162
00163
00164
00165 void MSD_execNameAssociaGroupAxis(void);
00166 int MSD_highNameAssociaGroupAxis(char *name1, char *name2);
00167 void MSD_execAssociaGroupAxis(void);
00168 int MSD_highAssociaGroupAxis(int sn, int an);
00169 int MSD_lowAssociaGroupAxis(APTYPE aptr, GPTYPE gptr);
00170
00171
00172 void MSD_execNameAssociaSolidAxis(void);
00173 int MSD_highNameAssociaSolidAxis(char *, char *);
00174 void MSD_execAssociaSolidAxis(void);
00175 int MSD_highAssociaSolidAxis(int sn, int an);
00176 int MSD_lowAssociaSolidAxis(APTYPE aptr, SPTYPE optr);
00177 int MSD_execStructAssociate(EulerOp *op);
00178 void MSD_printStructAssociate(FILE *f, EulerOp *op);
00179 int MSD_readStructAssociate(FILE *f, EulerOp *op);
00180 int MSD_modifyStructAssociate(EulerOp *op);
00181
00182
00183 void MSD_execNameAssociaGroupGroup(void);
00184 int MSD_highNameAssociaGroupGroup(char *name1, char *name2);
00185 void MSD_execAssociaGroupGroup(void);
00186 int MSD_highAssociaGroupGroup(int gn1, int gn2);
00187 int MSD_lowAssociaGroupGroup(GPTYPE gptr1, GPTYPE gptr2);
00188
00189
00190 void MSD_execNameAssociaGroupSolid(void);
00191 int MSD_highNameAssociaGroupSolid(char *name1, char *name2);
00192 void MSD_execAssociaGroupSolid(void);
00193 int MSD_highAssociaGroupSolid(int gn, int sn);
00194 int MSD_lowAssociaGroupSolid(GPTYPE gptr, SPTYPE optr);
00195
00196
00197 void MSD_execNameCreateAxisTranslation(void);
00198 int MSD_highNameCreateAxisTranslation(char *name, real x, real y, real z);
00199 void MSD_execCreateAxisTranslation(void);
00200 int MSD_highCreateAxisTranslation(real x, real y, real z);
00201 int MSD_middleCreateAxisTranslation(int an, real x, real y, real z);
00202 int MSD_lowCreateAxisTranslation(int an, vector vec);
00203 int MSD_execStructCrtAxsTranslation(EulerOp *op);
00204 void MSD_printStructCrtAxsTranslation(FILE *f, EulerOp *op);
00205 int MSD_readStructCrtAxsTranslation(FILE *f, EulerOp *op);
00206 int MSD_modifyStructCrtAxsTranslation(EulerOp *op);
00207
00208
00209 void MSD_execNameCreateAxisRotation(void);
00210 int MSD_highNameCreateAxisRotation(char *name, real x1, real y1, real z1,
00211 real x2, real y2, real z2);
00212 void MSD_execCreateAxisRotation(void);
00213 int MSD_highCreateAxisRotation(real x1, real y1, real z1,
00214 real x2, real y2, real z2);
00215 int MSD_middleCreateAxisRotation(int an, real x1, real y1, real z1,
00216 real x2, real y2, real z2);
00217 int MSD_lowCreateAxisRotation(Id an, vector pos, vector vec);
00218 int MSD_execStructCrtAxsRotation(EulerOp *op);
00219 void MSD_printStructCrtAxsRotation(FILE *f, EulerOp *op);
00220 int MSD_readStructCrtAxsRotation(FILE *f, EulerOp *op);
00221 int MSD_modifyStructCrtAxsRotation(EulerOp *op);
00222
00223
00224 void MSD_execManipulateAxis(void);
00225
00226
00227 void MSD_execNameListAxisName(void);
00228 int MSD_highNameListAxisName(char *name);
00229 int MSD_lowListAxisName(APTYPE aptr);
00230 void MSD_lowListAllAxis(void);
00231 void MSD_lowListAllAxisName(void);
00232
00233
00234 int MSD_getMaxAxisId(void);
00235 int MSD_getNumberOfAxis(void);
00236 char **MSD_putAxisNameInList(char **list);
00237 APTYPE MSD_lowFindAxisByName(char *nam);
00238 APTYPE MSD_getAxis(Id an);
00239
00240
00241 void MSD_execNameMoveAxis(void);
00242 int MSD_highNameMoveAxis(char *name, real x, real y, real z);
00243 void MSD_execMoveAxis(void);
00244 int MSD_highMoveAxis(int an, real x, real y, real z);
00245 int MSD_lowMoveAxis(APTYPE aptr, vector vec);
00246 int MSD_execStructMoveAxis(EulerOp *op);
00247 void MSD_printStructMoveAxis(FILE *f, EulerOp *op);
00248 int MSD_readStructMoveAxis(FILE *f, EulerOp *op);
00249 int MSD_modifyStructMoveAxis(EulerOp *op);
00250
00251
00252 void MSD_execNameRemoveAxis(void);
00253 int MSD_highNameRemoveAxis(char *name);
00254 void MSD_execRemoveAxis(void);
00255 int MSD_highRemoveAxis(int an);
00256 int MSD_lowRemoveAxis(APTYPE aptr);
00257 int MSD_execStructRemoveAxis(EulerOp *op);
00258 void MSD_printStructRemoveAxis(FILE *f, EulerOp *op);
00259 int MSD_readStructRemoveAxis(FILE *f, EulerOp *op);
00260 int MSD_modifyStructRemoveAxis(EulerOp *op);
00261
00262
00263 void MSD_execNameRenameAxis(void);
00264 int MSD_highNameRenameAxis(char *name1, char *name2);
00265 int MSD_lowNameRenameAxis(APTYPE aptr, char *name2);
00266
00267
00268 void MSD_execNameRotateAxis(void);
00269 int MSD_highNameRotateAxis(char *name, real cx, real cy, real cz,
00270 real ax, real ay, real az, real th);
00271 void MSD_execRotateAxis(void);
00272 int MSD_highRotateAxis(int an, real cx, real cy, real cz,
00273 real ax, real ay, real az, real th);
00274 int MSD_lowRotateAxis(APTYPE aptr, vector center, vector axis, real th);
00275 int MSD_execStructRotateAxis(EulerOp *op);
00276 void MSD_printStructRotateAxis(FILE *f, EulerOp *op);
00277 int MSD_readStructRotateAxis(FILE *f, EulerOp *op);
00278 int MSD_modifyStructRotateAxis(EulerOp *op);
00279
00280
00281 void MSD_execNameTransformUsingAxis(void);
00282 int MSD_highNameTransformUsingAxis(char *name, real desl);
00283 void MSD_execTransformUsingAxis(void);
00284 int MSD_highTransformUsingAxis(int an, real desl);
00285 int MSD_lowTransformUsingAxis(APTYPE aptr, real desl);
00286 void MSD_lowTranslateUsingAxis(APTYPE aptr, vector disp);
00287 void MSD_lowRotateUsingAxis(APTYPE aptr, vector center, vector vec, real th);
00288
00289
00290 void MSD_execNameDesassociaGroupAxis(void);
00291 int MSD_highNameDesassociaGroupAxis(char *name1, char *name2);
00292 void MSD_execDesassociaGroupAxis(void);
00293 int MSD_highDesassociaGroupAxis(int gn, int an);
00294
00295
00296 void MSD_execNameDesassociaSolidAxis(void);
00297 int MSD_highNameDesassociaSolidAxis(char *name1, char *name2);
00298 void MSD_execDesassociaSolidAxis(void);
00299 int MSD_highDesassociaSolidAxis(int sn, int an);
00300
00301
00302 void MSD_execNameDesassociaGroupGroup(void);
00303 int MSD_highNameDesassociaGroupGroup(char *name1, char *name2);
00304 void MSD_execDesassociaGroupGroup(void);
00305 int MSD_highDesassociaGroupGroup(int gn1, int gn2);
00306
00307
00308 int MSD_highNameDesassociaGroupSolid(char *name1, char *name2);
00309 void MSD_execDesassociaGroupSolid(void);
00310 int MSD_highDesassociaGroupSolid(int gn, int sn);
00311 void MSD_execNameDesassociaGroupSolid(void);
00312
00313
00314 void MSD_execNameCreateGroup(void);
00315 int MSD_highNameCreateGroup(char *name);
00316 void MSD_execCreateGroup(void);
00317 int MSD_highCreateGroup(void);
00318 int MSD_middleCreateGroup(int gn);
00319 int MSD_lowCreateGroup(Id gn);
00320 int MSD_execStructCreateGroup(EulerOp *op);
00321 void MSD_printStructCreateGroup(FILE *f, EulerOp *op);
00322 int MSD_readStructCreateGroup(FILE *f, EulerOp *op);
00323 int MSD_modifyStructCreateGroup(EulerOp *op);
00324
00325
00326 void MSD_execNameCreateSetGroup(void);
00327 int MSD_highNameCreateSetGroup(char *name1, char *name2);
00328 void MSD_execCreateSetGroup(void);
00329 int MSD_highCreateSetGroup(int flag);
00330
00331
00332 void MSD_execNameCopyGroup(void);
00333 int MSD_highNameCopyGroup(char *name1, char *name2);
00334 void MSD_execCopyGroup(void);
00335 int MSD_highCopyGroup(int gn);
00336 int MSD_lowCopyGroup(GPTYPE gptr, Id gn);
00337
00338
00339 void MSD_execManipulateGroup(void);
00340
00341
00342 void MSD_execNameListGroupName(void);
00343 int MSD_highNameListGroupName(char *name);
00344 int MSD_lowNameListGroupName(GPTYPE gptr);
00345 void MSD_lowListAllGroup(void);
00346 void MSD_lowListGroup(GPTYPE gptr);
00347 void MSD_lowListAllGroupName(void);
00348
00349
00350 int MSD_getNumberOfGroups(void);
00351 char **MSD_putGroupNameInList(char **list);
00352 GPTYPE MSD_lowFindGroupByName(char *nam);
00353 GPTYPE MSD_getGroup(Id gn);
00354 char MSD_lowIsEmptyGroup(GPTYPE grpptr);
00355 char MSD_lowIsAncestorGroup(GPTYPE ancgptr, GPTYPE desgptr);
00356 char MSD_lowIsAncestorAxis(APTYPE ancaptr, APTYPE desaptr);
00357 GPTYPE MSD_getGroupAxis(APTYPE axis);
00358
00359
00360 void MSD_execNameMoveGroup(void);
00361 int MSD_highNameMoveGroup(char *name, real x, real y, real z);
00362 void MSD_execMoveGroup(void);
00363 int MSD_highMoveGroup(int gn, real x, real y, real z);
00364 int MSD_lowMoveGroup(GPTYPE gptr, vector disp);
00365
00366
00367 void MSD_execNameRemoveOneGroup(void);
00368 int MSD_highNameRemoveOneGroup(char *name);
00369 void MSD_execRemoveOneGroup(void);
00370 int MSD_highRemoveOneGroup(int gn);
00371 int MSD_lowRemoveOneGroup(GPTYPE gptr);
00372 int MSD_execStructRemoveOneGroup(EulerOp *op);
00373 void MSD_printStructRemoveOneGroup(FILE *f, EulerOp *op);
00374 int MSD_readStructRemoveOneGroup(FILE *f, EulerOp *op);
00375 int MSD_modifyStructRemoveOneGroup(EulerOp *op);
00376
00377
00378 void MSD_execNameRemoveGroup(void);
00379 int MSD_highNameRemoveGroup(char *name);
00380 void MSD_execRemoveGroup(void);
00381 int MSD_highRemoveGroup(int gn);
00382 int MSD_lowRemoveGroup(GPTYPE gptr);
00383
00384
00385 void MSD_execNameRenameGroup(void);
00386 int MSD_highNameRenameGroup(char *name1, char *name2);
00387 int MSD_lowNameRenameGroup(GPTYPE gptr, char *name2);
00388
00389
00390 void MSD_execNameRotateGroup(void);
00391 int MSD_highNameRotateGroup(char *name, real x1, real y1, real z1, \
00392 real x2, real y2, real z2, real th);
00393 void MSD_execRotateGroup(void);
00394 int MSD_highRotateGroup(Id gn, real x1, real y1, real z1, \
00395 real x2, real y2, real z2, real th);
00396 int MSD_lowRotateGroup(GPTYPE gptr, vector center, vector vec, real th);
00397
00398
00399 void MSD_execNameSetGroupCurrent(void);
00400 void MSD_highNameSetGroupCurrent(char *nam);
00401 void MSD_execSetGroupCurrent(void);
00402 int MSD_highSetGroupCurrent(int gn);
00403 int MSD_lowSetGroupCurrent(GPTYPE gptr);
00404 int MSD_execStructSetGroupCurrent(EulerOp *op);
00405 void MSD_printStructSetGroupCurrent(FILE *f, EulerOp *op);
00406 int MSD_readStructSetGroupCurrent(FILE *f, EulerOp *op);
00407 int MSD_modifyStructSetGroupCurrent(EulerOp *op);
00408
00409
00410 void MSD_execNameTransferGroup(void);
00411 int MSD_highNameTransferGroup(char *name1, char *name2);
00412 void MSD_execTransferGroup(void);
00413 int MSD_highTransferGroup(int gn1, int gn2);
00414
00415
00416 void MSD_readExecuteMoveElement(void);
00417 void MSD_executeMoveElement(char *name, real dx, real dy, real dz);
00418 int _move(char *name, vector disp, int moni);
00419
00420
00421 void MSD_readExecuteRotateElement(void);
00422 void MSD_executeRotateElement(char *name, real x1, real y1, real z1, \
00423 real x2, real y2, real z2, real th);
00424 int _rotate(char *name, vector center, vector vector, real th, int moni);
00425 void MSD_readExecuteAffineElement(void);
00426 char _affine(char *name, vector center, matrix mat, int moni);
00427 void objrot(STYPE *optr, vector center, vector axis, real th);
00428 void MSD_executeAffineElement(char *name, real a11, real a12, real a13, \
00429 real a21, real a22, real a23, \
00430 real a31, real a32, real a33, \
00431 real xc, real yc, real zc);
00432
00433 #endif