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

File Contents

# User Rev Content
1 1 /*****************************************************************
2    
3     r3d_comp_detruit2.cpp Type:Func
4    
5     Destruction autour d un point
6    
7     Date de creation : 16-9-1997 10 :26 :38
8     Derniere version : 16-9-1997 10 :26 :38
9    
10     Vincent FRANCOIS
11    
12     *****************************************************************/
13    
14    
15    
16    
17    
18     /**************************/
19     /* include */
20     #include <stdio.h>
21     #include <string.h>
22     #include <math.h>
23     #include "const.h"
24     #include "memoire.h"
25     #include "struct.h"
26     #include "prototype.h"
27    
28     /**************************/
29     /* variables globales */
30     extern struct s_acis *acis;
31     extern struct environnement env;
32     extern struct s_mesh *mesh;
33     extern struct s_param *para;
34    
35    
36    
37     /**************************/
38     /* programme principal */
39    
40     void r3d_comp_detruit2(struct s_zone *zone,float x,float y,float z,char type_ent,int num_ent,float rayon,float dens,float *norm,struct s_octree **liste)
41     {
42     struct s_octree *oct;
43     struct s_mnoeud *mnoe;
44     int nb_liste,i,k,test;
45     float dis,distance,vec[4];
46     int face1,face2;
47    
48     nb_liste=0;
49     dis=env.zone*rayon;
50     oc_rechercher(x,y,z,dis,mesh->first,liste,&nb_liste);
51     dis=dis*dis;
52     if ((type_ent==EDGE)&&(zone->reference==OLD))
53     {
54     face1=zone->entite[0];
55     face2=zone->entite[1];
56     }
57    
58     for (i=0;i<nb_liste;i++)
59     {
60     oct=liste[i];
61     for (k=0;k<oct->nb_mnoeud;k++)
62     {
63     mnoe=oct->mnoeud[k];
64     test=0;
65     if ((zone->reference==NEW)||(zone->reference==VERIFICATION)) test=1;
66     else
67     {
68     if ((type_ent==FACE) && (mnoe->type==FACE) && (mnoe->num_ent==num_ent) ) test=1;
69     if ((type_ent==EDGE) && (mnoe->type==EDGE) && (mnoe->num_ent==num_ent) ) test=1;
70     if ((type_ent==EDGE) && (mnoe->type==FACE) && (mnoe->num_ent==face1) ) test=1;
71     if ((type_ent==EDGE) && (mnoe->type==FACE) && (mnoe->num_ent==face2) ) test=1;
72     if (type_ent==VERTEX) test=1;
73     }
74     if ( (test==1)&&(mnoe->etat==GARDE) )
75     {
76     eval_dens_reel(mnoe);
77     vec[0]=x-mnoe->x;
78     vec[1]=y-mnoe->y;
79     vec[2]=z-mnoe->z;
80     distance=(float)sqrt((double)PSCA(vec,vec));
81     if ((zone->reference==OLD)||(zone->reference==VERIFICATION)) dis=1.1*dens;
82     if (zone->reference==NEW)
83     {
84     MAXI(dis,2*dens,(float)fabs((double)4.*(dens-mnoe->dens)));
85     MAXI(dis,dis,2*mnoe->dens);
86     }
87     if ((zone->type_entite==FACE)&&(zone->reference==NEW))
88     {
89     NORME(vec);
90     dis=dis*(0.5+0.5*PSCA(norm,vec));
91     }
92     if (zone->reference==VERIFICATION)
93     {
94     NORME(vec);
95     dis=dis*(0.5+0.5*PSCA(norm,vec));
96     }
97     if (distance<dis*env.zone) mnoe->etat=DETRUIT;
98     }
99     }
100     }
101     }