Salome HOME
Merge V9_dev branch into master
authorrnv <rnv@opencascade.com>
Thu, 7 Jun 2018 12:44:06 +0000 (15:44 +0300)
committerrnv <rnv@opencascade.com>
Thu, 14 Jun 2018 11:52:21 +0000 (14:52 +0300)
CMakeLists.txt
resources/SalomeApp.xml
src/GUI/CMakeLists.txt
src/GUI/NETGENPluginGUI_HypothesisCreator.cxx
src/NETGENPlugin/CMakeLists.txt
src/NETGENPlugin/NETGENPlugin_Mesher.cxx
src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cxx
src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx
src/NETGENPlugin/NETGENPlugin_Remesher_2D.cxx

index 6a45ecfa68a37813b53f2c7fbece3c25ed6b8225..9932932220262625ea8102f0e0a817aae5988e7a 100755 (executable)
@@ -31,7 +31,7 @@ ENDIF(WIN32)
 STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
 
 SET(${PROJECT_NAME_UC}_MAJOR_VERSION 8)
-SET(${PROJECT_NAME_UC}_MINOR_VERSION 4)
+SET(${PROJECT_NAME_UC}_MINOR_VERSION 5)
 SET(${PROJECT_NAME_UC}_PATCH_VERSION 0)
 SET(${PROJECT_NAME_UC}_VERSION
   ${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
@@ -125,7 +125,7 @@ IF(SALOME_BUILD_GUI)
 ENDIF(SALOME_BUILD_GUI)
 
 # OCCT
-FIND_PACKAGE(SalomeCAS REQUIRED)
+FIND_PACKAGE(SalomeOpenCASCADE REQUIRED)
 # VTK
 FIND_PACKAGE(SalomeVTK REQUIRED)
 
index 8e701ee9ed14586a6911d4636a289d9227dd5661..13d00696e9d25dde3a9bf3b75debafaa7bc5e94c 100644 (file)
@@ -30,6 +30,6 @@
     <parameter name="plugins" value="NETGENPlugin,GHS3DPlugin"/>
   </section>
   <section name="smesh_help">
-    <parameter name="Plug-ins/NETGEN plugin User's Guide" value="${NETGENPLUGIN_ROOT_DIR}/share/doc/salome/gui/NETGENPLUGIN/index.html"/>
+    <parameter name="User's Guide/Mesh module/Plug-ins/NETGEN plugin" value="${NETGENPLUGIN_ROOT_DIR}/share/doc/salome/gui/NETGENPLUGIN/index.html"/>
   </section>
 </document>
index fa2db470e9889bb8184486c0765b23e550dcd652..4baf20a60a5014a3bc076e9e15df2c72f0f11230 100644 (file)
@@ -22,7 +22,7 @@ INCLUDE(UseQtExt)
 # --- options ---
 # additional include directories
 INCLUDE_DIRECTORIES(
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${NETGEN_INCLUDE_DIRS}
   ${QT_INCLUDES}
   ${PYTHON_INCLUDES}
@@ -40,7 +40,7 @@ INCLUDE_DIRECTORIES(
 ADD_DEFINITIONS(
   ${QT_DEFINITIONS}
   ${OMNIORB_DEFINITIONS}
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
 )
 
@@ -54,7 +54,7 @@ SET(_link_LIBRARIES
   ${GUI_LightApp}
   ${SMESH_SMESH}
   ${SMESH_PluginUtils}
-  ${CAS_KERNEL}
+  ${OpenCASCADE_FoundationClasses_LIBRARIES}
   SalomeIDLNETGENPLUGIN
   NETGENEngine
 )
index 6c17ddaa4c5fc9d4c7d7d214aa233cc90ab38d14..8f685b03834395f2a500336ec3880e44a8aa10e5 100644 (file)
@@ -430,25 +430,6 @@ QString NETGENPluginGUI_HypothesisCreator::storeParams() const
   readParamsFromWidgets( data );
   storeParamsToHypo( data );
 
-  // QString valStr = tr("NETGEN_MAX_SIZE") + " = " + QString::number( data.myMaxSize ) + "; ";
-  // valStr += tr("NETGEN_MIN_SIZE") + " = " + QString::number( data.myMinSize ) + "; ";
-  // if ( data.mySecondOrder )
-  //   valStr +=  tr("NETGEN_SECOND_ORDER") + "; ";
-  // if ( data.myOptimize )
-  //   valStr +=  tr("NETGEN_OPTIMIZE") + "; ";
-  // valStr += myFineness->currentText() + "(" +  QString::number( data.myGrowthRate )     + ", " +
-  //   QString::number( data.myNbSegPerEdge )   + ", " +
-  //   QString::number( data.myNbSegPerRadius ) + ")";
-
-  // if ( myIs2D && data.myAllowQuadrangles )
-  //   valStr += "; " + tr("NETGEN_ALLOW_QUADRANGLES");
-
-  // if ( data.mySurfaceCurvature )
-  //   valStr += "; " + tr("NETGEN_SURFACE_CURVATURE");
-
-  // if ( data.myFuseEdges )
-  //   valStr += "; " + tr("NETGEN_FUSE_EDGES");
-
   return QString();
 }
 
@@ -502,18 +483,13 @@ bool NETGENPluginGUI_HypothesisCreator::readParamsFromHypo( NetgenHypothesisData
   for ( size_t i = 0; i < myEntries->length(); i++ )
   {
     QString entry = myEntries[i].in();
-    double val = h->GetLocalSizeOnEntry(entry.toStdString().c_str());
+    if (myLocalSizeMap.contains(entry) &&
+        myLocalSizeMap[entry] == "__TO_DELETE__")
+      continue;
+    double val = h->GetLocalSizeOnEntry( myEntries[i] );
     std::ostringstream tmp;
     tmp << val;
-    QString valstring = QString::fromStdString(tmp.str());
-    if (myLocalSizeMap.contains(entry))
-    {
-      if (myLocalSizeMap[entry] == "__TO_DELETE__")
-      {
-        continue;
-      }
-    }
-    that->myLocalSizeMap[entry] = valstring;
+    that->myLocalSizeMap[entry] = tmp.str().c_str();
   }
 
   return true;
@@ -586,10 +562,11 @@ bool NETGENPluginGUI_HypothesisCreator::storeParamsToHypo( const NetgenHypothesi
         rh->SetRidgeAngle  ( h_data.myRidgeAngle );
       }
     }
-    for ( QMapIterator<QString,QString> i(myLocalSizeMap); i.hasNext(); i.next() )
+    for ( QMapIterator<QString,QString> i(myLocalSizeMap); i.hasNext(); )
     {
-      const QString     entry = i.key();
-      const QString localSize = i.value();
+      i.next();
+      const QString&     entry = i.key();
+      const QString& localSize = i.value();
       if (localSize == "__TO_DELETE__")
       {
         h->UnsetLocalSizeOnEntry(entry.toLatin1().constData());
@@ -772,11 +749,9 @@ void NETGENPluginGUI_HypothesisCreator::addLocalSizeOnShape(TopAbs_ShapeEnum typ
   for ( ; Object_It.More() ; Object_It.Next())
   {
     Handle(SALOME_InteractiveObject) anObject = Object_It.Value();
-    std::string entry, shapeName;
-    entry = geomSelectionTools->getEntryOfObject(anObject);
-    shapeName = anObject->getName();
-    TopAbs_ShapeEnum shapeType;
-    shapeType = geomSelectionTools->entryToShapeType(entry);
+    std::string          entry = geomSelectionTools->getEntryOfObject(anObject);
+    std::string      shapeName = anObject->getName();
+    TopAbs_ShapeEnum shapeType = geomSelectionTools->entryToShapeType(entry);
     if (shapeType == TopAbs_SHAPE)
     {
       // E.A. if shapeType == TopAbs_SHAPE, it is NOT a TopoDS_Shape !!!
@@ -789,15 +764,11 @@ void NETGENPluginGUI_HypothesisCreator::addLocalSizeOnShape(TopAbs_ShapeEnum typ
     }
     // --
     myLocalSizeTable->setFocus();
-    QString shapeEntry;
-    shapeEntry = QString::fromStdString(entry);
-    if (myLocalSizeMap.contains(shapeEntry))
-    {
-      if (myLocalSizeMap[shapeEntry] != "__TO_DELETE__")
-      {
-        continue;
-      }
-    }
+    QString shapeEntry = QString::fromStdString(entry);
+    if (myLocalSizeMap.contains(shapeEntry) &&
+        myLocalSizeMap[shapeEntry] != "__TO_DELETE__")
+      continue;
+
     double phySize = h->GetMaxSize();
     std::ostringstream oss;
     oss << phySize;
@@ -851,7 +822,7 @@ void NETGENPluginGUI_HypothesisCreator::onRemoveLocalSizeOnShape()
 void NETGENPluginGUI_HypothesisCreator::onSetLocalSize(int row,int col)
 {
   if (col == LSZ_LOCALSIZE_COLUMN) {
-    QString entry = myLocalSizeTable->item(row, LSZ_ENTRY_COLUMN)->text();
+    QString     entry = myLocalSizeTable->item(row, LSZ_ENTRY_COLUMN)->text();
     QString localSize = myLocalSizeTable->item(row, LSZ_LOCALSIZE_COLUMN)->text().trimmed();
     myLocalSizeMap[entry] = localSize;
     myLocalSizeTable->resizeColumnToContents(LSZ_LOCALSIZE_COLUMN);
index cf4120e6642bfab56b8aad88394d837d640fdfdb..e5ea71c31fb68164adfc539799958294b838213e 100644 (file)
@@ -23,7 +23,7 @@ INCLUDE_DIRECTORIES(
   ${KERNEL_INCLUDE_DIRS}
   ${GUI_INCLUDE_DIRS}
   ${GEOM_INCLUDE_DIRS}
-  ${CAS_INCLUDE_DIRS}
+  ${OpenCASCADE_INCLUDE_DIR}
   ${VTK_INCLUDE_DIRS}
   ${NETGEN_INCLUDE_DIRS}
   ${SMESH_INCLUDE_DIRS}
@@ -35,7 +35,7 @@ INCLUDE_DIRECTORIES(
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(  
   ${OMNIORB_DEFINITIONS}
-  ${CAS_DEFINITIONS}
+  ${OpenCASCADE_DEFINITIONS}
   ${BOOST_DEFINITIONS}
   ${NETGEN_DEFINITIONS}
 )
@@ -43,34 +43,12 @@ ADD_DEFINITIONS(
 # libraries to link to
 SET(_link_LIBRARIES
   ${NETGEN_LIBRARIES}
-  ${CAS_TKernel}
-  ${CAS_TKBRep}
-  ${CAS_TKShHealing}
-  ${CAS_TKSTEP}
-  ${CAS_TKXSBase}
-  ${CAS_TKIGES}
-  ${CAS_TKMesh}
-  ${CAS_TKSTL}
-  ${CAS_TKG3d}
-  ${CAS_TKTopAlgo}
-  ${CAS_TKG2d}
-  ${CAS_TKBool}
-  ${CAS_TKGeomAlgo}
-  ${CAS_TKOffset}
-  ${CAS_TKGeomBase}
-  ${CAS_TKBO}
-  ${CAS_TKMath}
-  ${CAS_TKFillet}
-  ${CAS_TKMeshVS}
-  ${CAS_TKPrim}
-  ${CAS_TKSTEPBase}
-  ${CAS_TKSTEPAttr}
-  ${CAS_TKSTEP209}
-  ${CAS_TKXDESTEP}
-  ${CAS_TKXDEIGES}
-  ${CAS_TKXCAF}
-  ${CAS_TKLCAF}
-  ${CAS_FWOSPlugin}
+  ${OpenCASCADE_FoundationClasses_LIBRARIES}
+  ${OpenCASCADE_ModelingData_LIBRARIES}
+  ${OpenCASCADE_ModelingAlgorithms_LIBRARIES}
+  ${OpenCASCADE_DataExchange_LIBRARIES}
+  ${OpenCASCADE_Visualization_LIBRARIES}
+  ${OpenCASCADE_ApplicationFramework_LIBRARIES}
   ${GEOM_GEOMbasic}
   ${SMESH_SMESHimpl}
   ${SMESH_SMESHEngine}
index b38d78ded4459d1373e4c1570ec28a9d0ecceca8..647c1d11d8be4f338df14fc61975514402b274c1 100644 (file)
@@ -1369,9 +1369,11 @@ bool NETGENPlugin_Mesher::FillNgMesh(netgen::OCCGeometry&           occgeom,
           PShapeIteratorPtr solidIt=helper.GetAncestors(geomFace,*sm->GetFather(),TopAbs_SOLID);
           if ( const TopoDS_Shape * solid = solidIt->next() )
             sm = _mesh->GetSubMesh( *solid );
-          SMESH_ComputeErrorPtr& smError = sm->GetComputeError();
-          smError.reset( new SMESH_ComputeError(COMPERR_BAD_INPUT_MESH,"Not triangle sub-mesh"));
-          smError->myBadElements.push_back( f );
+          SMESH_BadInputElements* badElems =
+            new SMESH_BadInputElements( helper.GetMeshDS(), COMPERR_BAD_INPUT_MESH,
+                                        "Not triangle sub-mesh");
+          badElems->add( f );
+          sm->GetComputeError().reset( badElems );
           return false;
         }
 
@@ -3034,8 +3036,9 @@ bool NETGENPlugin_Mesher::Compute()
       }
 
       // Build viscous layers
-      if ( _isViscousLayers2D ||
-           StdMeshers_ViscousLayers2D::HasProxyMesh( TopoDS::Face( occgeo.fmap(1) ), *_mesh ))
+      if (( _isViscousLayers2D ) ||
+          ( !occgeo.fmap.IsEmpty() &&
+            StdMeshers_ViscousLayers2D::HasProxyMesh( TopoDS::Face( occgeo.fmap(1) ), *_mesh )))
       {
         if ( !internals.hasInternalVertexInFace() ) {
           FillSMesh( occgeo, *_ngMesh, initState, *_mesh, nodeVec, comment );
@@ -3312,7 +3315,7 @@ bool NETGENPlugin_Mesher::Compute()
           _mesh->GetMeshDS()->RemoveFreeNode( nodeVec[i], 0, /*fromGroups=*/false );
   }
   SMESH_ComputeErrorPtr readErr = ReadErrors(nodeVec);
-  if ( readErr && !readErr->myBadElements.empty() )
+  if ( readErr && readErr->HasBadElems() )
   {
     error = readErr;
     if ( !comment.empty() && !readErr->myComment.empty() ) comment += "\n";
@@ -3374,9 +3377,10 @@ bool NETGENPlugin_Mesher::Compute()
             {
               smError->myName = COMPERR_WARNING;
             }
-            else if ( !smError->myBadElements.empty() ) // bad surface mesh
+            else if ( smError->HasBadElems() ) // bad surface mesh
             {
-              if ( !hasBadElemOnSolid( smError->myBadElements, sm ))
+              if ( !hasBadElemOnSolid
+                   ( static_cast<SMESH_BadInputElements*>( smError.get() )->myBadElements, sm ))
                 smError.reset();
             }
           }
@@ -3555,9 +3559,9 @@ bool NETGENPlugin_Mesher::Evaluate(MapShapeNbElems& aResMap)
     int nb1d = 0;
     if ( !tooManyElems )
     {
-      TopTools_MapOfShape egdes;
+      TopTools_MapOfShape edges;
       for (TopExp_Explorer exp1(F,TopAbs_EDGE); exp1.More(); exp1.Next())
-        if ( egdes.Add( exp1.Current() ))
+        if ( edges.Add( exp1.Current() ))
           nb1d += Edge2NbSeg.Find(exp1.Current());
     }
     int nbFaces = tooManyElems ? hugeNb : int( 4*anArea / (mparams.maxh*mparams.maxh*sqrt(3.)));
@@ -3706,8 +3710,10 @@ double NETGENPlugin_Mesher::GetProgress(const SMESH_Algo* holder,
 SMESH_ComputeErrorPtr
 NETGENPlugin_Mesher::ReadErrors(const vector<const SMDS_MeshNode* >& nodeVec)
 {
-  SMESH_ComputeErrorPtr err = SMESH_ComputeError::New
-    (COMPERR_BAD_INPUT_MESH, "Some edges multiple times in surface mesh");
+  if ( nodeVec.size() < 2 ) return SMESH_ComputeErrorPtr();
+  SMESH_BadInputElements* err =
+    new SMESH_BadInputElements( nodeVec.back()->GetMesh(), COMPERR_BAD_INPUT_MESH,
+                                "Some edges multiple times in surface mesh");
   SMESH_File file("test.out");
   vector<int> two(2);
   vector<int> three1(3), three2(3);
@@ -3767,7 +3773,7 @@ NETGENPlugin_Mesher::ReadErrors(const vector<const SMDS_MeshNode* >& nodeVec)
   if ( nbBadElems ) nbBadElems++; // avoid warning: variable set but not used
 #endif
 
-  return err;
+  return SMESH_ComputeErrorPtr( err );
 }
 
 //================================================================================
index 7e50deccf1a07801a807277f33b8eb77f3f197c2..59baa3eb9b80b6e95b8b24c9b3a3728db415d981 100644 (file)
@@ -169,7 +169,7 @@ bool NETGENPlugin_NETGEN_2D_ONLY::CheckHypothesis (SMESH_Mesh&         aMesh,
 
   int nbHyps = bool(_hypMaxElementArea) + bool(_hypLengthFromEdges) + bool(_hypParameters );
   if ( nbHyps > 1 )
-    aStatus = HYP_CONCURENT;
+    aStatus = HYP_CONCURRENT;
   else if ( hasVL )
     error( StdMeshers_ViscousLayers2D::CheckHypothesis( aMesh, aShape, aStatus ));
   else
index b379d7aafa9e222f091a86ab683cb41fb5d6b0ba..dee55a6380fcbc72451e0ec83f32ad9271735f4c 100644 (file)
@@ -537,7 +537,7 @@ bool NETGENPlugin_NETGEN_3D::compute(SMESH_Mesh&                     aMesh,
   if ( err )
   {
     SMESH_ComputeErrorPtr ce = NETGENPlugin_Mesher::ReadErrors(nodeVec);
-    if ( ce && !ce->myBadElements.empty() )
+    if ( ce && ce->HasBadElems() )
       error( ce );
   }
 
index 7f1f4639823b2bb5ece75ac0bf553d508cadb539..aff9f00f5cbc165c3b08da5e900896c355aa4c2c 100644 (file)
@@ -109,7 +109,8 @@ namespace
     {
       // set bad faces into a compute error
       const char* text = "Non-manifold mesh. Only manifold mesh can be re-meshed";
-      SMESH_ComputeErrorPtr error = SMESH_ComputeError::New( COMPERR_BAD_INPUT_MESH, text );
+      SMESH_BadInputElements* error =
+        new SMESH_BadInputElements( myMeshDS, COMPERR_BAD_INPUT_MESH, text );
       SMESH::Controls::MultiConnection2D fun;
       fun.SetMesh( myMeshDS );
       SMDS_ElemIteratorPtr fIt = myMeshDS->elementsIterator( SMDSAbs_Face );
@@ -119,7 +120,7 @@ namespace
         if ( fun.GetValue( f->GetID() ) > 2 )
           error->myBadElements.push_back( f );
       }
-      theMesh.GetSubMesh( theMesh.GetShapeToMesh() )->GetComputeError() = error;
+      theMesh.GetSubMesh( theMesh.GetShapeToMesh() )->GetComputeError().reset( error );
       throw SALOME_Exception( text );
     }
 
@@ -153,12 +154,13 @@ namespace
       if ( !freeBords._coincidentGroups.empty() )
       {
         const char* text = "Can't re-meshed a mesh with coincident free edges";
-        SMESH_ComputeErrorPtr error = SMESH_ComputeError::New( COMPERR_BAD_INPUT_MESH, text );
+        SMESH_BadInputElements* error =
+          new SMESH_BadInputElements( myMeshDS, COMPERR_BAD_INPUT_MESH, text );
         for ( size_t i = 0; i < freeBords._borders.size(); ++i )
           error->myBadElements.insert( error->myBadElements.end(),
                                        freeBords._borders[i].begin(),
                                        freeBords._borders[i].end() );
-        theMesh.GetSubMesh( theMesh.GetShapeToMesh() )->GetComputeError() = error;
+        theMesh.GetSubMesh( theMesh.GetShapeToMesh() )->GetComputeError().reset( error );
         throw SALOME_Exception( text );
       }
     }