diff --git a/Common/Views.cpp b/Common/Views.cpp index 40ea8a6e52edb2ec3b7be3fbb95b8442b1412690..a4885d6a1e540e599b89f804e47ee225330e563b 100644 --- a/Common/Views.cpp +++ b/Common/Views.cpp @@ -1,4 +1,4 @@ -// $Id: Views.cpp,v 1.50 2001-08-11 23:28:31 geuzaine Exp $ +// $Id: Views.cpp,v 1.51 2001-08-15 06:56:22 geuzaine Exp $ #include <set> #include "Gmsh.h" @@ -661,6 +661,7 @@ public: static double eps; void update (int nbVals, double *); xyzv(double x, double y, double z); + xyzv(double x, double y, double z, double* v); ~xyzv(); xyzv & operator = ( const xyzv &); xyzv ( const xyzv &); @@ -671,6 +672,9 @@ double xyzv::eps = 0.0; xyzv::xyzv (double xx, double yy, double zz) : x(xx),y(yy),z(zz),vals(0),nbvals(0),nboccurences(0){} +xyzv::xyzv (double xx, double yy, double zz, double *vv) + : x(xx),y(yy),z(zz),vals(vv),nbvals(0),nboccurences(0){} + xyzv::~xyzv(){ if(vals)delete [] vals; } @@ -738,6 +742,38 @@ struct lessthanxyzv{ return false; } }; +/* +double angle (double * aa, double * bb){ + double angplan, cosc, sinc, a[3],b[3],c[3]; + if(!aa || !bb) return 0.; + a[0] = aa[0]; + a[1] = aa[1]; + a[2] = aa[2]; + b[0] = bb[0]; + b[1] = bb[1]; + b[2] = bb[2]; + norme (a); + norme (b); + prodve (a, b, c); + prosca (a, b, &cosc); + sinc = sqrt (c[0] * c[0] + c[1] * c[1] + c[2] * c[2]); + angplan = myatan2 (sinc, cosc); + return angplan*180./Pi; +} +struct lessthanxyzv{ + bool operator () (const xyzv & p2, const xyzv &p1) const{ + if( p1.x - p2.x > xyzv::eps)return true; + if( p1.x - p2.x <-xyzv::eps)return false; + if( p1.y - p2.y > xyzv::eps)return true; + if( p1.y - p2.y <-xyzv::eps)return false; + if( p1.z - p2.z > xyzv::eps)return true; + if( p1.z - p2.z <-xyzv::eps)return false; + double a = angle(p1.vals,p2.vals); + if( a < 30 ) return true; + return false; + } +}; +*/ typedef set<xyzv,lessthanxyzv> mycont; typedef mycont::const_iterator iter; @@ -844,7 +880,30 @@ void Post_View :: add_normal(double x, double y, double z, xx->update(3,n); } } +/* +void Post_View :: add_normal(double x, double y, double z, + double nx, double ny, double nz){ + if(!normals) normals = new smooth_container; + double *n = new double[3]; + n[0] = nx; + n[1] = ny; + n[2] = nz; + xyzv xyz(x,y,z,n); + iter it = normals->c.find(xyz); + xyzv xyz2(x,y,z); + double n2[3]={nx,ny,nz}; + + if(it == normals->c.end()){ + xyz2.update(3,n2); + normals->c.insert(xyz2); + } + else{ + xyzv *xx = (xyzv*) &(*it); + xx->update(3,n); + } +} +*/ bool Post_View :: get_normal(double x, double y, double z, double &nx, double &ny, double &nz){ if(!normals) return false;