Salome HOME
22834: [CEA 1347] Viscous layers: be able to choose the extrusion method (imp_1347_vi...
authoreap <eap@opencascade.com>
Tue, 17 Feb 2015 13:23:19 +0000 (16:23 +0300)
committereap <eap@opencascade.com>
Tue, 17 Feb 2015 13:23:19 +0000 (16:23 +0300)
+ fix some regressions

src/SMESH/SMESH_MeshEditor.cxx
src/SMESH_I/SMESH_Mesh_i.cxx
src/SMESH_SWIG/StdMeshersBuilder.py
src/StdMeshers/StdMeshers_NumberOfSegments.cxx
src/StdMeshers/StdMeshers_ViscousLayers.cxx

index 4e673ebcea020be261c6edfa94b5ba3a80d5bf33..20aeb54af376c993c653786a6f76c5f502442d10 100644 (file)
@@ -4352,6 +4352,7 @@ void SMESH_MeshEditor::sweepElement(const SMDS_MeshElement*               elem,
         std::swap( itNN[0],    itNN[1] );
         std::swap( prevNod[0], prevNod[1] );
         std::swap( nextNod[0], nextNod[1] );
+        isSingleNode.swap( isSingleNode[0], isSingleNode[1] );
         if ( nbSame > 0 )
           sames[0] = 1 - sames[0];
         iNotSameNode = 1 - iNotSameNode;
index 8ffd46ef774ab7b13e29552c6b5094fbf1838830..0e298af615634bafdb57df3e949399806c94070b 100644 (file)
@@ -4739,7 +4739,6 @@ SMESH_Mesh_i::MakeGroupsOfBadInputElements( int         theSubShapeID,
           SALOMEDS::SObject_wrap aSO =
             _gen_i->PublishGroup( study, mesh, groups[ iG ],
                                  GEOM::GEOM_Object::_nil(), theGroupName);
-          aSO->_is_nil(); // avoid "unused variable" warning
         }
         SMESH_GroupBase_i* grp_i = SMESH::DownCast< SMESH_GroupBase_i* >( groups[ iG ]);
         if ( !grp_i ) continue;
index 5b962142fc71c842cf67b449a5ac4b57993e2021..fcb3d2d3f9eda4cd7825858f13aa0e4b9c7d48fc 100644 (file)
@@ -144,7 +144,7 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
             reversedEdges, UseExisting = [], reversedEdges
         entry = self.MainShapeEntry()
         reversedEdgeInd = self.ReversedEdgeIndices(reversedEdges)
-        if s == []:
+        if not s:
             hyp = self.Hypothesis("NumberOfSegments", [n, reversedEdgeInd, entry],
                                   UseExisting=UseExisting,
                                   CompareMethod=self._compareNumberOfSegments)
@@ -152,7 +152,6 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
             hyp = self.Hypothesis("NumberOfSegments", [n,s, reversedEdgeInd, entry],
                                   UseExisting=UseExisting,
                                   CompareMethod=self._compareNumberOfSegments)
-            hyp.SetDistrType( 1 )
             hyp.SetScaleFactor(s)
         hyp.SetNumberOfSegments(n)
         hyp.SetReversedEdges( reversedEdgeInd )
@@ -1038,11 +1037,10 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
         if self.algoType != "RadialPrism_3D":
             print "Prism_3D algorith doesn't support any hyposesis"
             return None
-        if s == []:
+        if not s:
             hyp = self.OwnHypothesis("NumberOfSegments", [n])
         else:
             hyp = self.OwnHypothesis("NumberOfSegments", [n,s])
-            hyp.SetDistrType( 1 )
             hyp.SetScaleFactor(s)
         hyp.SetNumberOfSegments(n)
         return hyp
index db970335234d5cb027d1db423a5113839ded2774..2f0d05b9d75e8aee3d1c903434f830bfd71da973 100644 (file)
@@ -185,8 +185,8 @@ void StdMeshers_NumberOfSegments::SetScaleFactor(double scaleFactor)
     //throw SALOME_Exception(LOCALIZED("not a scale distribution"));
   if (scaleFactor < PRECISION)
     throw SALOME_Exception(LOCALIZED("scale factor must be positive"));
-  //if (fabs(scaleFactor - 1.0) < PRECISION)
-  //  throw SALOME_Exception(LOCALIZED("scale factor must not be equal to 1"));
+  if (fabs(scaleFactor - 1.0) < PRECISION)
+    _distrType = DT_Regular;
 
   if (fabs(_scaleFactor - scaleFactor) > PRECISION)
   {
index 61acb13c5c9178699857ce8e53186b6aa84f9245..e6c0dd7be871dd0b3d461aebc4a4764692c38992 100644 (file)
@@ -2920,6 +2920,7 @@ bool _ViscousBuilder::setEdgeData(_LayerEdge&         edge,
   }
   else // !useGeometry - get _normal using surrounding mesh faces
   {
+    set<TGeomID> faceIds;
 
     SMDS_ElemIteratorPtr fIt = node->GetInverseElementIterator(SMDSAbs_Face);
     while ( fIt->more() )
@@ -2927,6 +2928,8 @@ bool _ViscousBuilder::setEdgeData(_LayerEdge&         edge,
       const SMDS_MeshElement* face = fIt->next();
       if ( eos.GetNormal( face, geomNorm ))
       {
+        if ( onShrinkShape && !faceIds.insert( face->getshapeId() ).second )
+          continue; // use only one mesh face on FACE
         edge._normal += geomNorm.XYZ();
         totalNbFaces++;
       }