1 |
francois |
283 |
#include <stdio.h> |
2 |
|
|
#include <string.h> |
3 |
|
|
#include "p3d_cst.h" |
4 |
|
|
#include "m3d_struct.h" |
5 |
|
|
#include "m3d_hotes.h" |
6 |
|
|
#include "m3d_erreur.h" |
7 |
|
|
#define MAX_LINE 256 |
8 |
|
|
#include "prototype.h" |
9 |
|
|
extern int debug ; |
10 |
|
|
extern int check ; |
11 |
|
|
extern GEST_MEM *gest ; |
12 |
|
|
int p3d_connec(void) |
13 |
|
|
{ |
14 |
|
|
/* ************************************************* */ |
15 |
|
|
/* declaration des variables internes a la procedure */ |
16 |
|
|
int i, num1, num2, num3 ; |
17 |
|
|
int is_fich = 0 ; |
18 |
|
|
char *ext ; |
19 |
|
|
char temp[MAX_LINE] ; |
20 |
|
|
FILE *stream ; |
21 |
|
|
|
22 |
|
|
/* |
23 |
|
|
table contenant les tetes de liste de segments |
24 |
|
|
tab_seg[i] contient la tete de liste des segments |
25 |
|
|
dont le premier noeud est le noeud de numero i |
26 |
|
|
Ces segments sont crees a partir des elements |
27 |
|
|
*/ |
28 |
|
|
SEGMENT *tete ; |
29 |
|
|
/* insertion d'un segment dans la table des segments commencant par le meme noeud */ |
30 |
|
|
|
31 |
|
|
/* ************************************************* */ |
32 |
|
|
/* debut du code executable */ |
33 |
|
|
/* parcours du tableau des elements et creation des segments */ |
34 |
|
|
/* par element on rentre 3 segments */ |
35 |
|
|
/* parcours de la liste des elements */ |
36 |
|
|
for (i=0;i<gest->nb_2d;i++) |
37 |
|
|
{ |
38 |
|
|
num1 = gest->tabele[3*i] ; |
39 |
|
|
num2 = gest->tabele[3*i+1] ; |
40 |
|
|
num3 = gest->tabele[3*i+2] ; |
41 |
|
|
if (!p3d_i_segtab(num1,num2,i)) return(FAUX) ; |
42 |
|
|
if (!p3d_i_segtab(num1,num3,i)) return(FAUX) ; |
43 |
|
|
if (!p3d_i_segtab(num2,num3,i)) return(FAUX) ; |
44 |
|
|
} |
45 |
|
|
/* en sortie, on a des listes d'aretes d'elements rangees suivant le premier noeud */ |
46 |
|
|
|
47 |
|
|
/* construction des connectivites : |
48 |
|
|
les elements connectes a chaque arete doivent etre au nombre de 2 exactement, |
49 |
|
|
si moins : la peau est ouverte, si plus : mauvaise definition du probleme */ |
50 |
|
|
/* parcours du tableau tab */ |
51 |
|
|
|
52 |
|
|
if (!check) |
53 |
|
|
{ |
54 |
|
|
i = 0 ; |
55 |
|
|
while (i<gest->nb_init) |
56 |
|
|
{ |
57 |
|
|
tete = gest->tab_seg[i] ; |
58 |
|
|
while (tete!=NULL) |
59 |
|
|
{ |
60 |
|
|
if (tete->card<2) |
61 |
|
|
{ |
62 |
|
|
if (!is_fich) |
63 |
|
|
{ |
64 |
|
|
is_fich = VRAI ; |
65 |
|
|
ext = (char*)".ERR" ; |
66 |
|
|
temp[0] = 0 ; |
67 |
|
|
strcpy(temp,gest->buffer) ; |
68 |
|
|
strncat(temp,ext,4) ; |
69 |
|
|
if (!(stream = fopen(temp,"w"))) |
70 |
|
|
{ |
71 |
|
|
m3d_erreur(ERR_FIN) ; |
72 |
|
|
return(FAUX) ; |
73 |
|
|
} |
74 |
|
|
fprintf(stream,"*************************************************************************************\n") ; |
75 |
|
|
fprintf(stream,"-----------------------------------DIAMESH-------------------------------------------\n") ; |
76 |
|
|
fprintf(stream," ANOMALIES EVENTUELLES DU MAILLAGE DE PEAU - SKIN MESH ERRORS \n") ; |
77 |
|
|
fprintf(stream,"*************************************************************************************\n\n") ; |
78 |
|
|
fprintf(stream,"Une arete doit etre connectee a au moins 2 triangles\n") ; |
79 |
|
|
fprintf(stream,"An edge must be connected to 2 triangles exactly\n\n") ; |
80 |
|
|
} |
81 |
|
|
fprintf(stream,"L'arete %d-%d est connectee a %d triangles - Edge %d-%d is linked to %d triangles\n", |
82 |
|
|
gest->tabcor[tete->n1+1],gest->tabcor[tete->n2+1],tete->card,gest->tabcor[tete->n1+1],gest->tabcor[tete->n2+1],tete->card) ; |
83 |
|
|
} |
84 |
|
|
tete=tete->suivant ; |
85 |
|
|
} |
86 |
|
|
i ++ ; |
87 |
|
|
} |
88 |
|
|
} |
89 |
|
|
else |
90 |
|
|
{ |
91 |
|
|
i = 0 ; |
92 |
|
|
while (i<gest->nb_init) |
93 |
|
|
{ |
94 |
|
|
tete = gest->tab_seg[i] ; |
95 |
|
|
while (tete!=NULL) |
96 |
|
|
{ |
97 |
|
|
if (tete->card!=2) |
98 |
|
|
{ |
99 |
|
|
if (!is_fich) |
100 |
|
|
{ |
101 |
|
|
is_fich = VRAI ; |
102 |
|
|
ext = (char*)".ERR" ; |
103 |
|
|
temp[0] = 0 ; |
104 |
|
|
strcpy(temp,gest->name) ; |
105 |
|
|
strncat(temp,ext,4) ; |
106 |
|
|
if (!(stream = fopen(temp,"w"))) |
107 |
|
|
{ |
108 |
|
|
m3d_erreur(ERR_FIN) ; |
109 |
|
|
return(FAUX) ; |
110 |
|
|
} |
111 |
|
|
fprintf(stream,"*************************************************************************************\n") ; |
112 |
|
|
fprintf(stream,"-----------------------------------DIAMESH-------------------------------------------\n") ; |
113 |
|
|
fprintf(stream," ANOMALIES EVENTUELLES DU MAILLAGE DE PEAU - SKIN MESH ERRORS \n") ; |
114 |
|
|
fprintf(stream,"*************************************************************************************\n\n") ; |
115 |
|
|
fprintf(stream,"Une arete doit etre connectee a au moins 2 triangles\n") ; |
116 |
|
|
fprintf(stream,"An edge must be connected to 2 triangles exactly\n\n") ; |
117 |
|
|
} |
118 |
|
|
fprintf(stream,"L'arete %d-%d est connectee a %d triangles - Edge %d-%d is linked to %d triangles\n", |
119 |
|
|
gest->tabcor[tete->n1+1],gest->tabcor[tete->n2+1],tete->card,gest->tabcor[tete->n1+1],gest->tabcor[tete->n2+1],tete->card) ; |
120 |
|
|
} |
121 |
|
|
tete=tete->suivant ; |
122 |
|
|
} |
123 |
|
|
i ++ ; |
124 |
|
|
} |
125 |
|
|
} |
126 |
|
|
if (is_fich) fclose(stream) ; |
127 |
|
|
if (is_fich) m3d_erreur(ERR_SKIN) ; |
128 |
|
|
|
129 |
|
|
if (gest->icode != FAUX) return(FAUX) ; |
130 |
|
|
return(VRAI) ; |
131 |
|
|
} |
132 |
|
|
|
133 |
|
|
|