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

File Contents

# User Rev Content
1 1 /*****************************************************************
2    
3     m3d_i_triangle.cpp Type:Func
4    
5     Insertion d un triangle dans la phase 3D
6    
7     Date de creation : 12-3-1999 14 :12 :4
8     Derniere version : 12-3-1999 14 :12 :4
9    
10     Vincent FRANCOIS
11    
12     *****************************************************************/
13    
14    
15    
16    
17    
18     /**************************/
19     /* include */
20     #include <stdio.h>
21     #include <string.h>
22     #include <stdlib.h>
23     #include <math.h>
24     #include "const.h"
25     #include "memoire.h"
26     #include "struct.h"
27     #include "struct3d.h"
28     #include "prototype.h"
29    
30    
31     /**************************/
32     /* variables globales */
33     extern struct environnment env;
34     extern struct s_mesh *mesh;
35    
36    
37    
38    
39     /**************************/
40     /* programme principal */
41    
42     void m3d_i_triangle(struct s_triangle **tri,int n1, int n2, int n3, int type)
43     {
44     struct s_noeud *no1,*no2,*no3,*no;
45     struct s_triangle *tr,*trtmp;
46     struct s_segment *seg1,*seg2,*seg3;
47     int num,npetit;
48    
49     no1=ADRESSE(n1,noeud,mesh->);
50     no2=ADRESSE(n2,noeud,mesh->);
51     no3=ADRESSE(n3,noeud,mesh->);
52     tr=NULL;
53     if (type!=CREATION)
54     {
55     /*for (i=0;i<no1->nb_triangle;i++)
56     for (j=0;j<no2->nb_triangle;j++)
57     for (k=0;k<no3->nb_triangle;k++)
58     if ((no1->triangle[i]==no2->triangle[j])&&(no1->triangle[i]==no3->triangle[k]))
59     tr=no1->triangle[i];
60    
61     *tri=tr;*/
62     MINI(npetit,n1,n2);
63     MINI(npetit,npetit,n3);
64     no=ADRESSE(npetit,noeud,mesh->);
65     trtmp=no->tete_tri_petit;
66     while ((trtmp!=NULL)&&(tr==NULL))
67     {
68     if (((trtmp->n1==n1) && (trtmp->n2==n2) && (trtmp->n3==n3))
69     || ((trtmp->n1==n1) && (trtmp->n3==n2) && (trtmp->n2==n3))
70     || ((trtmp->n2==n1) && (trtmp->n3==n2) && (trtmp->n1==n3))
71     || ((trtmp->n2==n1) && (trtmp->n1==n2) && (trtmp->n3==n3))
72     || ((trtmp->n3==n1) && (trtmp->n2==n2) && (trtmp->n1==n3))
73     || ((trtmp->n3==n1) && (trtmp->n1==n2) && (trtmp->n2==n3)))
74     tr=trtmp;
75     trtmp=trtmp->suiv;
76     }
77    
78     *tri=tr;
79     if (type==LIMITE) return;
80     }
81     if (tr==NULL)
82     {
83     NEW_ENTITE(tr,triangle,mesh->);
84     tr->num=mesh->nb_triangle-1;
85     tr->n1=n1;
86     tr->n2=n2;
87     tr->n3=n3;
88     m3d_i_segment(&seg1,n1,n2);
89     m3d_i_segment(&seg2,n1,n3);
90     m3d_i_segment(&seg3,n2,n3);
91     tr->segment[0]=seg1;
92     tr->segment[1]=seg2;
93     tr->segment[2]=seg3;
94     tr->type=BODY;
95     NEW_POINTEUR(num,triangle,no1->);
96     no1->triangle[num]=tr;
97     NEW_POINTEUR(num,triangle,no2->);
98     no2->triangle[num]=tr;
99     NEW_POINTEUR(num,triangle,no3->);
100     no3->triangle[num]=tr;
101     *tri=tr;
102    
103     MINI(npetit,n1,n2);
104     MINI(npetit,npetit,n3);
105     no1=ADRESSE(npetit,noeud,mesh->);
106     if (no1->tete_tri_petit==NULL)
107     {
108     no1->tete_tri_petit=tr;
109     no1->queue_tri_petit=tr;
110     }
111     else
112     {
113     no1->queue_tri_petit->suiv=tr;
114     no1->queue_tri_petit=tr;
115     }
116    
117     }
118     }