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 #ifndef __UNIX_
00043 #include <stdlib.h>
00044 #endif
00045 #include "mensagem.h"
00046 #include "memvirtu.h"
00047 #include "lowparam.h"
00048 #include "lowmacro.h"
00049 #include "curvgeom.h"
00050 #include "lowsolid.h"
00051 #include "eulerops.h"
00052 #include "mancommd.h"
00053 #include "vectorop.h"
00054 #include "genfunc_.h"
00055 #include "shpshape.h"
00056
00057 #ifdef __curved_env__
00058
00059 #ifdef __Extended_Version
00060 void hget_he(void)
00061 {
00062 int v1, v2, fn, memohe;
00063 char sn[20];
00064
00065 while (5 != sscanf(restbuf, "%s %d %d %d %d", sn, &v1, &v2, &fn,
00066 &memohe))
00067 {
00068 printf("Solidname V1 V2 F Memo\n");
00069 if (!lineins("? "))
00070 {
00071 return;
00072 }
00073 }
00074 get_he(sn, v1, v2, fn, memohe);
00075 }
00076
00077 int get_he(char *sn, Id v1, Id v2, Id fn, int memohe)
00078 {
00079 SPTYPE s;
00080 FPTYPE f1;
00081 HPTYPE he;
00082
00083 if ((s = MSD_getSolid(MSD_getSolidIdFromName(sn))) == SNIL)
00084 {
00085 fprintf(stderr, MEN_NaoEncontrouSolido, NAM_GetHE, sn);
00086 return(ERROR);
00087 }
00088 if ((f1 = MSD_getFace(s, fn)) == FNIL)
00089 {
00090 fprintf(stderr, MEN_NaoEncontrouFace, NAM_GetHE, fn, sn);
00091 return(ERROR);
00092 }
00093 if (MSD_getEdge(f1, v1, v2, &he) == LNIL)
00094 {
00095 if (MSD_getEdge(f1, v2, v1, &he) == LNIL)
00096 {
00097 fprintf(stderr, MEN_NaoEncontrouArestaV, NAM_GetHE, v1, v2, sn);
00098 return(ERROR);
00099 }
00100 }
00101 lget_he(he, memohe);
00102 return(SUCCESS);
00103 }
00104
00105 void lget_he(HPTYPE he, int memohe)
00106 {
00107 HPTYPE heaux;
00108
00109 heaux = he;
00110 he_store[memohe] = heaux;
00111 }
00112
00113 void hget_mate(void)
00114 {
00115 int memohe, memomate;
00116
00117 while (2 != sscanf(restbuf, "%d %d", &memohe, &memomate))
00118 {
00119 printf("Memo_he Memo_mate\n");
00120 if (!lineins("? "))
00121 {
00122 return;
00123 }
00124 }
00125 get_mate(memohe, memomate);
00126 }
00127
00128 int get_mate(int memohe, int memomate)
00129 {
00130 HPTYPE he;
00131
00132 if ((memohe > MAXMEMO) || (memohe < 0))
00133 {
00134 fprintf(stderr, MEN_MemoriaInvalida, NAM_GetMate, memohe);
00135 return(ERROR);
00136 }
00137 if ((memomate > MAXMEMO) || (memomate < 0))
00138 {
00139 fprintf(stderr, MEN_MemoriaInvalida, NAM_GetMate, memomate);
00140 return(ERROR);
00141 }
00142
00143 if ((he = he_store[memohe]) == HNIL)
00144 {
00145 fprintf(stderr, MEN_MemoriaInvalida, NAM_GetMate, memohe);
00146 return(ERROR);
00147 }
00148
00149 lget_mate(he, memomate);
00150 return(SUCCESS);
00151 }
00152
00153 void lget_mate(HPTYPE he, int memomate)
00154 {
00155 HPTYPE heaux;
00156
00157 heaux = mate(he);
00158 he_store[memomate] = heaux;
00159 }
00160
00161 void hget_next(void)
00162 {
00163 int memohe, memonext;
00164
00165 while (2 != sscanf(restbuf, "%d %d", &memohe, &memonext))
00166 {
00167 printf("Memo_he Memo_next\n");
00168 if (!lineins("? "))
00169 {
00170 return;
00171 }
00172 }
00173 get_next(memohe, memonext);
00174 }
00175
00176 int get_next(int memohe, int memonext)
00177 {
00178 HPTYPE he;
00179
00180 if ((memohe > MAXMEMO) || (memohe < 0))
00181 {
00182 fprintf(stderr, MEN_MemoriaInvalida, NAM_GetNext, memohe);
00183 return(ERROR);
00184 }
00185
00186 if ((memonext > MAXMEMO) || (memonext < 0))
00187 {
00188 fprintf(stderr, MEN_MemoriaInvalida, NAM_GetNext, memonext);
00189 return(ERROR);
00190 }
00191
00192 if ((he = he_store[memohe]) == HNIL)
00193 {
00194 fprintf(stderr, MEN_MemoriaInvalida, NAM_GetNext, memohe);
00195 return(ERROR);
00196 }
00197
00198 lget_next(he, memonext);
00199 return(SUCCESS);
00200 }
00201
00202 void lget_next(HPTYPE he, int memonext)
00203 {
00204 HPTYPE heaux;
00205
00206 heaux = HalNxt(he);
00207 he_store[memonext] = heaux;
00208 }
00209
00210 void hget_prev(void)
00211 {
00212 int memohe, memoprev;
00213
00214 while (2 != sscanf(restbuf, "%d %d", &memohe, &memoprev))
00215 {
00216 printf("Memo_he Memo_prev\n");
00217 if (!lineins("? "))
00218 {
00219 return;
00220 }
00221 }
00222 get_prev(memohe, memoprev);
00223 }
00224
00225 int get_prev(int memohe, int memoprev)
00226 {
00227 HPTYPE he;
00228
00229 if ((memohe > MAXMEMO) || (memohe < 0))
00230 {
00231 fprintf(stderr, MEN_MemoriaInvalida, NAM_GetPrev, memohe);
00232 return(ERROR);
00233 }
00234
00235 if ((memoprev > MAXMEMO) || (memoprev < 0))
00236 {
00237 fprintf(stderr, MEN_MemoriaInvalida, NAM_GetPrev, memoprev);
00238 return(ERROR);
00239 }
00240
00241 if ((he = he_store[memohe]) == HNIL)
00242 {
00243 fprintf(stderr, MEN_MemoriaInvalida, NAM_GetPrev, memohe);
00244 return(ERROR);
00245 }
00246
00247 lget_prev(he, memoprev);
00248 return(SUCCESS);
00249 }
00250
00251 void lget_prev(HPTYPE he, int memoprev)
00252 {
00253 HPTYPE heaux;
00254
00255 heaux = HalPrv(he);
00256 he_store[memoprev] = heaux;
00257 }
00258
00259 void hcmef(void)
00260 {
00261 int memohe1, memohe2;
00262
00263 while (2 != sscanf(restbuf, "%d %d", &memohe1, &memohe2))
00264 {
00265 printf("Memo_he1 Memo_he2\n");
00266 if (!lineins("? "))
00267 {
00268 return;
00269 }
00270 }
00271 cmef(memohe1, memohe2);
00272 }
00273
00274 int cmef(int memohe1, int memohe2)
00275 {
00276 SPTYPE s;
00277 HPTYPE he1;
00278 HPTYPE he2;
00279 Id fn;
00280
00281 if ((memohe1 > MAXMEMO) || (memohe1 < 0))
00282 {
00283 fprintf(stderr, MEN_MemoriaInvalida, NAM_DoMEF, memohe1);
00284 return(ERROR);
00285 }
00286
00287 if ((memohe2 > MAXMEMO) || (memohe2 < 0))
00288 {
00289 fprintf(stderr, MEN_MemoriaInvalida, NAM_DoMEF, memohe2);
00290 return(ERROR);
00291 }
00292
00293 if ((he1 = he_store[memohe1]) == HNIL)
00294 {
00295 fprintf(stderr, MEN_MemoriaInvalida, NAM_DoMEF, memohe1);
00296 return(ERROR);
00297 }
00298
00299 if ((he2 = he_store[memohe2]) == HNIL)
00300 {
00301 fprintf(stderr, MEN_MemoriaInvalida, NAM_DoMEF, memohe2);
00302 return(ERROR);
00303 }
00304
00305 s = SheSSolids(FacFShell(LooLFace(HalWLoop(he1))));
00306 fn = MSD_getMaxFaceId(s);
00307
00308 MSD_lowMEF(he1, he2, fn);
00309 MSD_lowSetNormal(s, TRUE);
00310 MSD_lowSetEdgeAngle(s);
00311 MSD_lowSetInfo(s);
00312
00313 return(SUCCESS);
00314 }
00315
00316 void hcmev(void)
00317 {
00318 int memohe1, memohe2;
00319 float x, y, z;
00320
00321 while (5 != sscanf(restbuf, "%d %d %f %f %f", &memohe1, &memohe2,
00322 &x, &y, &z))
00323 {
00324 printf("Memo_he1 Memo_he2 Xnew Ynew Znew\n");
00325 if (!lineins("? "))
00326 {
00327 return;
00328 }
00329 }
00330 cmev(memohe1, memohe2, x, y, z);
00331 }
00332
00333 int cmev(int memohe1, int memohe2, real x, real y, real z)
00334 {
00335 SPTYPE s;
00336 HPTYPE he1;
00337 HPTYPE he2;
00338 Id vn;
00339
00340 if ((memohe1 > MAXMEMO) || (memohe1 < 0))
00341 {
00342 fprintf(stderr, MEN_MemoriaInvalida, NAM_DoMEV, memohe1);
00343 return(ERROR);
00344 }
00345
00346 if ((memohe2 > MAXMEMO) || (memohe2 < 0))
00347 {
00348 fprintf(stderr, MEN_MemoriaInvalida, NAM_DoMEV, memohe2);
00349 return(ERROR);
00350 }
00351
00352 if ((he1 = he_store[memohe1]) == HNIL)
00353 {
00354 fprintf(stderr, MEN_MemoriaInvalida, NAM_DoMEV, memohe1);
00355 return(ERROR);
00356 }
00357
00358 if ((he2 = he_store[memohe2]) == HNIL)
00359 {
00360 fprintf(stderr, MEN_MemoriaInvalida, NAM_DoMEV, memohe2);
00361 return(ERROR);
00362 }
00363
00364 s = SheSSolids(FacFShell(LooLFace(HalWLoop(he1))));
00365 vn = MSD_getMaxVertexId(s) + 1;
00366
00367 MSD_lowMEV(he1, he2, vn, x, y, z);
00368 MSD_lowSetNormal(s, TRUE);
00369 MSD_lowSetEdgeAngle(s);
00370 MSD_lowSetInfo(s);
00371
00372 return(SUCCESS);
00373 }
00374
00375 void cnewloc(void)
00376 {
00377 int memohe;
00378 float x, y, z;
00379
00380 while (sscanf(restbuf, "%d %f %f %f", &memohe, &x, &y, &z) != 4)
00381 {
00382 printf("cur_newloc: Memohe x y z");
00383 if (!lineins("? "))
00384 {
00385 return;
00386 }
00387 }
00388 ccnewloc(memohe, x, y, z);
00389 }
00390
00391 int ccnewloc(int memohe, real x, real y, real z)
00392 {
00393 SPTYPE s;
00394 HPTYPE he;
00395 VPTYPE v;
00396
00397 if ((memohe > MAXMEMO) || (memohe < 0))
00398 {
00399 fprintf(stderr, MEN_MemoriaInvalida, NAM_DoNewLoc, memohe);
00400 return(ERROR);
00401 }
00402
00403 if ((he = he_store[memohe]) == HNIL)
00404 {
00405 fprintf(stderr, MEN_MemoriaInvalida, NAM_DoNewLoc, memohe);
00406 return(ERROR);
00407 }
00408
00409 s = SheSSolids(FacFShell(LooLFace(HalWLoop(he))));
00410 v = HalVtx(he);
00411 MSD_lowNewVertexLocation(s, v, x, y, z);
00412 return(SUCCESS);
00413 }
00414
00415 void hshow_memo(void)
00416 {
00417 int memohe;
00418
00419 while (1 != sscanf(restbuf, "%d", &memohe))
00420 {
00421 printf("Memo_he, -1: show all\n");
00422 if (!lineins("? "))
00423 {
00424 return;
00425 }
00426 }
00427 lshow_memo(memohe);
00428 }
00429
00430 void lshow_memo(int memohe)
00431 {
00432 HPTYPE heaux;
00433 Id v1, v2, fn;
00434 int i;
00435
00436 printf("Halfedge Memory:\n");
00437 if (memohe == -1)
00438 {
00439 for (i = 0; i < MAXMEMO; i++)
00440 {
00441 if ((heaux = he_store[i]) == HNIL)
00442 {
00443 printf(" Memo[%d] = empty\n", i);
00444 }
00445 else
00446 {
00447 v1 = VerVertexNo(HalVtx(heaux));
00448 v2 = VerVertexNo(HalVtx(HalNxt(heaux)));
00449 fn = FacFaceNo(LooLFace(HalWLoop(heaux)));
00450 printf(" Memo[%d] = v%d->v%d on face %d\n", i, v1, v2, fn);
00451 }
00452 }
00453 }
00454 else
00455 {
00456 if ((heaux = he_store[memohe]) == HNIL)
00457 {
00458 printf(" Memo[%d] = empty\n", memohe);
00459 }
00460 else
00461 {
00462 v1 = VerVertexNo(HalVtx(heaux));
00463 v2 = VerVertexNo(HalVtx(HalNxt(heaux)));
00464 fn = FacFaceNo(LooLFace(HalWLoop(heaux)));
00465 printf(" Memo[%d] = v%d->v%d on face %d\n", memohe, v1, v2, fn);
00466 }
00467 }
00468 }
00469
00470 void cputctag(void)
00471 {
00472 int tag, memohe;
00473 char sn[20];
00474 SPTYPE s;
00475 HPTYPE he;
00476 CURVE *curv;
00477
00478 while (3 != sscanf(restbuf, "%s %d %d", sn, &tag, &memohe))
00479 {
00480 printf("PUTCTAG: sname tag memo \n");
00481 if (!lineins("? "))
00482 {
00483 return;
00484 }
00485 }
00486 if ((s = MSD_lowFindSolidByName(sn)) == SNIL)
00487 {
00488 fprintf(stderr, MEN_NaoEncontrouSolido, NAM_DoPutTag, sn);
00489 return;
00490 }
00491 if ((curv = MSD_getCurve(s, tag)) == (CURVE *)NIL)
00492 {
00493 fprintf(stderr, MEN_NaoEncontrouTag, NAM_DoPutTag, tag, sn);
00494 return;
00495 }
00496 if ((he = he_store[memohe]) == HNIL)
00497 {
00498 fprintf(stderr, MEN_MemoriaInvalida, NAM_DoPutTag, memohe);
00499 return;
00500 }
00501 MSD_lowSetCurveAtributeToEdge(he, curv);
00502 }
00503
00504 void ceval_polyline(void)
00505 {
00506 int memohe, nsegm;
00507 HPTYPE he;
00508 SPTYPE s;
00509
00510 while (2 != sscanf(restbuf, "%d %d", &memohe, &nsegm))
00511 {
00512 printf("CEVAL_POLYLINE: memohe nsegm\n");
00513 if (!lineins("? "))
00514 {
00515 return;
00516 }
00517 }
00518 if ((he = he_store[memohe]) == HNIL)
00519 {
00520 fprintf(stderr, MEN_MemoriaInvalida, NAM_DoEvalEdge, memohe);
00521 return;
00522 }
00523 if (nsegm < 2)
00524 {
00525 fprintf(stderr, MEN_NumeroDeSegmentosInvalido, NAM_DoEvalEdge);
00526 return;
00527 }
00528
00529 MSD_lowEvaluateCurvePolyline(he, nsegm);
00530 s = SheSSolids(FacFShell(LooLFace(HalWLoop(he))));
00531 MSD_lowSetNormal(s, TRUE);
00532 MSD_lowSetEdgeAngle(s);
00533 MSD_lowSetInfo(s);
00534
00535 if (TraceBoundaryStructure())
00536 {
00537 fprintf(stderr, MEN_MSDAbortou, NAM_DoEvalEdge);
00538 exit(1);
00539 }
00540 }
00541
00542 #endif
00543
00544 #endif