From 80933572967cc980a8ee44704f117402f88b6af2 Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 22 Nov 2013 13:14:08 +0000 Subject: [PATCH] 22361: EDF SMESH: Quadrangle (mapping) algorithm: faces with more than 4 edges - StdMeshers_FaceSide(const SMDS_MeshNode* theNode, - const gp_Pnt2d thePnt2d, - const StdMeshers_FaceSide* theSide); + StdMeshers_FaceSide(const StdMeshers_FaceSide* theSide, + const SMDS_MeshNode* theNode, + const gp_Pnt2d* thePnt2d1, + const gp_Pnt2d* thePnt2d2=NULL, + const Handle(Geom2d_Curve)& theC2d=NULL, + const double theUFirst=0., + const double theULast=1.); --- src/StdMeshers/StdMeshers_FaceSide.cxx | 52 +++++++++++++++++--------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/src/StdMeshers/StdMeshers_FaceSide.cxx b/src/StdMeshers/StdMeshers_FaceSide.cxx index a0e7f0034..3e1780299 100644 --- a/src/StdMeshers/StdMeshers_FaceSide.cxx +++ b/src/StdMeshers/StdMeshers_FaceSide.cxx @@ -202,30 +202,46 @@ StdMeshers_FaceSide::StdMeshers_FaceSide(const TopoDS_Face& theFace, //================================================================================ /*! * \brief Constructor of a side for vertex using data from other FaceSide - * \param theVertex - the vertex - * \param theSide - the side + * \param theVertex - the vertex + * \param theSide - the side */ //================================================================================ -StdMeshers_FaceSide::StdMeshers_FaceSide(const SMDS_MeshNode* theNode, - const gp_Pnt2d thePnt2d, - const StdMeshers_FaceSide* theSide) +StdMeshers_FaceSide::StdMeshers_FaceSide(const StdMeshers_FaceSide* theSide, + const SMDS_MeshNode* theNode, + const gp_Pnt2d* thePnt2d1, + const gp_Pnt2d* thePnt2d2, + const Handle(Geom2d_Curve)& theC2d, + const double theUFirst, + const double theULast) { - myC2d.resize(1); + myC2d.push_back ( theC2d ); + myFirst.push_back ( theUFirst ); + myLast.push_back ( theULast ); + myNormPar.push_back ( 1. ); + myIsUniform.push_back( true ); + myEdgeID.push_back ( 0 ); myLength = 0; myProxyMesh = theSide->myProxyMesh; - myDefaultPnt2d = thePnt2d; - - myPoints = theSide->GetUVPtStruct(); - myNbPonits = myPoints.size(); - myNbSegments = theSide->myNbSegments; - std::vector::iterator it = myPoints.begin(); - for(; it!=myPoints.end(); it++) { - (*it).u = thePnt2d.X(); - (*it).v = thePnt2d.Y(); - (*it).y = 0.0; - (*it).node = theNode; - } + myDefaultPnt2d = *thePnt2d1; + myPoints = theSide->GetUVPtStruct(); + myNbPonits = myPoints.size(); + myNbSegments = theSide->myNbSegments; + if ( thePnt2d2 ) + for ( size_t i = 0; i < myPoints.size(); ++i ) + { + double r = i / ( myPoints.size() - 1. ); + myPoints[i].u = (1-r) * thePnt2d1->X() + r * thePnt2d2->X(); + myPoints[i].v = (1-r) * thePnt2d1->Y() + r * thePnt2d2->Y(); + myPoints[i].node = theNode; + } + else + for ( size_t i = 0; i < myPoints.size(); ++i ) + { + myPoints[i].u = thePnt2d1->X(); + myPoints[i].v = thePnt2d1->Y(); + myPoints[i].node = theNode; + } } //================================================================================ -- 2.30.2