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 "lowsolid.h"
00050 #include "eulerops.h"
00051 #include "mancommd.h"
00052
00053 #ifdef __Extended_Version
00054 void MSD_execMFKRH(void)
00055 {
00056 int sn, f1, f2, op;
00057
00058 while (4 != sscanf(restbuf, "%d %d %d %d", &sn, &op, &f1, &f2))
00059 {
00060 printf("mfkrh: Sid F1 F2\n");
00061 if (!lineins("? "))
00062 {
00063 return;
00064 }
00065 }
00066 MSD_highMFKRH(sn, f1, f2);
00067 }
00068
00069 #endif
00070
00071 int MSD_highMFKRH(Id sn, Id f1, Id f2)
00072 {
00073 SPTYPE s;
00074 FPTYPE f;
00075 LPTYPE ring;
00076
00077 if ((s = MSD_getSolid(sn)) == SNIL)
00078 {
00079 fprintf(stderr, MEN_NaoEncontrouSolido, NAM_MFKRH, sn);
00080 return(ERROR);
00081 }
00082 if ((f = MSD_getFace(s, f1)) == FNIL)
00083 {
00084 fprintf(stderr, MEN_NaoEncontrouFace, NAM_MFKRH, f1, sn);
00085 return(ERROR);
00086 }
00087 for (ring = FacFLoops(f); ring == FacFLOut(f); ring = LooNextL(ring))
00088 {
00089 ;
00090 }
00091 MSD_lowMFKRH(f, ring, f2);
00092 return(SUCCESS);
00093 }
00094
00095 #ifdef __Extended_Version
00096 void MSD_execMFKRH2(void)
00097 {
00098 int sn, f1, f2, v1, v2, op;
00099
00100 while (6 != sscanf(restbuf, "%d %d %d %d %d %d", &sn, &op, &f1, &f2, &v1, &v2))
00101 {
00102 printf("mfkrh2: Sid F1 F2 V1 V2\n");
00103 if (!lineins("? "))
00104 {
00105 return;
00106 }
00107 }
00108 MSD_highMFKRH2(sn, f1, f2, v1, v2);
00109 }
00110
00111 #endif
00112
00113 int MSD_highMFKRH2(Id sn, Id f1, Id f2, Id v1, Id v2)
00114 {
00115 SPTYPE s;
00116 FPTYPE f;
00117 LPTYPE ring;
00118 HPTYPE he1;
00119
00120 if ((s = MSD_getSolid(sn)) == SNIL)
00121 {
00122 fprintf(stderr, MEN_NaoEncontrouSolido, NAM_MFKRH2, sn);
00123 return(ERROR);
00124 }
00125 if ((f = MSD_getFace(s, f1)) == FNIL)
00126 {
00127 fprintf(stderr, MEN_NaoEncontrouFace, NAM_MFKRH2, f1);
00128 return(ERROR);
00129 }
00130 if ((ring = MSD_getEdge(f, v1, v2, &he1)) == LNIL)
00131 {
00132 fprintf(stderr, MEN_NaoEncontrouArestaV, NAM_MFKRH2, v1, v2, sn);
00133 return(ERROR);
00134 }
00135 MSD_lowMFKRH(f, ring, f2);
00136 return(SUCCESS);
00137 }
00138
00139 FPTYPE MSD_lowMFKRH(FPTYPE f, LPTYPE l, Id fn)
00140 {
00141 SPTYPE s;
00142 DPTYPE d;
00143 FPTYPE nf;
00144 Id f1;
00145 Id v1, v2;
00146
00147 assert1(LooNextL(FacFLoops(f)) != LNIL);
00148 assert1(FacFLOut(f) != l);
00149 assert1(LooLFace(l) == f);
00150
00151 d = FacFShell(f);
00152 s = SheSSolids(d);
00153 if (Gdoinversion)
00154 {
00155 f1 = FacFaceNo(f);
00156 MSD_lowAddEulerOp(s, KFMRH, f1, fn, 0, 0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0);
00157 }
00158 if (Gdodirect)
00159 {
00160 f1 = FacFaceNo(f);
00161 v1 = VerVertexNo(HalVtx(LooLEdg(l)));
00162 v2 = VerVertexNo(HalVtx(HalNxt(LooLEdg(l))));
00163 MSD_lowAddEulerOpRedo(s, MFKRH, f1, fn, v1, v2, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0);
00164 }
00165
00166 nf = (FPTYPE)MSD_lowNewElement(FACE, (NPTYPE)d);
00167
00168 FacFaceNo(nf) = fn;
00169 MSD_lowDelList(LOOP, (NPTYPE)l, (NPTYPE)f);
00170 MSD_lowAddList(LOOP, (NPTYPE)l, (NPTYPE)nf);
00171 FacFLOut(nf) = l;
00172 if (FacFLOut(f) == l)
00173 {
00174 fprintf(stderr, "#");
00175 FacFLOut(f) = FacFLoops(f);
00176 }
00177
00178 MSD_addEulCoef(s, 0, 1, -1, 0, 0, -1);
00179
00180 if (SetTrace)
00181 {
00182 if (TraceSolid(s))
00183 {
00184 fprintf(stderr, MEN_MSDAbortou, NAM_MFKRH);
00185 exit(1);
00186 }
00187 }
00188 return(nf);
00189 }
00190
00191 int MSD_execStructMFKRH(EulerOp *op)
00192 {
00193 Id sid, id1, id2, id3, id4;
00194
00195 sid = op->solidno;
00196 id1 = op->ip1;
00197 id2 = op->ip2;
00198 id3 = op->ip3;
00199 id4 = op->ip4;
00200 return(MSD_highMFKRH2(sid, id1, id2, id3, id4));
00201 }
00202
00203 void MSD_printStructMFKRH(FILE *f, EulerOp *op)
00204 {
00205 Id sid, id1, id2, id3, id4;
00206 int com;
00207
00208 sid = op->solidno;
00209 id1 = op->ip1;
00210 id2 = op->ip2;
00211 id3 = op->ip3;
00212 id4 = op->ip4;
00213 com = op->CommandCount;
00214 fprintf(f, "mfkrh %d %d %d %d %d %d\n", sid, com, id1, id2, id3, id4);
00215 }
00216
00217 int MSD_readStructMFKRH(FILE *f, EulerOp *op)
00218 {
00219 int solidno, ip1, ip2, ip3, ip4, com;
00220
00221 if (fscanf(f, "%d %d %d %d %d %d\n", &solidno, &com, &ip1, &ip2, &ip3, &ip4) != 6)
00222 {
00223 return(ERROR);
00224 }
00225 op->solidno = solidno;
00226 op->CommandCount = com;
00227 op->ip1 = ip1;
00228 op->ip2 = ip2;
00229 op->ip3 = ip3;
00230 op->ip4 = ip4;
00231 op->ip5 = 0;
00232 op->ip6 = 0;
00233 op->ip7 = 0;
00234 op->ip8 = 0;
00235 op->fp1 = 0.0;
00236 op->fp2 = 0.0;
00237 op->fp3 = 0.0;
00238 op->fp4 = 0.0;
00239 return(SUCCESS);
00240 }
00241
00242 int MSD_modifyStructMFKRH(EulerOp *op)
00243 {
00244 int solidno;
00245
00246 solidno = MSD_lowCheckTranslatorTable(op->solidno, SOLID);
00247 op->solidno = solidno;
00248 return(SUCCESS);
00249 }