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_execRevert(void)
00055 {
00056 int sn, dn, op;
00057
00058 while (sscanf(restbuf, "%d %d %d", &sn, &op, &dn) != 3)
00059 {
00060 printf("revert: Sid Shell");
00061 if (!lineins("? "))
00062 {
00063 return;
00064 }
00065 }
00066 MSD_highRevert(sn, dn);
00067 }
00068
00069 #endif
00070
00071 int MSD_highRevert(Id sn, Id dn)
00072 {
00073 SPTYPE s;
00074 DPTYPE d;
00075
00076 if ((s = MSD_getSolid(sn)) == SNIL)
00077 {
00078 fprintf(stderr, MEN_NaoEncontrouSolido, NAM_Revert, sn);
00079 return(ERROR);
00080 }
00081 if ((d = MSD_getShell(s, dn)) == DNIL)
00082 {
00083 fprintf(stderr, MEN_NaoEncontrouShell, NAM_Revert, sn, dn);
00084 return(ERROR);
00085 }
00086 return(MSD_lowRevert(d));
00087 }
00088
00089 int MSD_lowRevert(DPTYPE d)
00090 {
00091 SPTYPE s;
00092 FPTYPE f;
00093 LPTYPE l;
00094 HPTYPE l3;
00095 HPTYPE l3nxt;
00096 VPTYPE prev;
00097 VPTYPE sav;
00098 Id dn;
00099
00100 s = SheSSolids(d);
00101 if (Gdoinversion)
00102 {
00103 dn = SheShellNo(d);
00104 MSD_lowAddEulerOp(s, REVERT, dn, 0, 0, 0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0);
00105 }
00106 if (Gdodirect)
00107 {
00108 dn = SheShellNo(d);
00109 MSD_lowAddEulerOpRedo(s, REVERT, dn, 0, 0, 0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0);
00110 }
00111
00112 for (AllFacesShell(d, f))
00113 {
00114 for (AllLoopsFace(f, l))
00115 {
00116 l3 = LooLEdg(l);
00117 do
00118 {
00119 l3nxt = HalNxt(l3);
00120 HalNxt(l3) = HalPrv(l3);
00121 HalPrv(l3) = l3nxt;
00122 } while ((l3 = l3nxt) != LooLEdg(l));
00123 prev = HalVtx(HalPrv(l3));
00124 do
00125 {
00126 sav = HalVtx(l3);
00127 HalVtx(l3) = prev;
00128 VerVEdge(HalVtx(l3)) = l3;
00129 prev = sav;
00130 } while ((l3 = HalNxt(l3)) != LooLEdg(l));
00131 }
00132 }
00133
00134 #ifdef __curved_env
00135
00136 for (AllEdgesSolid(s, e))
00137 {
00138 if (polyltag(e->he1->curv))
00139 {
00140 l3 = e->he1;
00141 e->he1 = e->he2;
00142 e->he2 = l3;
00143 }
00144 }
00145 #endif
00146 if (SetTrace)
00147 {
00148 if (TraceSolid(s))
00149 {
00150 fprintf(stderr, MEN_MSDAbortou, NAM_Revert);
00151 exit(1);
00152 }
00153 }
00154 return(SUCCESS);
00155 }
00156
00157 int MSD_execStructRevert(EulerOp *op)
00158 {
00159 return(MSD_highRevert(op->solidno, op->ip1));
00160 }
00161
00162 void MSD_printStructRevert(FILE *f, EulerOp *op)
00163 {
00164 fprintf(f, "revert %d %d %d\n", op->solidno, op->CommandCount, op->ip1);
00165 }
00166
00167 int MSD_readStructRevert(FILE *f, EulerOp *op)
00168 {
00169 int solidno, ip1, com;
00170
00171 if (fscanf(f, "%d %d %d\n", &solidno, &com, &ip1) != 3)
00172 {
00173 return(ERROR);
00174 }
00175 op->solidno = solidno;
00176 op->CommandCount = com;
00177 op->ip1 = ip1;
00178 op->ip2 = 0;
00179 op->ip3 = 0;
00180 op->ip4 = 0;
00181 op->ip5 = 0;
00182 op->ip6 = 0;
00183 op->fp1 = 0.0;
00184 op->fp2 = 0.0;
00185 op->fp3 = 0.0;
00186 op->fp4 = 0.0;
00187 return(SUCCESS);
00188 }
00189
00190 int MSD_modifyStructRevert(EulerOp *op)
00191 {
00192 int solidno;
00193
00194 solidno = MSD_lowCheckTranslatorTable(op->solidno, SOLID);
00195 op->solidno = solidno;
00196 return(SUCCESS);
00197 }