Select Git revision
gmsh_predicates.cpp
Forked from
gmsh / gmsh
Source project has a limited visibility.
gmshEdge.cpp 16.45 KiB
// Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
//
// See the LICENSE.txt file for license information. Please report all
// bugs and problems to the public mailing list <gmsh@geuz.org>.
#include <sstream>
#include "GModel.h"
#include "GFace.h"
#include "GFaceCompound.h"
#include "gmshEdge.h"
#include "Geo.h"
#include "GeoInterpolation.h"
#include "GmshMessage.h"
#include "Context.h"
#include "decasteljau.h"
gmshEdge::gmshEdge(GModel *m, Curve *edge, GVertex *v1, GVertex *v2)
: GEdge(m, edge->Num, v1, v2), c(edge)
{
resetMeshAttributes();
}
bool gmshEdge::degenerate(int dim) const
{
if (c->beg == c->end &&
c->Typ == MSH_SEGM_LINE &&
List_Nbr(c->Control_Points) == 0){
Msg::Info("Model Edge %d is degenerate", tag());
return true;
}
return false;
}
void gmshEdge::resetMeshAttributes()
{
meshAttributes.method = c->Method;
meshAttributes.nbPointsTransfinite = c->nbPointsTransfinite;
meshAttributes.typeTransfinite = c->typeTransfinite;
meshAttributes.coeffTransfinite = c->coeffTransfinite;
meshAttributes.extrude = c->Extrude;
meshAttributes.reverseMesh = c->ReverseMesh;
}
Range<double> gmshEdge::parBounds(int i) const
{
return Range<double>(c->ubeg, c->uend);
}
GPoint gmshEdge::point(double par) const
{
Vertex a = InterpolateCurve(c, par, 0);
return GPoint(a.Pos.X, a.Pos.Y, a.Pos.Z, this, par);
}
SVector3 gmshEdge::firstDer(double par) const
{
Vertex a = InterpolateCurve(c, par, 1);
return SVector3(a.Pos.X, a.Pos.Y, a.Pos.Z);
}
SVector3 gmshEdge::secondDer(double par) const
{
Vertex a = InterpolateCurve(c, par, 2);
return SVector3(a.Pos.X, a.Pos.Y, a.Pos.Z);
}
GEntity::GeomType gmshEdge::geomType() const
{
switch (c->Typ){
case MSH_SEGM_LINE : return Line;