mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-28 11:50:32 +05:00
0022362: EDF SMESH: Quadrangle (mapping) algorithm: enforced vertices
1) + StdMeshers_FaceSide(UVPtStructVec& theSideNodes, + const TopoDS_Face& theFace = TopoDS_Face()); 2) + static creator methods New()
This commit is contained in:
parent
a623b301fb
commit
8b7bc04906
@ -251,7 +251,8 @@ StdMeshers_FaceSide::StdMeshers_FaceSide(const StdMeshers_FaceSide* theSide,
|
|||||||
*/
|
*/
|
||||||
//================================================================================
|
//================================================================================
|
||||||
|
|
||||||
StdMeshers_FaceSide::StdMeshers_FaceSide(UVPtStructVec& theSideNodes)
|
StdMeshers_FaceSide::StdMeshers_FaceSide(UVPtStructVec& theSideNodes,
|
||||||
|
const TopoDS_Face& theFace)
|
||||||
{
|
{
|
||||||
myEdge.resize( 1 );
|
myEdge.resize( 1 );
|
||||||
myEdgeID.resize( 1, -1 );
|
myEdgeID.resize( 1, -1 );
|
||||||
@ -272,12 +273,42 @@ StdMeshers_FaceSide::StdMeshers_FaceSide(UVPtStructVec& theSideNodes)
|
|||||||
if ( !myPoints.empty() )
|
if ( !myPoints.empty() )
|
||||||
{
|
{
|
||||||
myPoints[0].normParam = 0;
|
myPoints[0].normParam = 0;
|
||||||
gp_Pnt pPrev = SMESH_TNodeXYZ( myPoints[0].node );
|
if ( myPoints[0].node &&
|
||||||
for ( size_t i = 1; i < myPoints.size(); ++i )
|
myPoints.back().node &&
|
||||||
|
myPoints[ myNbPonits/2 ].node )
|
||||||
{
|
{
|
||||||
gp_Pnt p = SMESH_TNodeXYZ( myPoints[i].node );
|
gp_Pnt pPrev = SMESH_TNodeXYZ( myPoints[0].node );
|
||||||
myLength += ( myPoints[i].normParam = p.Distance( pPrev ));
|
for ( size_t i = 1; i < myPoints.size(); ++i )
|
||||||
pPrev = p;
|
{
|
||||||
|
gp_Pnt p = SMESH_TNodeXYZ( myPoints[i].node );
|
||||||
|
myLength += p.Distance( pPrev );
|
||||||
|
myPoints[i].normParam = myLength;
|
||||||
|
pPrev = p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( !theFace.IsNull() )
|
||||||
|
{
|
||||||
|
TopLoc_Location loc;
|
||||||
|
Handle(Geom_Surface) surf = BRep_Tool::Surface( theFace, loc );
|
||||||
|
gp_Pnt pPrev = surf->Value( myPoints[0].u, myPoints[0].v );
|
||||||
|
for ( size_t i = 1; i < myPoints.size(); ++i )
|
||||||
|
{
|
||||||
|
gp_Pnt p = surf->Value( myPoints[i].u, myPoints[i].v );
|
||||||
|
myLength += p.Distance( pPrev );
|
||||||
|
myPoints[i].normParam = myLength;
|
||||||
|
pPrev = p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gp_Pnt2d pPrev = myPoints[0].UV();
|
||||||
|
for ( size_t i = 1; i < myPoints.size(); ++i )
|
||||||
|
{
|
||||||
|
gp_Pnt2d p = myPoints[i].UV();
|
||||||
|
myLength += p.Distance( pPrev );
|
||||||
|
myPoints[i].normParam = myLength;
|
||||||
|
pPrev = p;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ( myLength > std::numeric_limits<double>::min() )
|
if ( myLength > std::numeric_limits<double>::min() )
|
||||||
for ( size_t i = 1; i < myPoints.size(); ++i )
|
for ( size_t i = 1; i < myPoints.size(); ++i )
|
||||||
@ -926,6 +957,18 @@ gp_Pnt2d StdMeshers_FaceSide::Value2d(double U) const
|
|||||||
return myC2d[ i ]->Value(par);
|
return myC2d[ i ]->Value(par);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
else if ( !myPoints.empty() )
|
||||||
|
{
|
||||||
|
int i = U * double( myPoints.size()-1 );
|
||||||
|
while ( i > 0 && myPoints[ i ].normParam > U )
|
||||||
|
--i;
|
||||||
|
while ( i+1 < myPoints.size() && myPoints[ i+1 ].normParam < U )
|
||||||
|
++i;
|
||||||
|
double r = (( U - myPoints[ i ].normParam ) /
|
||||||
|
( myPoints[ i+1 ].normParam - myPoints[ i ].normParam ));
|
||||||
|
return ( myPoints[ i ].UV() * ( 1 - r ) +
|
||||||
|
myPoints[ i+1 ].UV() * r );
|
||||||
|
}
|
||||||
return myDefaultPnt2d;
|
return myDefaultPnt2d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#include <Geom2d_Curve.hxx>
|
#include <Geom2d_Curve.hxx>
|
||||||
#include <GeomAdaptor_Curve.hxx>
|
#include <GeomAdaptor_Curve.hxx>
|
||||||
#include <TopoDS_Edge.hxx>
|
#include <TopoDS_Edge.hxx>
|
||||||
|
#include <TopoDS_Face.hxx>
|
||||||
#include <TopoDS_Vertex.hxx>
|
#include <TopoDS_Vertex.hxx>
|
||||||
#include <gp_Pnt2d.hxx>
|
#include <gp_Pnt2d.hxx>
|
||||||
|
|
||||||
@ -47,7 +48,6 @@ class SMESH_Mesh;
|
|||||||
class Adaptor2d_Curve2d;
|
class Adaptor2d_Curve2d;
|
||||||
class Adaptor3d_Curve;
|
class Adaptor3d_Curve;
|
||||||
class BRepAdaptor_CompCurve;
|
class BRepAdaptor_CompCurve;
|
||||||
class TopoDS_Face;
|
|
||||||
struct SMESH_ComputeError;
|
struct SMESH_ComputeError;
|
||||||
class StdMeshers_FaceSide;
|
class StdMeshers_FaceSide;
|
||||||
|
|
||||||
@ -96,7 +96,43 @@ public:
|
|||||||
/*!
|
/*!
|
||||||
* \brief Create a side from an UVPtStructVec
|
* \brief Create a side from an UVPtStructVec
|
||||||
*/
|
*/
|
||||||
StdMeshers_FaceSide(UVPtStructVec& theSideNodes);
|
StdMeshers_FaceSide(UVPtStructVec& theSideNodes,
|
||||||
|
const TopoDS_Face& theFace = TopoDS_Face());
|
||||||
|
|
||||||
|
// static "consrtuctors"
|
||||||
|
static StdMeshers_FaceSidePtr New(const TopoDS_Face& Face,
|
||||||
|
const TopoDS_Edge& Edge,
|
||||||
|
SMESH_Mesh* Mesh,
|
||||||
|
const bool IsForward,
|
||||||
|
const bool IgnoreMediumNodes,
|
||||||
|
SMESH_ProxyMesh::Ptr ProxyMesh = SMESH_ProxyMesh::Ptr())
|
||||||
|
{ return StdMeshers_FaceSidePtr
|
||||||
|
( new StdMeshers_FaceSide( Face,Edge,Mesh,IsForward,IgnoreMediumNodes,ProxyMesh ));
|
||||||
|
}
|
||||||
|
static StdMeshers_FaceSidePtr New (const TopoDS_Face& Face,
|
||||||
|
std::list<TopoDS_Edge>& Edges,
|
||||||
|
SMESH_Mesh* Mesh,
|
||||||
|
const bool IsForward,
|
||||||
|
const bool IgnoreMediumNodes,
|
||||||
|
SMESH_ProxyMesh::Ptr ProxyMesh = SMESH_ProxyMesh::Ptr())
|
||||||
|
{ return StdMeshers_FaceSidePtr
|
||||||
|
( new StdMeshers_FaceSide( Face,Edges,Mesh,IsForward,IgnoreMediumNodes,ProxyMesh ));
|
||||||
|
}
|
||||||
|
static StdMeshers_FaceSidePtr New (const StdMeshers_FaceSide* Side,
|
||||||
|
const SMDS_MeshNode* Node,
|
||||||
|
const gp_Pnt2d* Pnt2d1,
|
||||||
|
const gp_Pnt2d* Pnt2d2=NULL,
|
||||||
|
const Handle(Geom2d_Curve)& C2d=NULL,
|
||||||
|
const double UFirst=0.,
|
||||||
|
const double ULast=1.)
|
||||||
|
{ return StdMeshers_FaceSidePtr
|
||||||
|
( new StdMeshers_FaceSide( Side,Node,Pnt2d1,Pnt2d2,C2d,UFirst,ULast ));
|
||||||
|
}
|
||||||
|
static StdMeshers_FaceSidePtr New (UVPtStructVec& theSideNodes,
|
||||||
|
const TopoDS_Face& theFace = TopoDS_Face())
|
||||||
|
{
|
||||||
|
return StdMeshers_FaceSidePtr( new StdMeshers_FaceSide( theSideNodes, theFace ));
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Return wires of a face as StdMeshers_FaceSide's
|
* \brief Return wires of a face as StdMeshers_FaceSide's
|
||||||
|
Loading…
Reference in New Issue
Block a user