ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/acismesh/m2d_i_triangle.cpp
Revision: 1
Committed: Mon Jun 11 22:53:07 2007 UTC (17 years, 11 months ago)
File size: 3983 byte(s)
Log Message:

File Contents

# User Rev Content
1 1 /*****************************************************************
2    
3     m2d_i_tringle.c Type:Func
4    
5     Insertion d un nouveau triangle
6    
7     Date de creation : Wed Feb 26 15:41:50 1997
8    
9     Derniere version : Wed Jul 2 17:11:02 1997
10    
11    
12    
13    
14    
15    
16    
17    
18    
19    
20     Vincent FRANCOIS
21    
22     *****************************************************************/
23    
24    
25    
26    
27    
28     /**************************/
29     /* include */
30     #include <stdio.h>
31     #include <stdlib.h>
32     #include <math.h>
33     #include "const.h"
34     #include "memoire.h"
35     #include "struct.h"
36     #include "prototype.h"
37    
38     /**************************/
39     /* variables globales */
40     extern struct environnement env;
41     extern struct s_mesh *mesh;
42    
43    
44     /**************************/
45     /* programme principal */
46    
47     void m2d_i_triangle(struct s_face *face,int n1,int n2,int n3,int origine)
48     {
49     struct s_triangle *ac_tri;
50     struct s_noeud *no1,*no2,*no3;
51     struct s_segment *seg;
52     int num,i,j,ok,npetit;
53    
54    
55    
56     NEW_ENTITE(ac_tri,triangle,mesh->);
57     ac_tri->num=mesh->nb_triangle-1;
58     ac_tri->n1=n1;
59     ac_tri->n2=n2;
60     ac_tri->n3=n3;
61     ac_tri->crit=m2d_cal_qual(n1,n2,n3);
62     ac_tri->type=FACE;
63     ac_tri->num_ent=face->num;
64     ac_tri->origine=origine;
65     ac_tri->creation=CONSTRUIT;
66     if (mesh->nb_triangle==1)
67     {
68     mesh->critmin=ac_tri->crit;
69     mesh->critmax=ac_tri->crit;
70     mesh->critmoy=0.;
71     mesh->tabcrit[0]=0;
72     mesh->tabcrit[1]=0;
73     mesh->tabcrit[2]=0;
74     mesh->tabcrit[3]=0;
75     }
76     mesh->critmoy=mesh->critmoy+ac_tri->crit;
77     if (mesh->critmin>ac_tri->crit) mesh->critmin=ac_tri->crit;
78     if (mesh->critmax<ac_tri->crit) mesh->critmax=ac_tri->crit;
79     if (ac_tri->crit>0.75) mesh->tabcrit[3]++;
80     else if (ac_tri->crit>0.5) mesh->tabcrit[2]++;
81     else if (ac_tri->crit>0.25) mesh->tabcrit[1]++;
82     else mesh->tabcrit[0]++;
83     no1=ADRESSE(n1,noeud,mesh->);
84     NEW_POINTEUR(num,triangle,no1->);
85     no1->triangle[num]=ac_tri;
86     no2=ADRESSE(n2,noeud,mesh->);
87     NEW_POINTEUR(num,triangle,no2->);
88     no2->triangle[num]=ac_tri;
89     no3=ADRESSE(n3,noeud,mesh->);
90     NEW_POINTEUR(num,triangle,no3->);
91     no3->triangle[num]=ac_tri;
92     NEW_POINTEUR(num,triangle,face->);
93     face->triangle[num]=ac_tri;
94     o2d_ord_tri(ac_tri);
95    
96     MINI(npetit,n1,n2);
97     MINI(npetit,npetit,n3);
98     no1=ADRESSE(npetit,noeud,mesh->);
99     if (no1->tete_tri_petit==NULL)
100     {
101     no1->tete_tri_petit=ac_tri;
102     no1->queue_tri_petit=ac_tri;
103     }
104     else
105     {
106     no1->queue_tri_petit->suiv=ac_tri;
107     no1->queue_tri_petit=ac_tri;
108     }
109    
110    
111    
112    
113    
114     /* liaison triangle segment */
115     /* segment n1 n2 */
116     ok=0;i=0;
117     while ((i<no1->nb_segment) && (ok==0))
118     {
119     j=0;
120     while ( (j<no2->nb_segment) && (ok==0))
121     {
122     if (no1->segment[i]==no2->segment[j])
123     {
124     ok=1;
125     seg=no1->segment[i];
126     }
127     j++;
128     }
129     i++;
130     }
131     ac_tri->segment[0]=seg;
132     /* segment n1 n3 */
133     ok=0;i=0;
134     while ((i<no1->nb_segment) && (ok==0))
135     {
136     j=0;
137     while ( (j<no3->nb_segment) && (ok==0))
138     {
139     if (no1->segment[i]==no3->segment[j])
140     {
141     ok=1;
142     seg=no1->segment[i];
143     }
144     j++;
145     }
146     i++;
147     }
148     ac_tri->segment[1]=seg;
149     /* segment n3 n2 */
150     ok=0;i=0;
151     while ((i<no2->nb_segment) && (ok==0))
152     {
153     j=0;
154     while ( (j<no3->nb_segment) && (ok==0))
155     {
156     if (no2->segment[i]==no3->segment[j])
157     {
158     ok=1;
159     seg=no2->segment[i];
160     }
161     j++;
162     }
163     i++;
164     }
165     ac_tri->segment[2]=seg;
166    
167    
168     }