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 #include <stdio.h>
00042 #include <string.h>
00043 #ifndef __UNIX_
00044 #include <malloc.h>
00045 #endif
00046 #include "mensagem.h"
00047 #include "memvirtu.h"
00048 #include "lowparam.h"
00049 #include "lowsolid.h"
00050 #include "curvgeom.h"
00051 #include "eulerops.h"
00052 #include "mancommd.h"
00053
00054 typedef struct eulercod EuCode;
00055
00056 struct eulercod
00057 {
00058 OpCode ecode;
00059 char *eop;
00060 int (*xeop)(EulerOp *op);
00061 void (*peop)(FILE *f, EulerOp *op);
00062 int (*reop)(FILE *f, EulerOp *op);
00063 int (*meop)(EulerOp *op);
00064 int num;
00065 };
00066
00067 EuCode ematrix[] =
00068 {
00069
00070 { MVSF,
00071 "MVSF",
00072 MSD_execStructMVSF,
00073 MSD_printStructMVSF,
00074 MSD_readStructMVSF,
00075 MSD_modifyStructMVSF,
00076 1 },
00077
00078
00079 { KVSF,
00080 "KVSF",
00081 MSD_execStructKVSF,
00082 MSD_printStructKVSF,
00083 MSD_readStructKVSF,
00084 MSD_modifyStructKVSF,
00085 1 },
00086
00087
00088 { MEV,
00089 "SVME",
00090 MSD_execStructMEV,
00091 MSD_printStructMEV,
00092 MSD_readStructMEV,
00093 MSD_modifyStructMEV,
00094 1 },
00095
00096
00097 { KEV,
00098 "KEV",
00099 MSD_execStructKEV,
00100 MSD_printStructKEV,
00101 MSD_readStructKEV,
00102 MSD_modifyStructKEV,
00103 1 },
00104
00105
00106 { MEF,
00107 "MEF",
00108 MSD_execStructMEF,
00109 MSD_printStructMEF,
00110 MSD_readStructMEF,
00111 MSD_modifyStructMEF,
00112 1 },
00113
00114
00115 { KEF,
00116 "KEF",
00117 MSD_execStructKEF,
00118 MSD_printStructKEF,
00119 MSD_readStructKEF,
00120 MSD_modifyStructKEF,
00121 1 },
00122
00123
00124 { KEMR,
00125 "KEMR",
00126 MSD_execStructKEMR,
00127 MSD_printStructKEMR,
00128 MSD_readStructKEMR,
00129 MSD_modifyStructKEMR,
00130 1 },
00131
00132
00133 { MEKR,
00134 "MEKR",
00135 MSD_execStructMEKR,
00136 MSD_printStructMEKR,
00137 MSD_readStructMEKR,
00138 MSD_modifyStructMEKR,
00139 1 },
00140
00141
00142 { KFMRH,
00143 "KFMRH",
00144 MSD_execStructKFMRH,
00145 MSD_printStructKFMRH,
00146 MSD_readStructKFMRH,
00147 MSD_modifyStructKFMRH,
00148 1 },
00149
00150
00151 { MFKRH,
00152 "MFKRH",
00153 MSD_execStructMFKRH,
00154 MSD_printStructMFKRH,
00155 MSD_readStructMFKRH,
00156 MSD_modifyStructMFKRH,
00157 1 },
00158
00159
00160 { KSFMR,
00161 "KSFMR",
00162 MSD_execStructKSFMR,
00163 MSD_printStructKSFMR,
00164 MSD_readStructKSFMR,
00165 MSD_modifyStructKSFMR,
00166 1 },
00167
00168
00169 { MSFKR,
00170 "MSFKR",
00171 MSD_execStructMSFKR,
00172 MSD_printStructMSFKR,
00173 MSD_readStructMSFKR,
00174 MSD_modifyStructMSFKR,
00175 1 },
00176
00177
00178 { HARDREM,
00179 "HARDREM",
00180 MSD_execStructHardRemove,
00181 MSD_printStructHardRemove,
00182 MSD_readStructHardRemove,
00183 MSD_modifyStructHardRemove,
00184 1 },
00185
00186
00187 { RMOVE,
00188 "RMOVE",
00189 MSD_execStructRingMove,
00190 MSD_printStructRingMove,
00191 MSD_readStructRingMove,
00192 MSD_modifyStructRingMove,
00193 1 },
00194
00195
00196 { NEWLOC,
00197 "NEWLOC",
00198 MSD_execStructNewVertexLocation,
00199 MSD_printStructNewVertexLocation,
00200 MSD_readStructNewVertexLocation,
00201 MSD_modifyStructNewVertexLocation,
00202 1 },
00203
00204
00205 { REVERT,
00206 "REVERT",
00207 MSD_execStructRevert,
00208 MSD_printStructRevert,
00209 MSD_readStructRevert,
00210 MSD_modifyStructRevert,
00211 1 },
00212
00213
00214 { MODIFYNAMES,
00215 "MODIFYNAMES",
00216 MSD_execStructModifyIds,
00217 MSD_printStructModifyIds,
00218 MSD_readStructModifyIds,
00219 MSD_modifyStructModifyIds,
00220 1 },
00221
00222
00223 { DETACH,
00224 "DETACH",
00225 MSD_execStructDetach,
00226 MSD_printStructDetach,
00227 MSD_readStructDetach,
00228 MSD_modifyStructDetach,
00229 1 },
00230
00231
00232 { TRANS,
00233 "TRANS",
00234 MSD_execStructTranslate,
00235 MSD_printStructTranslate,
00236 MSD_readStructTranslate,
00237 MSD_modifyStructTranslate,
00238 1 },
00239
00240
00241 { ROTAT,
00242 "ROTAT",
00243 MSD_execStructRotate,
00244 MSD_printStructRotate,
00245 MSD_readStructRotate,
00246 MSD_modifyStructRotate,
00247 1 },
00248
00249
00250 { SCALE,
00251 "SCALE",
00252 MSD_execStructScale,
00253 MSD_printStructScale,
00254 MSD_readStructScale,
00255 MSD_modifyStructScale,
00256 1 },
00257
00258
00259 { TRANSFORM,
00260 "TRANSFORM",
00261 MSD_execStructTransformation,
00262 MSD_printStructTransformation,
00263 MSD_readStructTransformation,
00264 MSD_modifyStructTransformation,
00265 5 },
00266
00267
00268 { ASSOCIATE,
00269 "ASSOCIATE",
00270 MSD_execStructAssociate,
00271 MSD_printStructAssociate,
00272 MSD_readStructAssociate,
00273 MSD_modifyStructAssociate,
00274 1 },
00275
00276
00277 { CRTAXSTRS,
00278 "CRTAXSTRS",
00279 MSD_execStructCrtAxsTranslation,
00280 MSD_printStructCrtAxsTranslation,
00281 MSD_readStructCrtAxsTranslation,
00282 MSD_modifyStructCrtAxsTranslation,
00283 1 },
00284
00285
00286 { CRTAXSROT,
00287 "CRTAXSROT",
00288 MSD_execStructCrtAxsRotation,
00289 MSD_printStructCrtAxsRotation,
00290 MSD_readStructCrtAxsRotation,
00291 MSD_modifyStructCrtAxsRotation,
00292 2 },
00293
00294
00295 { CRTGRP,
00296 "CRTGRP",
00297 MSD_execStructCreateGroup,
00298 MSD_printStructCreateGroup,
00299 MSD_readStructCreateGroup,
00300 MSD_modifyStructCreateGroup,
00301 1 },
00302
00303
00304 { REMAXS,
00305 "REMAXS",
00306 MSD_execStructRemoveAxis,
00307 MSD_printStructRemoveAxis,
00308 MSD_readStructRemoveAxis,
00309 MSD_modifyStructRemoveAxis,
00310 1 },
00311
00312
00313 { REMGRP,
00314 "REMGRP",
00315 MSD_execStructRemoveOneGroup,
00316 MSD_printStructRemoveOneGroup,
00317 MSD_readStructRemoveOneGroup,
00318 MSD_modifyStructRemoveOneGroup,
00319 1 },
00320
00321
00322 { MOVAXIS,
00323 "MOVAXS",
00324 MSD_execStructMoveAxis,
00325 MSD_printStructMoveAxis,
00326 MSD_readStructMoveAxis,
00327 MSD_modifyStructMoveAxis,
00328 1 },
00329
00330
00331 { ROTAXIS,
00332 "ROTAXS",
00333 MSD_execStructRotateAxis,
00334 MSD_printStructRotateAxis,
00335 MSD_readStructRotateAxis,
00336 MSD_modifyStructRotateAxis,
00337 2 },
00338
00339
00340 { COLOR,
00341 "COLOR",
00342 MSD_execStructColor,
00343 MSD_printStructColor,
00344 MSD_readStructColor,
00345 MSD_modifyStructColor,
00346 1 },
00347
00348
00349 { NAME,
00350 "NAME",
00351 MSD_execStructName,
00352 MSD_printStructName,
00353 MSD_readStructName,
00354 MSD_modifyStructName,
00355 2 },
00356
00357 #ifdef __curved_env__
00358
00359 { KILLLINE,
00360 "KILLLINE",
00361 MSD_execStructKILLLINE,
00362 MSD_printStructKILLLINE,
00363 MSD_readStructKILLLINE,
00364 MSD_modifyStructKILLLINE,
00365 1 },
00366
00367
00368 { NEWLINE,
00369 "NEWLINE",
00370 MSD_execStructNEWLINE,
00371 MSD_printStructNEWLINE,
00372 MSD_readStructNEWLINE,
00373 MSD_modifyStructNEWLINE,
00374 1 },
00375
00376
00377 { KILLPOLY,
00378 "KILLPOLY",
00379 MSD_execStructKILLPOLY,
00380 MSD_printStructKILLPOLY,
00381 MSD_readStructKILLPOLY,
00382 MSD_modifyStructKILLPOLY,
00383 1 },
00384
00385
00386 { NEWPOLY,
00387 "NEWPOLY",
00388 MSD_execStructNEWPOLY,
00389 MSD_printStructNEWPOLY,
00390 MSD_readStructNEWPOLY,
00391 MSD_modifyStructNEWPOLY,
00392 1 },
00393
00394
00395 { SETCTAG,
00396 "SETCTAG",
00397 MSD_execStructSETCTAG,
00398 MSD_printStructSETCTAG,
00399 MSD_readStructSETCTAG,
00400 MSD_modifyStructSETCTAG,
00401 1 },
00402
00403
00404 { ADDLPOINT,
00405 "ADDLPOINT",
00406 MSD_execStructADDLPOINT,
00407 MSD_printStructADDLPOINT,
00408 MSD_readStructADDLPOINT,
00409 MSD_modifyStructADDLPOINT,
00410 1 },
00411
00412
00413 { REMLPOINT,
00414 "REMLPOINT",
00415 MSD_execStructREMLPOINT,
00416 MSD_printStructREMLPOINT,
00417 MSD_readStructREMLPOINT,
00418 MSD_modifyStructREMLPOINT,
00419 1 },
00420 #endif
00421
00422
00423 { MAXCODE,
00424 "\0",
00425 MSD_execStructError,
00426 MSD_printStructError,
00427 MSD_readStructError,
00428 MSD_modifyStructError,
00429 1 }
00430 };
00431
00432
00433 void MSD_lowAddEulerOp(SPTYPE s, OpCode code, Id ip1, Id ip2, Id ip3, Id ip4, \
00434 Id ip5, Id ip6, Id ip7, Id ip8, \
00435 real fp1, real fp2, \
00436 real fp3, real fp4)
00437 {
00438 #ifndef __VIRTUAL_MEM
00439 EulerOp *newop;
00440
00441 if ((newop = (EulerOp *)malloc(sizeof(EulerOp))) == (EulerOp *)NIL)
00442 {
00443 fprintf(stderr, MEN_NaoPossuiMemoria, NAM_AddEulerOperator);
00444 return;
00445 }
00446 newop->opnext = OpHead;
00447 OpHead = newop;
00448 OpCount++;
00449 #else
00450 OpHead++;
00451 OpCount++;
00452 EulerCount(OpHead) = OpHead;
00453 #endif
00454
00455 EulerOpCode(OpHead) = code;
00456 EulerSolidNo(OpHead) = s != SNIL ? SolSolidNo(s) : -1;
00457 EulerIp1(OpHead) = ip1;
00458 EulerIp2(OpHead) = ip2;
00459 EulerIp3(OpHead) = ip3;
00460 EulerIp4(OpHead) = ip4;
00461 EulerIp5(OpHead) = ip5;
00462 EulerIp6(OpHead) = ip6;
00463 EulerIp7(OpHead) = ip7;
00464 EulerIp8(OpHead) = ip8;
00465 EulerFp1(OpHead) = fp1;
00466 EulerFp2(OpHead) = fp2;
00467 EulerFp3(OpHead) = fp3;
00468 EulerFp4(OpHead) = fp4;
00469 EulerCommandCount(OpHead) = CommandCount;
00470 }
00471
00472
00473 void MSD_lowAddEulerOpRedo(SPTYPE s, OpCode code, Id ip1, Id ip2, Id ip3, Id ip4, \
00474 Id ip5, Id ip6, Id ip7, Id ip8, \
00475 real fp1, real fp2, \
00476 real fp3, real fp4)
00477 {
00478 #ifndef __VIRTUAL_MEM
00479 EulerOp *newop;
00480
00481 if ((newop = (EulerOp *)malloc(sizeof(EulerOp))) == (EulerOp *)NIL)
00482 {
00483 fprintf(stderr, MEN_NaoPossuiMemoria, NAM_AddEulerOperator);
00484 return;
00485 }
00486 newop->opnext = OpHeadRedo;
00487 OpHeadRedo = newop;
00488 OpCountRedo++;
00489 #else
00490 OpHeadRedo++;
00491 OpCountRedo++;
00492 EulerCountRedo(OpHeadRedo) = OpHeadRedo;
00493 #endif
00494
00495 EulerOpCodeRedo(OpHeadRedo) = code;
00496 EulerSolidNoRedo(OpHeadRedo) = s != SNIL ? SolSolidNo(s) : -1;
00497 EulerIp1Redo(OpHeadRedo) = ip1;
00498 EulerIp2Redo(OpHeadRedo) = ip2;
00499 EulerIp3Redo(OpHeadRedo) = ip3;
00500 EulerIp4Redo(OpHeadRedo) = ip4;
00501 EulerIp5Redo(OpHeadRedo) = ip5;
00502 EulerIp6Redo(OpHeadRedo) = ip6;
00503 EulerIp7Redo(OpHeadRedo) = ip7;
00504 EulerIp8Redo(OpHeadRedo) = ip8;
00505 EulerFp1Redo(OpHeadRedo) = fp1;
00506 EulerFp2Redo(OpHeadRedo) = fp2;
00507 EulerFp3Redo(OpHeadRedo) = fp3;
00508 EulerFp4Redo(OpHeadRedo) = fp4;
00509 EulerCommandCountRedo(OpHeadRedo) = CommandCount;
00510 }
00511
00512
00513 void MSD_lowAddMatrix(SPTYPE s, OpCode opcode, Id ip1, Id ip2, Id ip3, \
00514 Id ip4, Id ip5, Id ip6, \
00515 matrix m)
00516 {
00517 int i;
00518
00519 for (i = 3; i > -1; i--)
00520 {
00521 MSD_lowAddEulerOp(s, opcode, ip1, ip2, ip3, ip4, ip5, ip6,
00522 0, 0, m[i][0], m[i][1], m[i][2], m[i][3]);
00523 }
00524 }
00525
00526
00527 void MSD_lowAddMatrixRedo(SPTYPE s, OpCode opcode, Id ip1, Id ip2, Id ip3, \
00528 Id ip4, Id ip5, Id ip6, \
00529 matrix m)
00530 {
00531 int i;
00532
00533 for (i = 3; i > -1; i--)
00534 {
00535 MSD_lowAddEulerOpRedo(s, opcode, ip1, ip2, ip3, ip4, ip5, ip6,
00536 0, 0, m[i][0], m[i][1], m[i][2], m[i][3]);
00537 }
00538 }