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

File Contents

# Content
1 /*****************************************************************
2
3 m2d_ini_front.c Type:Func
4
5 Initialisation du front
6
7 Date de creation : Wed Feb 5 17:23:50 1997
8
9 Derniere version : Fri May 9 11:46:46 1997
10
11
12
13
14
15
16
17
18
19
20
21
22 Vincent FRANCOIS
23
24 *****************************************************************/
25
26
27
28
29
30 /**************************/
31 /* include */
32 #include <stdio.h>
33 #include <string.h>
34 #include "const.h"
35 #include "memoire.h"
36 #include "struct.h"
37 #include "prototype.h"
38
39
40 /**************************/
41 /* variables globales */
42 extern struct environnment env;
43 extern struct s_mesh *mesh;
44
45
46
47 /**************************/
48 /* programme principal */
49
50 void m2d_ini_front(struct s_face *face)
51 {
52 struct s_segment *seg,*ac_seg,*segref;
53 struct s_noeud *no1,*no2,*no_dep,*no,*no_fin;
54 struct s_front *ft,*ftp,*ft_premier;
55 struct s_frontiere *fr;
56 struct s_loop *loop;
57 struct s_coedge *coedge;
58 int i,premier;
59
60
61 for (i=0;i<mesh->nb_segment;i++)
62 {
63 seg=ADRESSE(i,segment,mesh->);
64 no1=ADRESSE(seg->n1,noeud,mesh->);
65 no2=ADRESSE(seg->n2,noeud,mesh->);
66 if ((no1->indice==face->num)&&(no2->indice==face->num)) qu_ins_obj(SEGMENT,seg->num,mesh->root);
67 }
68 for (i=0;i<mesh->nb_frontiere;i++)
69 {
70 fr=ADRESSE(i,frontiere,mesh->);
71 qu_ins_obj(FRONTIERE,fr->num,mesh->root);
72 }
73
74
75
76 /* constitution du front */
77 for (loop=face->first_loop;loop!=NULL;loop=loop->next_loop)
78 {
79 coedge=loop->first_coedge;
80 if (coedge->sense==FORWARD) no_dep=coedge->edge->start_vertex->noeud;
81 else no_dep=coedge->edge->end_vertex->noeud;
82 no=no_dep;
83 ftp=NULL;
84 premier=0;
85 do
86 {
87 if (no==coedge->edge->start_vertex->noeud) no_fin=coedge->edge->end_vertex->noeud;
88 else no_fin=coedge->edge->start_vertex->noeud;
89 ac_seg=NULL;
90 do
91 {
92 if (((coedge->sense==REVERSED)^((no_dep->num==no_fin->num) && (coedge->edge->sense==REVERSED)))==1)
93 for (i=0;i<no->nb_segment;i++)
94 {
95 seg=no->segment[i];
96 if (((seg->n1==no->num)||(seg->n2==no->num))&&(seg!=ac_seg)&&(seg->num_ent==coedge->edge->num)) segref=seg;
97 }
98 else
99 for (i=no->nb_segment-1;i>(-1);i--)
100 {
101 seg=no->segment[i];
102 if (((seg->n1==no->num)||(seg->n2==no->num))&&(seg!=ac_seg)&&(seg->num_ent==coedge->edge->num)) segref=seg;
103 }
104 ac_seg=segref;
105 m2d_ac_front(&ft,2);
106 if (premier==0)
107 {
108 ft_premier=ft;
109 premier=1;
110 }
111 ft->n1=no->num;
112 if (ac_seg->n1==no->num) ft->n2=ac_seg->n2; else ft->n2=ac_seg->n1;
113 ft->seg=ac_seg;
114 ft->seg->front=1;
115 ft->prec=ftp;
116 if (ftp!=NULL) ftp->suiv=ft;
117 m2d_ord_front(ft);
118 ftp=ft;
119 no=ADRESSE(ft->n2,noeud,mesh->);
120 }
121 while (no!=no_fin);
122 coedge=coedge->next_coedge;
123 }
124 while (coedge!=loop->first_coedge);
125 ft_premier->prec=ft;
126 ft->suiv=ft_premier;
127 }
128 }