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

# Content
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 }