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 #define __discdisp_c
00042 #include <stdio.h>
00043 #include <string.h>
00044 #ifndef __UNIX_
00045 #ifndef _Windows
00046 #include <graphics.h>
00047 #else
00048 #include <windows.h>
00049 #endif
00050 #endif
00051 #include "mensagem.h"
00052 #include "memvirtu.h"
00053 #include "lowparam.h"
00054 #include "lowmacro.h"
00055 #include "lowsolid.h"
00056 #include "hiegroup.h"
00057 #include "disdispl.h"
00058 #include "gphgraph.h"
00059 #include "genfunc_.h"
00060 #include "shpshape.h"
00061 #include "vectorop.h"
00062 #include "mancommd.h"
00063
00064 void MSD_execDisplay(void)
00065 {
00066 char *olist, *oname;
00067 char name1[15];
00068 int pn;
00069
00070 oname = olist = (char *)workbuf;
00071 for (pn = 0; pn == 0;)
00072 {
00073 if (sscanf(restbuf, "%s", name1) == 1)
00074 {
00075 skipnext(&restbuf);
00076 for ( ; sscanf(restbuf, "%s", oname) == 1; ++pn)
00077 {
00078 skipnext(&restbuf);
00079 oname += strlen(oname) + 1;
00080 }
00081 *oname = NIL;
00082 }
00083 if (pn == 0)
00084 {
00085 printf("camera objeto/grupo ...\n");
00086 if (!lineins("? "))
00087 {
00088 return;
00089 }
00090 }
00091 }
00092 MSD_highNameDisplay(name1, olist);
00093 }
00094
00095 int MSD_highNameDisplay(char *cname, char *olist)
00096 {
00097 CTYPE *cptr;
00098
00099 if ((cptr = MSD_lowFindCameraByName(cname)) == (CTYPE *)NIL)
00100 {
00101 fprintf(stderr, MEN_CamaraNomeNaoEncontrada,
00102 NAM_Display, cname);
00103 return(FALSE);
00104 }
00105 camptr = cptr;
00106 if (MSD_highNameSetDisplay(olist))
00107 {
00108 #if !defined (__UNIX) && !defined (_Windows)
00109 MSD_lowSetBreakInterruption();
00110 #endif
00111
00112 switch (cptr->hid)
00113 {
00114 case 0:
00115 MSD_highDisplayAllEdges();
00116 break;
00117
00118 case 1:
00119 MSD_highDisplayLocalHidden();
00120 break;
00121
00122 case 2:
00123 MSD_lowCameraDisplayHidden();
00124 break;
00125
00126 case 3:
00127 MSD_lowCameraDisplayIntersection();
00128 }
00129
00130 #if !defined (__UNIX) && !defined (_Windows)
00131 MSD_lowSetBreakResident();
00132 #endif
00133
00134 if (dspfwptr)
00135 {
00136 fclose(dspfwptr);
00137 dspfwptr = (FILE *)NIL;
00138 }
00139 }
00140 #ifdef __UNIX_
00141 GGGraphicFlush();
00142 #endif
00143 return(TRUE);
00144 }
00145
00146 int MSD_highNameSetDisplay(char *oname)
00147 {
00148 SPTYPE optr;
00149 GPTYPE gptr;
00150
00151 if (!strcmp(oname, "**"))
00152 {
00153 for (AllSolids(optr))
00154 {
00155 SolDsp(optr) = TRUE;
00156 }
00157 return(TRUE);
00158 }
00159
00160 for (AllSolids(optr))
00161 {
00162 SolDsp(optr) = FALSE;
00163 }
00164 for ( ; *oname; oname += strlen(oname) + 1)
00165 {
00166 if (!strcmp(oname, "*"))
00167 {
00168 for (AllSolids(optr))
00169 {
00170 if (SolGroup(optr) == def_grpptr)
00171 {
00172 SolDsp(optr) = TRUE;
00173 }
00174 }
00175 }
00176 else
00177 {
00178 switch (MSD_getTypeByName(oname))
00179 {
00180 case 'o':
00181 optr = MSD_lowFindSolidByName(oname);
00182 SolDsp(optr) = TRUE;
00183 break;
00184
00185 case 'g':
00186 gptr = MSD_lowFindGroupByName(oname);
00187 for (AllSolids(optr))
00188 {
00189 if (MSD_lowIsAncestorGroup(gptr, SolGroup(optr)))
00190 {
00191 SolDsp(optr) = TRUE;
00192 }
00193 }
00194 break;
00195
00196 default:
00197 fprintf(stderr, MEN_ElementoNaoEncontrado,
00198 NAM_Display, oname);
00199 return(FALSE);
00200 }
00201 }
00202 }
00203 return(TRUE);
00204 }
00205
00206 void MSD_highDisplayAllEdges(void)
00207 {
00208 CTYPE *cptr;
00209
00210 if (camptr->mode == 3)
00211 {
00212 cptr = camptr;
00213 camptr = &camera3;
00214 MSD_lowSetCamera3View(1, cptr);
00215 MSD_lowDisplayAllEdges();
00216 MSD_lowSetCamera3View(2, cptr);
00217 MSD_lowDisplayAllEdges();
00218 MSD_lowSetCamera3View(3, cptr);
00219 MSD_lowDisplayAllEdges();
00220 MSD_lowSetCamera3View(4, cptr);
00221 MSD_lowDisplayAllEdges();
00222 MSD_lowSetCamera3View(0, cptr);
00223 }
00224 else
00225 {
00226 MSD_lowDisplayAllEdges();
00227 }
00228 }
00229
00230 void MSD_lowDisplayAllEdges(void)
00231 {
00232 SPTYPE optr;
00233 DPTYPE dptr;
00234 EPTYPE eptr;
00235 VPTYPE vptr;
00236 vector v1, v2;
00237
00238 g_frame();
00239 for (AllSolids(optr))
00240 {
00241 if (SolDsp(optr) != TRUE)
00242 {
00243 continue;
00244 }
00245 g_pcolor(MSD_lowGetSolidColor(optr));
00246 for (AllShellsSolid(optr, dptr))
00247 {
00248 for (AllEdgesShell(dptr, eptr))
00249 {
00250 if (breakflg)
00251 {
00252 return;
00253 }
00254 veccopy(v1, VerVCoord(HalVtx(EdgHe1(eptr))));
00255 veccopy(v2, VerVCoord(HalVtx(EdgHe2(eptr))));
00256 MSD_lowDisplayLine(SOLID_LINE, v1, v2);
00257 }
00258 for (AllVerticesShell(dptr, vptr))
00259 {
00260 if (breakflg)
00261 {
00262 return;
00263 }
00264 veccopy(v1, VerVCoord(vptr));
00265 MSD_lowDisplayVertex(SOLID_LINE, v1);
00266 }
00267 }
00268 }
00269 }
00270
00271 void MSD_highDisplayLocalHidden(void)
00272 {
00273 CTYPE *cptr;
00274
00275 if (camptr->mode == 3)
00276 {
00277 cptr = camptr;
00278 camptr = &camera3;
00279 MSD_lowSetCamera3View(1, cptr);
00280 MSD_lowDisplayLocalHidden(camptr);
00281 MSD_lowSetCamera3View(2, cptr);
00282 MSD_lowDisplayLocalHidden(camptr);
00283 MSD_lowSetCamera3View(3, cptr);
00284 MSD_lowDisplayLocalHidden(camptr);
00285 MSD_lowSetCamera3View(4, cptr);
00286 MSD_lowDisplayLocalHidden(camptr);
00287 MSD_lowSetCamera3View(0, cptr);
00288 }
00289 else
00290 {
00291 MSD_lowDisplayLocalHidden(camptr);
00292 }
00293 }
00294
00295 void MSD_lowDisplayLocalHidden(CTYPE *cptr)
00296 {
00297 SPTYPE optr;
00298 DPTYPE dptr;
00299 FPTYPE fptr;
00300 EPTYPE eptr;
00301 vector v1, v2;
00302
00303 g_frame();
00304 for (AllSolids(optr))
00305 {
00306 if (SolDsp(optr) == TRUE)
00307 {
00308 g_pcolor(MSD_lowGetSolidColor(optr));
00309 for (AllShellsSolid(optr, dptr))
00310 {
00311 for (AllFacesShell(dptr, fptr))
00312 {
00313 FacFVisi(fptr) = MSD_lowIsFaceVisible(cptr, fptr);
00314 }
00315 }
00316
00317 for (AllShellsSolid(optr, dptr))
00318 {
00319 for (AllEdgesShell(dptr, eptr))
00320 {
00321 if (breakflg)
00322 {
00323 return;
00324 }
00325 switch (MSD_lowIsEdgeVisible(cptr, eptr))
00326 {
00327 case INVISIBLE:
00328 if (cptr->dash == TRUE)
00329 {
00330 veccopy(v1, VerVCoord(HalVtx(EdgHe1(eptr))));
00331 veccopy(v2, VerVCoord(HalVtx(EdgHe2(eptr))));
00332 MSD_lowDisplayLine(DASHED_LINE, v1, v2);
00333 }
00334 break;
00335
00336 case _VISIBLE:
00337 veccopy(v1, VerVCoord(HalVtx(EdgHe1(eptr))));
00338 veccopy(v2, VerVCoord(HalVtx(EdgHe2(eptr))));
00339 MSD_lowDisplayLine(SOLID_LINE, v1, v2);
00340 }
00341 }
00342 }
00343 }
00344 }
00345 }
00346
00347 void MSD_lowDisplayLine(int l, vector sv, vector ev)
00348 {
00349 vect2 sv2, ev2;
00350
00351 if (MSD_lowExecDisplayTransformation(sv, ev, sv2, ev2))
00352 {
00353 g_tline(l, sv2, ev2);
00354 }
00355 }
00356
00357 void MSD_lowDisplayVertex(int l, vector v)
00358 {
00359 vect2 sv2, ev2;
00360
00361 if (MSD_lowExecDisplayTransformation(v, v, sv2, ev2))
00362 {
00363 g_tpoint(l, sv2);
00364 }
00365 }