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

# User Rev Content
1 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     }