Select Git revision
periodical.cpp
Forked from
gmsh / gmsh
Source project has a limited visibility.
gmshFace.cpp 3.59 KiB
#include "gmshModel.h"
#include "gmshEdge.h"
#include "gmshFace.h"
#include "Interpolation.h"
#include "CAD.h"
#include "Geo.h"
gmshFace::gmshFace(GModel *m,Surface * face):GFace (m,face->Num), s(face)
{
Curve *c;
for (int i=0 ; i< List_Nbr ( s->Generatrices ) ; i++)
{
List_Read ( s->Generatrices , i, & c );
GEdge *e = m->edgeByTag ( abs(c->Num) );
if ( ! e ) throw;
l_edges.push_back(e);
e->addFace (this);
if (c->Num>0) l_dirs.push_back(1);
else l_dirs.push_back(-1);
}
}
Range<double> gmshFace::parBounds(int i) const
{
/* SPAinterval range;
if(i ==0)
range = acisSurface()->equation().param_range_u();
if(i==1)
range = acisSurface()->equation().param_range_v();
if(range.finite() )
return( Range<double>(range.start_pt(),range.end_pt()) );
else{
//printf("*calcParBounds()* is called\n");
SBoundingBox2d b = calcParBounds();
SPoint2 min = b.min();
SPoint2 max = b.max();
return Range<double>(min[i],max[i]);
}
*/
return Range<double>(0, 1);
}
int gmshFace::paramDegeneracies(int dir, double *par)
{
return 0;
}
SBoundingBox3d gmshFace::bounds() const
{
throw;
}
SVector3 gmshFace::normal(const SPoint2 ¶m) const
{
Vertex vu = InterpolateSurface( s, param[0], param[1],1,1);
Vertex vv = InterpolateSurface( s, param[0], param[1],1,2);
Vertex n = vu % vv;
n.norme();
return SVector3(n.Pos.X,n.Pos.Y,n.Pos.Z);
}
Pair<SVector3,SVector3> gmshFace::firstDer(const SPoint2 ¶m) const
{
Vertex vu = InterpolateSurface( s, param[0], param[1],1,1);
Vertex vv = InterpolateSurface( s, param[0], param[1],1,2);
return Pair<SVector3,SVector3>( SVector3(vu.Pos.X,vu.Pos.Y,vu.Pos.Z),
SVector3(vv.Pos.X,vv.Pos.Y,vv.Pos.Z));
}