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

File Contents

# User Rev Content
1 1 /*****************************************************************
2    
3     m2d_c_quad.c Type:Func
4    
5     Creation d un arbre sur l espace parametrique
6    
7     Date de creation : Wed Feb 5 17:23:19 1997
8    
9     Derniere version : Mon May 12 19:09:35 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 <stdlib.h>
35     #include "const.h"
36     #include "memoire.h"
37     #include "struct.h"
38     #include "prototype.h"
39    
40    
41     /**************************/
42     /* variables globales */
43     extern struct environnment env;
44     extern struct s_mesh *mesh;
45    
46    
47    
48    
49     /**************************/
50     /* programme principal */
51    
52     void m2d_c_quad(struct s_face *face,float rev_u,float rev_v)
53     {
54     struct s_noeud *no;
55     struct s_quadtree *quad;
56     float umax,umin,vmax,vmin,diff;
57     int i,pass,num;
58    
59     /* recherche min-max en u et v */
60     pass=0;
61     for (i=0;i<mesh->nb_noeud;i++)
62     {
63     no=ADRESSE(i,noeud,mesh->);
64     if (no->indice==face->num)
65     {
66     if (pass==0)
67     {
68     pass=1;
69     umax=no->u;
70     umin=no->u;
71     vmax=no->v;
72     vmin=no->v;
73     }
74     if (no->u>umax) umax=no->u;
75     if (no->u<umin) umin=no->u;
76     if (no->v>vmax) vmax=no->v;
77     if (no->v<vmin) vmin=no->v;
78     }
79     }
80     if (rev_u!=0.0)
81     {
82     umin=0.;
83     umax=rev_u;
84     }
85     else
86     {
87     diff=umax-umin;
88     umin=umin-5.*diff;
89     umax=umax+5.*diff;
90     }
91     if (rev_v!=0.0)
92     {
93     vmin=0.;
94     vmax=rev_v;
95     }
96     else
97     {
98     diff=vmax-vmin;
99     vmin=vmin-5.*diff;
100     vmax=vmax+5.*diff;
101     }
102     mesh->rev_u=rev_u;
103     mesh->rev_v=rev_v;
104     /* creation de la racine */
105     NEW_ENTITE(mesh->root,quadtree,mesh->);
106     mesh->root->num=mesh->nb_quadtree-1;
107     mesh->root->u=umin;
108     mesh->root->v=vmin;
109     mesh->root->t_u=umax-umin;
110     mesh->root->t_v=vmax-vmin;
111     for (i=0;i<mesh->nb_noeud;i++)
112     {
113     no=ADRESSE(i,noeud,mesh->);
114     if (no->indice==face->num)
115     {
116     NEW_POINTEUR(num,noeud,mesh->root->);
117     mesh->root->noeud[num]=no;
118     }
119     }
120     /* creation de l arbre */
121     quad=mesh->root;
122     quad->fils[0]=qu_ins(quad->u,quad->v,quad->t_u/2.,quad->t_v/2.,quad->noeud,quad->nb_noeud);
123     quad->fils[1]=qu_ins(quad->u+quad->t_u/2.,quad->v,quad->t_u/2.,quad->t_v/2.,quad->noeud,quad->nb_noeud);
124     quad->fils[2]=qu_ins(quad->u,quad->v+quad->t_v/2.,quad->t_u/2.,quad->t_v/2.,quad->noeud,quad->nb_noeud);
125     quad->fils[3]=qu_ins(quad->u+quad->t_u/2.,quad->v+quad->t_v/2.,quad->t_u/2.,quad->t_v/2.,quad->noeud,quad->nb_noeud);
126     }