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 #include "mensagem.h"
00044 #include "memvirtu.h"
00045 #include "lowparam.h"
00046 #include "lowmacro.h"
00047 #include "lowsolid.h"
00048 #include "eulerops.h"
00049 #include "mancommd.h"
00050
00051
00052 #ifdef __Extended_Version
00053 void MSD_execNameSoftRemove(void)
00054 {
00055 char name[30];
00056
00057 while (1 != sscanf(restbuf, "%s", name))
00058 {
00059 printf("SoftRemove: name\n");
00060 if (!lineins("? "))
00061 {
00062 return;
00063 }
00064 }
00065 MSD_highNameSoftRemove(name);
00066 }
00067
00068 #endif
00069
00070 int MSD_highNameSoftRemove(char *name)
00071 {
00072 SPTYPE sptr;
00073
00074 if ((sptr = MSD_lowFindSolidByName(name)) == SNIL)
00075 {
00076 fprintf(stderr, MEN_NaoEncontrouSolidNome, NAM_SoftRemove, name);
00077 return(FALSE);
00078 }
00079 return(MSD_lowSoftRemove(sptr));
00080 }
00081
00082 #ifdef __Extended_Version
00083 void MSD_execSoftRemove(void)
00084 {
00085 int sn;
00086
00087 while (sscanf(restbuf, "%d", &sn) != 1)
00088 {
00089 printf("solidrm: Sid");
00090 if (!lineins("? "))
00091 {
00092 return;
00093 }
00094 }
00095 MSD_highSoftRemove(sn);
00096 }
00097
00098 #endif
00099
00100 int MSD_highSoftRemove(Id sn)
00101 {
00102 SPTYPE s;
00103
00104 if ((s = MSD_getSolid(sn)) == SNIL)
00105 {
00106 fprintf(stderr, MEN_NaoEncontrouSolido, NAM_SoftRemove, sn);
00107 return(ERROR);
00108 }
00109 return(MSD_lowSoftRemove(s));
00110 }
00111
00112 int MSD_lowSoftRemove(SPTYPE s)
00113 {
00114 char nome[13];
00115
00116 if (SolGroup(s) != GNIL)
00117 {
00118 MSD_highDesassociaGroupSolid(GrpGroupNo(SolGroup(s)), SolSolidNo(s));
00119 }
00120
00121 strcpy(nome, SolName(s));
00122 MSD_lowSolidColor(s, SolColor(s));
00123 MSD_lowSolidName(s, nome);
00124
00125
00126 if (SolSShells(s) != DNIL)
00127 {
00128 MSD_lowShellRemove(s);
00129 MSD_lowEdgeRemove(s);
00130 MSD_lowFaceRemove(s);
00131 MSD_lowKVSF(s);
00132 }
00133 return(SUCCESS);
00134 }
00135
00136 void MSD_lowShellRemove(SPTYPE s)
00137 {
00138 DPTYPE d;
00139
00140 while ((d = SheNextD(SolSShells(s))) != DNIL)
00141 {
00142 MSD_lowKSFMR(SheSFaces(SolSShells(s)), SheSFaces(d));
00143 }
00144 }
00145
00146 void MSD_lowEdgeRemove(SPTYPE s)
00147 {
00148 EPTYPE e;
00149 LPTYPE l1;
00150 LPTYPE l2;
00151
00152 maxf = MSD_getMaxFaceId(s);
00153 while ((e = SheSEdges(SolSShells(s))) != ENIL)
00154 {
00155 if ((l1 = HalWLoop(EdgHe1(e))) == (l2 = HalWLoop(EdgHe2(e))))
00156 {
00157 if (HalNxt(EdgHe1(e)) == EdgHe2(e))
00158 {
00159 MSD_lowKEV(EdgHe2(e), EdgHe1(e));
00160 }
00161 else
00162 if (HalNxt(EdgHe2(e)) == EdgHe1(e))
00163 {
00164 MSD_lowKEV(EdgHe1(e), EdgHe2(e));
00165 }
00166 else
00167 {
00168 MSD_lowKEMR(EdgHe1(e), EdgHe2(e));
00169 }
00170 }
00171 else
00172 if (LooLFace(l1) != LooLFace(l2))
00173 {
00174 MSD_lowKEF(EdgHe1(e), EdgHe2(e));
00175 }
00176 else
00177 {
00178 MSD_lowMFKRH(LooLFace(l1), (l1 == FacFLOut(LooLFace(l1)))
00179 ? l2 : l1, ++maxf);
00180 }
00181 }
00182 }
00183
00184 void MSD_lowFaceRemove(SPTYPE s)
00185 {
00186 FPTYPE f1;
00187 FPTYPE f2;
00188 LPTYPE out;
00189 LPTYPE ring;
00190
00191 for (AllFacesShell(SolSShells(s), f1))
00192 {
00193 out = FacFLOut(f1);
00194 ring = FacFLoops(f1);
00195 while (LooNextL(FacFLoops(f1)) != LNIL)
00196 {
00197 if (ring != out)
00198 {
00199 HPTYPE he1 = LooLEdg(out);
00200 HPTYPE he2 = LooLEdg(ring);
00201 MSD_lowMEKR(he1, he2);
00202 MSD_lowKEV(he1, he2);
00203 ring = FacFLoops(f1);
00204 }
00205 else
00206 {
00207 ring = LooNextL(ring);
00208 }
00209 }
00210 }
00211 f1 = SheSFaces(SolSShells(s));
00212 while ((f2 = FacNextF(f1)) != FNIL)
00213 {
00214 MSD_lowKFMRH(f1, f2);
00215 MSD_lowMEKR(LooLEdg(FacFLoops(f1)), LooLEdg(LooNextL(FacFLoops(f1))));
00216 MSD_lowKEV(LooLEdg(FacFLoops(f1)), mate(LooLEdg(FacFLoops(f1))));
00217 }
00218 }