Salome HOME
projects
/
modules
/
smesh.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix regressions caused by improvements
[modules/smesh.git]
/
src
/
StdMeshers
/
StdMeshers_Regular_1D.cxx
diff --git
a/src/StdMeshers/StdMeshers_Regular_1D.cxx
b/src/StdMeshers/StdMeshers_Regular_1D.cxx
index cc964cfac209d603d8daf2111fc155f82f734529..73f11aff59838b56942fbddde96630ed2ad443a3 100644
(file)
--- a/
src/StdMeshers/StdMeshers_Regular_1D.cxx
+++ b/
src/StdMeshers/StdMeshers_Regular_1D.cxx
@@
-1,4
+1,4
@@
-// Copyright (C) 2007-201
4
CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-201
5
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
@@
-68,6
+68,7
@@
#include <limits>
using namespace std;
#include <limits>
using namespace std;
+using namespace StdMeshers;
//=============================================================================
/*!
//=============================================================================
/*!
@@
-689,25
+690,28
@@
bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh & theMesh,
if ( smDS->NbNodes() < 1 )
return true; // 1 segment
if ( smDS->NbNodes() < 1 )
return true; // 1 segment
- vector< double > mainEdgeParams;
- if ( ! SMESH_Algo::GetNodeParamOnEdge( theMesh.GetMeshDS(), mainEdge, mainEdgeParams ))
+ map< double, const SMDS_MeshNode* > mainEdgeParamsOfNodes;
+ if ( ! SMESH_Algo::GetSortedNodesOnEdge( theMesh.GetMeshDS(), mainEdge, _quadraticMesh,
+ mainEdgeParamsOfNodes, SMDSAbs_Edge ))
return error("Bad node parameters on the source edge of Propagation Of Distribution");
return error("Bad node parameters on the source edge of Propagation Of Distribution");
- vector< double > segLen( mainEdgeParams.size() - 1 );
+ vector< double > segLen( mainEdgeParams
OfNodes
.size() - 1 );
double totalLen = 0;
BRepAdaptor_Curve mainEdgeCurve( mainEdge );
double totalLen = 0;
BRepAdaptor_Curve mainEdgeCurve( mainEdge );
- for ( size_t i = 1; i < mainEdgeParams.size(); ++i )
+ map< double, const SMDS_MeshNode* >::iterator
+ u_n2 = mainEdgeParamsOfNodes.begin(), u_n1 = u_n2++;
+ for ( size_t i = 1; i < mainEdgeParamsOfNodes.size(); ++i, ++u_n1, ++u_n2 )
{
segLen[ i-1 ] = GCPnts_AbscissaPoint::Length( mainEdgeCurve,
{
segLen[ i-1 ] = GCPnts_AbscissaPoint::Length( mainEdgeCurve,
-
mainEdgeParams[i-1]
,
-
mainEdgeParams[i]
);
+
u_n1->first
,
+
u_n2->first
);
totalLen += segLen[ i-1 ];
}
for ( size_t i = 0; i < segLen.size(); ++i )
segLen[ i ] *= theLength / totalLen;
totalLen += segLen[ i-1 ];
}
for ( size_t i = 0; i < segLen.size(); ++i )
segLen[ i ] *= theLength / totalLen;
- size_t iSeg = theReverse ? segLen.size()-1 : 0;
- size_t dSeg = theReverse ? -1 : +1;
+ size_t
iSeg = theReverse ? segLen.size()-1 : 0;
+ size_t
dSeg = theReverse ? -1 : +1;
double param = theFirstU;
int nbParams = 0;
for ( int i = 0, nb = segLen.size()-1; i < nb; ++i, iSeg += dSeg )
double param = theFirstU;
int nbParams = 0;
for ( int i = 0, nb = segLen.size()-1; i < nb; ++i, iSeg += dSeg )
@@
-967,13
+971,13
@@
bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh & theMesh,
{
if ( Abs( param - Un ) < 0.2 * Abs( param - theParams.back() ))
{
{
if ( Abs( param - Un ) < 0.2 * Abs( param - theParams.back() ))
{
- compensateError( a1,
eltSize
, U1, Un, theLength, theC3d, theParams );
+ compensateError( a1,
Abs(eltSize)
, U1, Un, theLength, theC3d, theParams );
}
else if ( Abs( Un - theParams.back() ) <
}
else if ( Abs( Un - theParams.back() ) <
- 0.2 * Abs( theParams.back() - *(
--
theParams.rbegin())))
+ 0.2 * Abs( theParams.back() - *(
++
theParams.rbegin())))
{
theParams.pop_back();
{
theParams.pop_back();
- compensateError( a1,
an
, U1, Un, theLength, theC3d, theParams );
+ compensateError( a1,
Abs(an)
, U1, Un, theLength, theC3d, theParams );
}
}
if (theReverse) theParams.reverse(); // NPAL18025
}
}
if (theReverse) theParams.reverse(); // NPAL18025
@@
-1169,10
+1173,13
@@
bool StdMeshers_Regular_1D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape & t
}
if ( !_mainEdge.IsNull() ) {
// take into account reversing the edge the hypothesis is propagated from
}
if ( !_mainEdge.IsNull() ) {
// take into account reversing the edge the hypothesis is propagated from
+ // (_mainEdge.Orientation() marks mutual orientation of EDGEs in propagation chain)
reversed = ( _mainEdge.Orientation() == TopAbs_REVERSED );
reversed = ( _mainEdge.Orientation() == TopAbs_REVERSED );
- int mainID = meshDS->ShapeToIndex(_mainEdge);
- if ( std::find( _revEdgesIDs.begin(), _revEdgesIDs.end(), mainID) != _revEdgesIDs.end())
- reversed = !reversed;
+ if ( !_isPropagOfDistribution ) {
+ int mainID = meshDS->ShapeToIndex(_mainEdge);
+ if ( std::find( _revEdgesIDs.begin(), _revEdgesIDs.end(), mainID) != _revEdgesIDs.end())
+ reversed = !reversed;
+ }
}
// take into account this edge reversing
if ( std::find( _revEdgesIDs.begin(), _revEdgesIDs.end(), shapeID) != _revEdgesIDs.end())
}
// take into account this edge reversing
if ( std::find( _revEdgesIDs.begin(), _revEdgesIDs.end(), shapeID) != _revEdgesIDs.end())