Salome HOME
23562: EDF 17098 - problem with Extrusion 3D
authoreap <eap@opencascade.com>
Tue, 22 May 2018 16:12:11 +0000 (19:12 +0300)
committereap <eap@opencascade.com>
Tue, 22 May 2018 16:12:11 +0000 (19:12 +0300)
+ fix computing "Min elem size" in Mesh Info dlg

src/Controls/SMESH_Controls.cxx
src/SMESHGUI/SMESHGUI_MeshInfo.cxx
src/StdMeshers/StdMeshers_Prism_3D.cxx

index 1ccd96f..7fcc948 100644 (file)
@@ -4425,6 +4425,12 @@ bool ElementsOnShape::IsSatisfy (const SMDS_MeshElement* elem)
   return isSatisfy;
 }
 
+//================================================================================
+/*!
+ * \brief Check and optionally return a satisfying shape
+ */
+//================================================================================
+
 bool ElementsOnShape::IsSatisfy (const SMDS_MeshNode* node,
                                  TopoDS_Shape*        okShape)
 {
index 57bd823..49864ab 100644 (file)
@@ -2083,7 +2083,9 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
         afunctor->SetMesh( actor()->GetObject()->GetMesh() );
         QTreeWidgetItem* minEdgeItem = createItem( cntrItem, Bold );
         minEdgeItem->setText( 0, tr( "MIN_ELEM_EDGE" ));
-        minEdgeItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) );
+        SMESH::Controls::TSequenceOfXYZ points;
+        afunctor->GetPoints( e, points ); // "non-standard" way, to make it work for all elem types
+        minEdgeItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( points )) );
 
         // gravity center
         XYZ gc = gravityCenter( e );
index f5807f0..80cdc5e 100644 (file)
@@ -1170,6 +1170,11 @@ bool StdMeshers_Prism_3D::compute(const Prism_3D::TPrismTopo& thePrism)
   if ( !assocOrProjBottom2Top( bottomToTopTrsf, thePrism ) ) // it also fills myBotToColumnMap
     return false;
 
+  // If all "vertical" EDGEs are straight, then all nodes of an internal node column
+  // are located on a line connecting the top node and the bottom node.
+  bool isStrightColunm = allVerticalEdgesStraight( thePrism );
+  if ( isStrightColunm )
+    myUseBlock = false;
 
   // Create nodes inside the block
 
@@ -1208,9 +1213,6 @@ bool StdMeshers_Prism_3D::compute(const Prism_3D::TPrismTopo& thePrism)
 
     myHelper->SetElementsOnShape( true );
 
-    // If all "vertical" EDGEs are straight, then all nodes of an internal node column
-    // are located on a line connecting the top node and the bottom node.
-    bool isStrightColunm = allVerticalEdgesStraight( thePrism );
     if ( !isStrightColunm )
     {
       double tol = getSweepTolerance( thePrism );