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

File Contents

# Content
1 /*****************************************************************
2
3 r3d_gene_segment.c Type:Func
4
5 Generation des mailles 1D
6
7 Date de creation : Fri Aug 1 10:23:49 1997
8
9 Derniere version : Tue Aug 5 13:36:13 1997
10
11
12
13 Vincent FRANCOIS
14
15 *****************************************************************/
16
17
18
19
20
21 /**************************/
22 /* include */
23 #include <stdio.h>
24 #include <string.h>
25 #include <math.h>
26 #include <stdlib.h>
27 #include "const.h"
28 #include "memoire.h"
29 #include "struct.h"
30 #include "prototype.h"
31
32 /**************************/
33 /* variables globales */
34 extern struct environnement env;
35 extern struct s_mesh *mesh;
36 extern struct s_maillage *maillage;
37 extern struct s_acis *acis;
38
39
40
41 /**************************/
42 /* programme principal */
43
44 void r3d_gene_segment(struct s_octree **liste ,int nb_liste)
45 {
46 int i,j,num;
47 float vec[4];
48 struct s_mnoeud *mno1,*mno2;
49 struct s_noeud *no1,*no2;
50 struct s_msegment *mseg;
51 struct s_segment *seg;
52 struct s_vertex *vertex1,*vertex2;
53 struct s_edge *edge;
54
55 for (i=0;i<maillage->nb_msegment;i++)
56 {
57 mseg=ADRESSE(i,msegment,maillage->);
58 mno1=ADRESSE(mseg->n1,mnoeud,maillage->);
59 mno2=ADRESSE(mseg->n2,mnoeud,maillage->);
60 if ((mno1->etat==GARDE)&&(mno2->etat==GARDE))
61 {
62 NEW_ENTITE(seg,segment,mesh->);
63 seg->n1=r3d_gene_noeud(mno1,liste,nb_liste);
64 seg->n2=r3d_gene_noeud(mno2,liste,nb_liste);
65 seg->num=mesh->nb_segment-1;
66 seg->type=EDGE;
67 no1=ADRESSE(seg->n1,noeud,mesh->);
68 no2=ADRESSE(seg->n2,noeud,mesh->);
69 VEC(vec,no1,no2);
70 seg->longueur=(float)sqrt((double)PSCA(vec,vec));
71 if (no1->type==EDGE) seg->num_ent=no1->num_ent;
72 else if (no2->type==EDGE) seg->num_ent=no2->num_ent;
73 else
74 {
75 vertex1=(struct s_vertex *)acis->entity[no1->num_ent];
76 vertex2=(struct s_vertex *)acis->entity[no2->num_ent];
77 for (j=0;j<vertex1->nb_edge;j++)
78 if ((vertex1->edge[j]->start_vertex==vertex2)||(vertex1->edge[j]->end_vertex==vertex2))
79 seg->num_ent=vertex1->edge[j]->num;
80 }
81 edge=(struct s_edge *)acis->entity[seg->num_ent];
82 NEW_POINTEUR(num,segment,edge->);
83 edge->segment[num]=seg;
84 NEW_POINTEUR(num,segment,no1->);
85 no1->segment[num]=seg;
86 NEW_POINTEUR(num,segment,no2->);
87 no2->segment[num]=seg;
88 }
89 }
90
91 }