X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_FaceSide.cxx;h=57e84ae9d6028413670874c59ffd60c2047b7cfc;hp=f882f5c92c98a59b932147c5e588b577d1eba25a;hb=4b5fd249abfca52265832f10435f18f5bb9c69ae;hpb=d8f644ca3d4ce62f2ef41d4aacb52f5bb1221df3 diff --git a/src/StdMeshers/StdMeshers_FaceSide.cxx b/src/StdMeshers/StdMeshers_FaceSide.cxx index f882f5c92..57e84ae9d 100644 --- a/src/StdMeshers/StdMeshers_FaceSide.cxx +++ b/src/StdMeshers/StdMeshers_FaceSide.cxx @@ -1,26 +1,25 @@ -// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// SMESH SMESH : implementaion of SMESH idl descriptions // File : StdMeshers_FaceSide.hxx // Created : Wed Jan 31 18:41:25 2007 // Author : Edward AGAPOV (eap) @@ -40,9 +39,10 @@ #include #include -#include #include #include +#include +#include #include #include #include @@ -50,9 +50,6 @@ #include #include -#include -#include - #include #include "utilities.h" @@ -91,6 +88,7 @@ StdMeshers_FaceSide::StdMeshers_FaceSide(const TopoDS_Face& theFace, { int nbEdges = theEdges.size(); myEdge.resize( nbEdges ); + myEdgeID.resize( nbEdges ); myC2d.resize( nbEdges ); myC3dAdaptor.resize( nbEdges ); myFirst.resize( nbEdges ); @@ -118,6 +116,7 @@ StdMeshers_FaceSide::StdMeshers_FaceSide(const TopoDS_Face& theFace, if ( myEdgeLength[i] < DBL_MIN ) nbDegen++; myLength += myEdgeLength[i]; myEdge[i] = *edge; + myEdgeID[i] = meshDS->ShapeToIndex( *edge ); if ( !theIsForward ) myEdge[i].Reverse(); if ( theFace.IsNull() ) @@ -243,9 +242,8 @@ const vector& StdMeshers_FaceSide::GetUVPtStruct(bool isXConst, { // Put 1st vertex node of a current edge TopoDS_Vertex VV[2]; // TopExp::FirstVertex() returns NULL for INTERNAL edge - for ( TopoDS_Iterator vIt(myEdge[i]); vIt.More(); vIt.Next() ) - VV[ VV[0].IsNull() ? 0 : 1 ] = TopoDS::Vertex(vIt.Value()); - if ( VV[0].Orientation() == TopAbs_REVERSED ) std::swap ( VV[0], VV[1] ); + VV[0] = SMESH_MesherHelper::IthVertex( 0, myEdge[i]); + VV[1] = SMESH_MesherHelper::IthVertex( 1, myEdge[i]); const SMDS_MeshNode* node = SMESH_Algo::VertexNode( VV[0], meshDS ); double prevNormPar = ( i == 0 ? 0 : myNormPar[ i-1 ]); // normalized param if ( node ) { // internal nodes may be missing @@ -326,7 +324,11 @@ const vector& StdMeshers_FaceSide::GetUVPtStruct(bool isXConst, uvPt.x = uvPt.y = uvPt.normParam = u_node->first; if ( isXConst ) uvPt.x = constValue; else uvPt.y = constValue; - if ( myNormPar[ EdgeIndex ] < uvPt.normParam ) { + const SMDS_EdgePosition* epos = + dynamic_cast(uvPt.node->GetPosition()); + if (( myNormPar[ EdgeIndex ] < uvPt.normParam ) || + ( epos && uvPt.node->getshapeId() != myEdgeID[ EdgeIndex ])) // for myMissingVertexNodes + { prevNormPar = myNormPar[ EdgeIndex ]; ++EdgeIndex; #ifdef _DEBUG_ @@ -340,8 +342,6 @@ const vector& StdMeshers_FaceSide::GetUVPtStruct(bool isXConst, #endif paramSize = myNormPar[ EdgeIndex ] - prevNormPar; } - const SMDS_EdgePosition* epos = - dynamic_cast(uvPt.node->GetPosition().get()); if ( epos ) { uvPt.param = epos->GetUParameter(); } @@ -444,6 +444,7 @@ void StdMeshers_FaceSide::Reverse() } if ( nbEdges > 1 ) { reverse( myEdge ); + reverse( myEdgeID ); reverse( myC2d ); reverse( myC3dAdaptor ); reverse( myFirst ); @@ -531,14 +532,15 @@ BRepAdaptor_CompCurve* StdMeshers_FaceSide::GetCurve3d() const if ( myEdge.empty() ) return 0; -// if ( myEdge.size() == 1 ) -// return new BRepAdaptor_Curve( myEdge[0] ); - TopoDS_Wire aWire; BRep_Builder aBuilder; aBuilder.MakeWire(aWire); for ( int i=0; i