From dfbdf1950475c847558f7b6c65d0c3e10a16d86b Mon Sep 17 00:00:00 2001 From: Christophe Bourcier Date: Tue, 29 Aug 2017 11:44:20 +0200 Subject: [PATCH 1/1] Add full-quadrangles support, available since MeshGems v2.5 --- .../BLSURFPLUGIN/images/blsurf_parameters.png | Bin 44891 -> 46805 bytes .../gui/BLSURFPLUGIN/input/blsurf_hypo.doc | 8 +- idl/BLSURFPlugin_Algorithm.idl | 3 +- src/BLSURFPlugin/BLSURFPluginBuilder.py | 12 +- src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx | 30 +++- src/BLSURFPlugin/BLSURFPlugin_Hypothesis.cxx | 12 +- src/BLSURFPlugin/BLSURFPlugin_Hypothesis.hxx | 14 +- .../BLSURFPlugin_Hypothesis_i.cxx | 31 +++- .../BLSURFPlugin_Hypothesis_i.hxx | 4 +- src/GUI/BLSURFPluginGUI_Dlg.h | 6 + src/GUI/BLSURFPluginGUI_HypothesisCreator.cxx | 19 ++- src/GUI/BLSURFPluginGUI_HypothesisCreator.h | 3 +- src/GUI/BLSURFPluginGUI_StdWidget.cxx | 3 + src/GUI/BLSURFPluginGUI_StdWidget_QTD.ui | 144 ++++++++++++------ src/GUI/BLSURFPlugin_msg_en.ts | 24 ++- src/GUI/BLSURFPlugin_msg_fr.ts | 24 ++- src/GUI/BLSURFPlugin_msg_ja.ts | 28 +++- tests/test_quadrangles_gradation.py | 4 +- tests/test_remove_tiny_edges.py | 1 - 19 files changed, 275 insertions(+), 95 deletions(-) diff --git a/doc/salome/gui/BLSURFPLUGIN/images/blsurf_parameters.png b/doc/salome/gui/BLSURFPLUGIN/images/blsurf_parameters.png index 8b743fa1f7d380baad12e84a1e1486e3757ce265..884b4112e0cf275ae196a582bdc04b32879288fc 100644 GIT binary patch literal 46805 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 ZBZ;SfgT*WkupR{6Rnmf$-g)%wzW~6)pho}z literal 44891 zcmaI71yohhw>OFjqJ)CdAc%BGHz?g5(n@!CE7ILv(w&D6>F(}4bT=I0E%bliz2E!Z zxQxMov(GtuueJ7EbN*s(KWRxJBt&dPI5;>Y5n+B=IJn1^aBz=K5uSr1UCw6jz@Mkq zydv@l;Kv0)#}~YQVIiz+4L&~!e*GTlq3-;KgL@Ar!v96yA#r!!UJdO6=g*PUn=D_C zoTWS*R0}DK;#x>ye&s~v4Ah7+N5S%)(EOQ_JznAXgu1>lUUi|$PC>evWty+YOC91S zo>1ZUFTRruZQMFRpVb^V?K^kRN32?r_1NJRd_f@mh05#8Ie?hDlPa(*i6j+tdYcTic3Cz`5qvf*)lOvk)hbjoU7i$`fy@G{sEah`KhVcXnCXQ8AI!b zb4nawsj~3Oq<%>o`sVdqRhLL|;s{+%P^;LnL*3SLpR0UjSq>?Fsxy-25@ zD5HQ)%^k5{RxmP|-RMBCwcZy;h6rKIHFFMWu{ojU&E;k0bV>dblD&Td%j}{GN|Ci2 zP~L8&FH3$1mJ(EwH52a{a&-S!kjd`b5yPfN2p5-KTgkPp^Xi_QqiqLs`_^0ng}HqE z(*iUCwA;03=Tb#-{I|b&?e@u}PcFY;qL^u{Z)rPdlyI^{LPf->y5u-WrAhP`i=SWB zD9B15>;|TtPhY`3efrcO=A#^0q0P!rnz^H-T4iYMAXV^D{>cu>_|C3EEPitEO{p=w z)V`0FddVlG+k|6Sl!->?ZelsQYh3NW(c

R|Zy$#+-Z^=`I=zKWSX6^`2=eXAn$a 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 optimisation - if checked, the mesh will be optimized in order to get better shaped elements. -- Allow Quadrangles - if checked, allows the creation of quadrilateral elements. +- Elements type - Type of the elements to generate the mesh with: + + - Triangles: generate a mesh with only triangles. + + - Quadrangle dominant: generate a mesh with a majority of quadrangles and a few triangles. + + - Quadrangles: generate a mesh with only quadrangles. - Anisotropic - if checked, this parameter defines the maximum anisotropic ratio of the metric governing the anisotropic meshing process. The default value (0) means that the metric (and thus the generated elements) can be arbitrarily stretched. diff --git a/idl/BLSURFPlugin_Algorithm.idl b/idl/BLSURFPlugin_Algorithm.idl index 671fd60..e02d105 100644 --- a/idl/BLSURFPlugin_Algorithm.idl +++ b/idl/BLSURFPlugin_Algorithm.idl @@ -199,7 +199,8 @@ module BLSURFPlugin * Sets to create quadrilateral elements or not */ void SetQuadAllowed(in boolean allowed); - boolean GetQuadAllowed(); + void SetElementType(in long elementType); + long GetElementType(); /*! * Sets angular deflection (in degrees) of a mesh face and edge from CAD surface diff --git a/src/BLSURFPlugin/BLSURFPluginBuilder.py b/src/BLSURFPlugin/BLSURFPluginBuilder.py index 4548fa3..53e2d8e 100644 --- a/src/BLSURFPlugin/BLSURFPluginBuilder.py +++ b/src/BLSURFPlugin/BLSURFPluginBuilder.py @@ -26,6 +26,9 @@ import GEOM LIBRARY = "libBLSURFEngine.so" +# ElementType enum +Triangles, QuadrangleDominant, Quadrangles = 0, 1, 2 + # Topology treatment way of MG-CADSurf FromCAD, PreProcess, PreProcessPlus, PreCAD = 0,1,2,3 @@ -652,12 +655,19 @@ class BLSURF_Algorithm(Mesh_Algorithm): self.Parameters().ClearSizeMaps() pass - ## Sets QuadAllowed flag. + ## Sets QuadAllowed flag (DEPRECATED: use SetElementType) # @param toAllow "allow quadrangles" flag value + # TODO: to remove in Salome 9 def SetQuadAllowed(self, toAllow=True): self.Parameters().SetQuadAllowed(toAllow) pass + ## Sets elements type + # @param theElementType: 0 (Triangles), 1 (QuadrangleDominant), 2 (Quadrangles) + def SetElementType(self, theElementType=Triangles): + self.Parameters().SetElementType(theElementType) + pass + ## Defines hypothesis having several parameters # @return hypothesis object def Parameters(self): diff --git a/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx b/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx index 509972d..ea2ecf6 100644 --- a/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx +++ b/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx @@ -875,7 +875,7 @@ void BLSURFPlugin_BLSURF::SetParameters(const BLSURFPlugin_Hypothesis* hyp, double _gradation = BLSURFPlugin_Hypothesis::GetDefaultGradation(); double _use_volume_gradation = BLSURFPlugin_Hypothesis::GetDefaultUseVolumeGradation(); double _volume_gradation = BLSURFPlugin_Hypothesis::GetDefaultVolumeGradation(); - bool _quadAllowed = BLSURFPlugin_Hypothesis::GetDefaultQuadAllowed(); + BLSURFPlugin_Hypothesis::ElementType _elementType = BLSURFPlugin_Hypothesis::GetDefaultElementType(); double _angleMesh = BLSURFPlugin_Hypothesis::GetDefaultAngleMesh(); double _chordalError = BLSURFPlugin_Hypothesis::GetDefaultChordalError(diagonal); bool _anisotropic = BLSURFPlugin_Hypothesis::GetDefaultAnisotropic(); @@ -925,7 +925,7 @@ void BLSURFPlugin_BLSURF::SetParameters(const BLSURFPlugin_Hypothesis* hyp, _use_volume_gradation = hyp->GetUseVolumeGradation(); if (hyp->GetVolumeGradation() > 0 && _use_volume_gradation ) _volume_gradation = hyp->GetVolumeGradation(); - _quadAllowed = hyp->GetQuadAllowed(); + _elementType = hyp->GetElementType(); if (hyp->GetAngleMesh() > 0) _angleMesh = hyp->GetAngleMesh(); if (hyp->GetChordalError() > 0) @@ -1055,13 +1055,29 @@ void BLSURFPlugin_BLSURF::SetParameters(const BLSURFPlugin_Hypothesis* hyp, set_param(css, "max_size", _maxSizeRel ? val_to_string_rel(_maxSize).c_str() : val_to_string(_maxSize).c_str()); } // anisotropic and quadrangle mesh requires disabling gradation - if ( _anisotropic && _quadAllowed ) + if ( _anisotropic && _elementType != BLSURFPlugin_Hypothesis::Triangles ) useGradation = false; // limitation of V1.3 if ( useGradation && _use_gradation ) set_param(css, "gradation", val_to_string(_gradation).c_str()); if ( useGradation && _use_volume_gradation ) set_param(css, "volume_gradation", val_to_string(_volume_gradation).c_str()); - set_param(css, "element_generation", _quadAllowed ? "quad_dominant" : "triangle"); + + // New since MeshGems 2.5: add full_quad + const char * element_generation = ""; + switch ( _elementType ) + { + case BLSURFPlugin_Hypothesis::Triangles: + element_generation = "triangle"; + break; + case BLSURFPlugin_Hypothesis::QuadrangleDominant: + element_generation = "quad_dominant"; + break; + case BLSURFPlugin_Hypothesis::Quadrangles: + element_generation = "full_quad"; + break; + default: ; + } + set_param(css, "element_generation", element_generation); set_param(css, "metric", _anisotropic ? "anisotropic" : "isotropic"); @@ -3378,7 +3394,7 @@ bool BLSURFPlugin_BLSURF::Evaluate(SMESH_Mesh& aMesh, bool _phySizeRel = BLSURFPlugin_Hypothesis::GetDefaultPhySizeRel(); //int _geometricMesh = BLSURFPlugin_Hypothesis::GetDefaultGeometricMesh(); double _angleMesh = BLSURFPlugin_Hypothesis::GetDefaultAngleMesh(); - bool _quadAllowed = BLSURFPlugin_Hypothesis::GetDefaultQuadAllowed(); + BLSURFPlugin_Hypothesis::ElementType _elementType = BLSURFPlugin_Hypothesis::GetDefaultElementType(); if(_hypothesis) { _physicalMesh = (int) _hypothesis->GetPhysicalMesh(); _phySizeRel = _hypothesis->IsPhySizeRel(); @@ -3387,7 +3403,7 @@ bool BLSURFPlugin_BLSURF::Evaluate(SMESH_Mesh& aMesh, //_geometricMesh = (int) hyp->GetGeometricMesh(); if (_hypothesis->GetAngleMesh() > 0) _angleMesh = _hypothesis->GetAngleMesh(); - _quadAllowed = _hypothesis->GetQuadAllowed(); + _elementType = _hypothesis->GetElementType(); } else { //0020968: EDF1545 SMESH: Problem in the creation of a mesh group on geometry // GetDefaultPhySize() sometimes leads to computation failure @@ -3467,7 +3483,7 @@ bool BLSURFPlugin_BLSURF::Evaluate(SMESH_Mesh& aMesh, int nbQuad = 0; int nbTria = (int) ( anArea/( ELen*ELen*sqrt(3.) / 4 ) ); int nbNodes = (int) ( ( nbTria*3 - (nb1d-1)*2 ) / 6 + 1 ); - if ( _quadAllowed ) + if ( _elementType != BLSURFPlugin_Hypothesis::Quadrangles ) { if ( nb1dVec.size() == 4 ) // quadrangle geom face { diff --git a/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.cxx b/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.cxx index d567f50..4eed187 100644 --- a/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.cxx +++ b/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.cxx @@ -63,7 +63,7 @@ BLSURFPlugin_Hypothesis::BLSURFPlugin_Hypothesis(int hypId, int studyId, SMESH_G _gradation(GetDefaultGradation()), _useVolumeGradation(GetDefaultUseVolumeGradation()), _volumeGradation(GetDefaultVolumeGradation()), - _quadAllowed(GetDefaultQuadAllowed()), + _elementType(GetDefaultElementType()), _angleMesh(GetDefaultAngleMesh()), _chordalError(GetDefaultChordalError()), _anisotropic(GetDefaultAnisotropic()), @@ -360,9 +360,9 @@ void BLSURFPlugin_Hypothesis::SetVolumeGradation(double theVal) { } //============================================================================= -void BLSURFPlugin_Hypothesis::SetQuadAllowed(bool theVal) { - if (theVal != _quadAllowed) { - _quadAllowed = theVal; +void BLSURFPlugin_Hypothesis::SetElementType(ElementType theElementType) { + if (theElementType != _elementType) { + _elementType = theElementType; NotifySubMeshesHypothesisModification(); } } @@ -1930,7 +1930,7 @@ std::ostream & BLSURFPlugin_Hypothesis::SaveTo(std::ostream & save) } save << " " << (int) _topology << " " << (int) _physicalMesh << " " << (int) _geometricMesh << " " << _phySize << " " - << _angleMesh << " " << _gradation << " " << (int) _quadAllowed << " " << _decimesh; + << _angleMesh << " " << _gradation << " " << (int) _elementType << " " << _decimesh; save << " " << _minSize << " " << _maxSize << " " << _angleMesh << " " << _minSize << " " << _maxSize << " " << _verb; save << " " << (int) _preCADMergeEdges << " " << _preCADRemoveNanoEdges << " " << (int) _preCADDiscardInput << " " << _preCADEpsNano ; save << " " << (int) _enforcedInternalVerticesAllFaces; @@ -2257,7 +2257,7 @@ std::istream & BLSURFPlugin_Hypothesis::LoadFrom(std::istream & load) isOK = static_cast(load >> i); if (isOK) - _quadAllowed = (bool) i; + _elementType = (ElementType) i; else load.clear(std::ios::badbit | load.rdstate()); diff --git a/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.hxx b/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.hxx index 1531872..f445105 100644 --- a/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.hxx +++ b/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.hxx @@ -64,6 +64,12 @@ public: GeometricalLocalSize }; + enum ElementType { + Triangles, + QuadrangleDominant, + Quadrangles + }; + static const char* GetHypType(bool hasgeom) { return hasgeom ? "MG-CADSurf Parameters" : "MG-CADSurf Parameters_NOGEOM"; } @@ -97,8 +103,8 @@ public: void SetVolumeGradation(double theGradation); double GetVolumeGradation() const { return _volumeGradation; } - void SetQuadAllowed(bool theVal); - bool GetQuadAllowed() const { return _quadAllowed; } + void SetElementType(ElementType theElementType); + ElementType GetElementType() const { return _elementType; } void SetAngleMesh(double theAngle); double GetAngleMesh() const { return _angleMesh; } @@ -425,7 +431,7 @@ public: static double GetDefaultGradation() { return 1.3; } static bool GetDefaultUseVolumeGradation() { return false; } static double GetDefaultVolumeGradation() { return 2; } - static bool GetDefaultQuadAllowed() { return false; } + static ElementType GetDefaultElementType() { return Triangles; } static double GetDefaultAngleMesh() { return 8.0; } static double GetDefaultChordalError(double diagonal); @@ -567,7 +573,7 @@ private: double _gradation; bool _useVolumeGradation; double _volumeGradation; - bool _quadAllowed; + ElementType _elementType; double _angleMesh; double _chordalError; bool _anisotropic; diff --git a/src/BLSURFPlugin/BLSURFPlugin_Hypothesis_i.cxx b/src/BLSURFPlugin/BLSURFPlugin_Hypothesis_i.cxx index 3eef21b..0de4975 100644 --- a/src/BLSURFPlugin/BLSURFPlugin_Hypothesis_i.cxx +++ b/src/BLSURFPlugin/BLSURFPlugin_Hypothesis_i.cxx @@ -362,25 +362,42 @@ CORBA::Double BLSURFPlugin_Hypothesis_i::GetVolumeGradation() * BLSURFPlugin_Hypothesis_i::SetQuadAllowed * * Set true or false + * + * DEPRACATED, kept for python script compatibility + * + * TO be removed in Salome 9 */ //============================================================================= void BLSURFPlugin_Hypothesis_i::SetQuadAllowed(CORBA::Boolean theValue) { - this->GetImpl()->SetQuadAllowed(theValue); - std::string theValueStr = theValue ? "True" : "False"; - SMESH::TPythonDump() << _this() << ".SetQuadAllowed( " << theValueStr.c_str() << " )"; + ::BLSURFPlugin_Hypothesis::ElementType theElementType = theValue ? + ::BLSURFPlugin_Hypothesis::QuadrangleDominant : ::BLSURFPlugin_Hypothesis::Triangles; + this->GetImpl()->SetElementType(theElementType); + SMESH::TPythonDump() << _this() << ".SetElementType( " << theElementType << " )"; } //============================================================================= /*! - * BLSURFPlugin_Hypothesis_i::GetQuadAllowed + * BLSURFPlugin_Hypothesis_i::SetElementType * - * Get true or false + * Set ElementType + */ +//============================================================================= +void BLSURFPlugin_Hypothesis_i::SetElementType(CORBA::Long theValue) +{ + this->GetImpl()->SetElementType((::BLSURFPlugin_Hypothesis::ElementType) theValue); + SMESH::TPythonDump() << _this() << ".SetElementType( " << theValue << " )"; +} +//============================================================================= +/*! + * BLSURFPlugin_Hypothesis_i::GetElementType + * + * Get ElementType */ //============================================================================= -CORBA::Boolean BLSURFPlugin_Hypothesis_i::GetQuadAllowed() +CORBA::Long BLSURFPlugin_Hypothesis_i::GetElementType() { - return this->GetImpl()->GetQuadAllowed(); + return this->GetImpl()->GetElementType(); } //============================================================================= diff --git a/src/BLSURFPlugin/BLSURFPlugin_Hypothesis_i.hxx b/src/BLSURFPlugin/BLSURFPlugin_Hypothesis_i.hxx index aceec48..e5517d9 100644 --- a/src/BLSURFPlugin/BLSURFPlugin_Hypothesis_i.hxx +++ b/src/BLSURFPlugin/BLSURFPlugin_Hypothesis_i.hxx @@ -82,7 +82,9 @@ public: CORBA::Double GetVolumeGradation(); void SetQuadAllowed(CORBA::Boolean theValue); - CORBA::Boolean GetQuadAllowed(); + + void SetElementType(CORBA::Long theValue); + CORBA::Long GetElementType(); void SetAngleMesh(CORBA::Double theValue); CORBA::Double GetAngleMesh(); diff --git a/src/GUI/BLSURFPluginGUI_Dlg.h b/src/GUI/BLSURFPluginGUI_Dlg.h index 7c24426..e82beca 100644 --- a/src/GUI/BLSURFPluginGUI_Dlg.h +++ b/src/GUI/BLSURFPluginGUI_Dlg.h @@ -37,6 +37,12 @@ enum GeometricMesh GeometricalLocalSize }; +enum ElementType { + Triangles, + QuadrangleDominant, + Quadrangles +}; + enum Topology { FromCAD = 0, Process, diff --git a/src/GUI/BLSURFPluginGUI_HypothesisCreator.cxx b/src/GUI/BLSURFPluginGUI_HypothesisCreator.cxx index 94ba8e7..48cf60c 100644 --- a/src/GUI/BLSURFPluginGUI_HypothesisCreator.cxx +++ b/src/GUI/BLSURFPluginGUI_HypothesisCreator.cxx @@ -1168,7 +1168,6 @@ QFrame* BLSURFPluginGUI_HypothesisCreator::buildFrame() myTabWidget->setCurrentIndex( STD_TAB ); connect( myAdvWidget->addBtn, SIGNAL( clicked() ), this, SLOT( onAddOption() ) ); - connect( myStdWidget->myAllowQuadrangles, SIGNAL( stateChanged( int ) ), this, SLOT( onStateChange() )); // Size Maps connect( addMapButton, SIGNAL( clicked()), this, SLOT( onAddMap() ) ); @@ -1802,8 +1801,14 @@ void BLSURFPluginGUI_HypothesisCreator::retrieveParams() const myStdWidget->myVolumeGradation->setText(""); else myStdWidget->myVolumeGradation->SetValue( data.myVolumeGradation ); - myStdWidget->myAllowQuadrangles->setChecked( data.myAllowQuadrangles ); + foreach (QAbstractButton* button, myStdWidget->myButtonGroupElementType->buttons()) { + if (myStdWidget->myButtonGroupElementType->id(button) == data.myElementType) { + button->setChecked(true); + break; + } + } + if (data.myAngleMesh < 0) myStdWidget->myAngleMesh->setText(""); else @@ -2002,7 +2007,7 @@ bool BLSURFPluginGUI_HypothesisCreator::readParamsFromHypo( BlsurfHypothesisData h_data.myGradation = h->GetGradation(); h_data.myUseVolumeGradation = h->GetUseVolumeGradation(); h_data.myVolumeGradation = h->GetVolumeGradation(); - h_data.myAllowQuadrangles = h->GetQuadAllowed(); + h_data.myElementType = h->GetElementType(); double angle = h->GetAngleMesh(); h_data.myAngleMesh = angle > 0 ? angle : -1.0; double chordalError = h->GetChordalError(); @@ -2261,8 +2266,8 @@ bool BLSURFPluginGUI_HypothesisCreator::storeParamsToHypo( const BlsurfHypothesi if ( h->GetVolumeGradation() != h_data.myVolumeGradation ) h->SetVolumeGradation( h_data.myVolumeGradation <= 0 ? -1 : h_data.myVolumeGradation ); - if ( h->GetQuadAllowed() != h_data.myAllowQuadrangles ) - h->SetQuadAllowed( h_data.myAllowQuadrangles ); + if ( h->GetElementType() != h_data.myElementType ) + h->SetElementType( h_data.myElementType ); if ( (int) h_data.myGeometricMesh != DefaultGeom ) { if ( h->GetAngleMesh() != h_data.myAngleMesh ) @@ -2493,7 +2498,7 @@ QString BLSURFPluginGUI_HypothesisCreator::readParamsFromWidgets( BlsurfHypothes h_data.myGradation = h_data.myUseGradation ? myStdWidget->myGradation->GetValue() : -1.0; h_data.myUseVolumeGradation = myStdWidget->myUseVolumeGradation->isChecked() && !myStdWidget->myVolumeGradation->text().isEmpty(); h_data.myVolumeGradation = h_data.myUseVolumeGradation ? myStdWidget->myVolumeGradation->GetValue() : -1. ; - h_data.myAllowQuadrangles = myStdWidget->myAllowQuadrangles->isChecked(); + h_data.myElementType = myStdWidget->myButtonGroupElementType->checkedId(); h_data.myAngleMesh = myStdWidget->myAngleMesh->text().isEmpty() ? -1.0 : myStdWidget->myAngleMesh->GetValue(); h_data.myChordalError = myStdWidget->myChordalError->text().isEmpty() ? -1.0 : myStdWidget->myChordalError->GetValue(); h_data.myAnisotropic = myStdWidget->myAnisotropic->isChecked(); @@ -2524,7 +2529,7 @@ QString BLSURFPluginGUI_HypothesisCreator::readParamsFromWidgets( BlsurfHypothes guiHyp += tr("BLSURF_MAXSIZE") + " = "+ QString::number( h_data.myMaxSize ) + "; "; guiHyp += tr("BLSURF_MAXSIZE") + " " + tr("BLSURF_SIZE_REL") + " = " + QString(h_data.myMaxSizeRel ? "yes" : "no") + "; "; guiHyp += tr("BLSURF_GRADATION") + " = " + QString::number( h_data.myGradation ) + "; "; - guiHyp += tr("BLSURF_ALLOW_QUADRANGLES") + " = " + QString(h_data.myAllowQuadrangles ? "yes" : "no") + "; "; + guiHyp += tr("BLSURF_ELEMENT_TYPE") + " = " + QString::number(h_data.myElementType) + "; "; guiHyp += tr("BLSURF_ANGLE_MESH") + " = " + QString::number( h_data.myAngleMesh ) + "; "; guiHyp += tr("BLSURF_CHORDAL_ERROR") + " = " + QString::number( h_data.myChordalError ) + "; "; guiHyp += tr("BLSURF_ANISOTROPIC") + " = " + QString(h_data.myAnisotropic ? "yes" : "no") + "; "; diff --git a/src/GUI/BLSURFPluginGUI_HypothesisCreator.h b/src/GUI/BLSURFPluginGUI_HypothesisCreator.h index 4c5a952..edf0098 100644 --- a/src/GUI/BLSURFPluginGUI_HypothesisCreator.h +++ b/src/GUI/BLSURFPluginGUI_HypothesisCreator.h @@ -169,7 +169,8 @@ typedef struct bool myAnisotropic, myOptimiseTinyEdges, myRemoveTinyEdges, myForceBadElementRemoval, myCorrectSurfaceIntersection; double myAnisotropicRatio, myTinyEdgeLength, myTinyEdgeOptimisLength, myBadElementAspectRatio, myCorrectSurfaceIntersectionMaxCost; bool myOptimizeMesh, myQuadraticMesh; - bool myAllowQuadrangles, mySmpsurface,mySmpedge,mySmppoint,myEnforcedVertex,myInternalEnforcedVerticesAllFaces; + bool mySmpsurface,mySmpedge,mySmppoint,myEnforcedVertex,myInternalEnforcedVerticesAllFaces; + long myElementType; // bool myPreCADMergeEdges, myPreCADProcess3DTopology, myPreCADDiscardInput; // bool myGMFFileMode; std::string myGMFFileName, myInternalEnforcedVerticesAllFacesGroup; diff --git a/src/GUI/BLSURFPluginGUI_StdWidget.cxx b/src/GUI/BLSURFPluginGUI_StdWidget.cxx index 35a60c4..830ce66 100644 --- a/src/GUI/BLSURFPluginGUI_StdWidget.cxx +++ b/src/GUI/BLSURFPluginGUI_StdWidget.cxx @@ -61,6 +61,9 @@ BLSURFPluginGUI_StdWidget::BLSURFPluginGUI_StdWidget( QWidget* parent, Qt::Windo myTinyEdgeOptimisLength->setText(""); myCorrectSurfaceIntersectionMaxCost->setText(""); myBadElementAspectRatio->setText(""); + myButtonGroupElementType->setId(myRadioButtonTriangles, Triangles); + myButtonGroupElementType->setId(myRadioButtonQuadrangleDominant, QuadrangleDominant); + myButtonGroupElementType->setId(myRadioButtonQuadrangles, Quadrangles); } BLSURFPluginGUI_StdWidget::~BLSURFPluginGUI_StdWidget() diff --git a/src/GUI/BLSURFPluginGUI_StdWidget_QTD.ui b/src/GUI/BLSURFPluginGUI_StdWidget_QTD.ui index 53b0517..608fe0d 100644 --- a/src/GUI/BLSURFPluginGUI_StdWidget_QTD.ui +++ b/src/GUI/BLSURFPluginGUI_StdWidget_QTD.ui @@ -7,23 +7,11 @@ 0 0 - 667 - 342 + 723 + 399 - - 0 - - - 0 - - - 0 - - - 0 - @@ -167,7 +155,7 @@ BLSURF_GEOM_MESH_TOOLTIP - GLOBAL_SIZE + BLSURF_DEFAULT_USER @@ -249,37 +237,17 @@ BLSURF_MAIN_PARAMETERS - - - - BLSURF_OPTIMISATION_TOOLTIP - - - BLSURF_OPTIMISATION - - - true - - - - - + + - BLSURF_ELEMENT_ORDER_TOOLTIP + BLSURF_GRADATION_TOOLTIP - BLSURF_ELEMENT_ORDER - - - - - - - false + BLSURF_GRADATION - + Qt::Vertical @@ -292,30 +260,40 @@ - - + + - BLSURF_GRADATION_TOOLTIP + BLSURF_ELEMENT_ORDER_TOOLTIP - BLSURF_GRADATION + BLSURF_ELEMENT_ORDER - - + + + + false + + + + + - BLSURF_ALLOW_QUADRANGLES_TOOLTIP + BLSURF_OPTIMISATION_TOOLTIP - BLSURF_ALLOW_QUADRANGLES + BLSURF_OPTIMISATION + + + true - + BLSURF_OTHER_PARAMETERS @@ -439,6 +417,70 @@ + + + + BLSURF_ELEMENT_TYPE + + + + + + BLSURF_TRIANGLES_TOOLTIP + + + BLSURF_TRIANGLES + + + true + + + myButtonGroupElementType + + + + + + + BLSURF_ALLOW_QUADRANGLES_TOOLTIP + + + BLSURF_QUADRANGLE_DOMINANT + + + myButtonGroupElementType + + + + + + + BLSURF_QUADRANGLES_TOOLTIP + + + BLSURF_QUADRANGLES + + + myButtonGroupElementType + + + + + + + Qt::Vertical + + + + 20 + 3 + + + + + + + @@ -463,7 +505,6 @@ myUseGradation myGradation myOptimizeMesh - myAllowQuadrangles myAnisotropic myAnisotropicRatio myOptimiseTinyEdges @@ -757,4 +798,7 @@ onPhysicalMeshChanged() onEditingFinished() + + + diff --git a/src/GUI/BLSURFPlugin_msg_en.ts b/src/GUI/BLSURFPlugin_msg_en.ts index 6162398..8117f43 100644 --- a/src/GUI/BLSURFPlugin_msg_en.ts +++ b/src/GUI/BLSURFPlugin_msg_en.ts @@ -100,13 +100,33 @@ The default computed value is <em>diag</em>/5. Maximum ratio between the lengths of two adjacent edges in 3D mesh. - BLSURF_ALLOW_QUADRANGLES - Allow Quadrangles + BLSURF_ELEMENT_TYPE + Elements type + + + BLSURF_TRIANGLES + Triangles + + + BLSURF_QUADRANGLE_DOMINANT + Quadrangle dominant + + + BLSURF_QUADRANGLES + Quadrangles BLSURF_ALLOW_QUADRANGLES_TOOLTIP To generate quadrangle dominant mesh + + BLSURF_TRIANGLES_TOOLTIP + To generate triangles-only mesh + + + BLSURF_QUADRANGLES_TOOLTIP + To generate quadrangles-only mesh + BLSURF_GEOMETRICAL_SIZE Geometrical size diff --git a/src/GUI/BLSURFPlugin_msg_fr.ts b/src/GUI/BLSURFPlugin_msg_fr.ts index 56d7efd..bd56b83 100755 --- a/src/GUI/BLSURFPlugin_msg_fr.ts +++ b/src/GUI/BLSURFPlugin_msg_fr.ts @@ -104,13 +104,33 @@ La valeur par défaut est calculée par <em>diag</em>/5.Ratio maximum entre les longueurs de deux segments adjacents. - BLSURF_ALLOW_QUADRANGLES - Autoriser les quadrangles + BLSURF_ELEMENT_TYPE + Type d'éléments + + + BLSURF_TRIANGLES + Triangles + + + BLSURF_QUADRANGLE_DOMINANT + Quadrangles en majorité + + + BLSURF_QUADRANGLES + Quadrangles BLSURF_ALLOW_QUADRANGLES_TOOLTIP Générer un maillage à majorité de quadrangles + + BLSURF_TRIANGLES_TOOLTIP + Générer un maillage en triangles uniquement + + + BLSURF_QUADRANGLES_TOOLTIP + Générer un maillage en quadrangles uniquement + BLSURF_GEOMETRICAL_SIZE Taille géométrique diff --git a/src/GUI/BLSURFPlugin_msg_ja.ts b/src/GUI/BLSURFPlugin_msg_ja.ts index 1e0eb84..d5085f3 100644 --- a/src/GUI/BLSURFPlugin_msg_ja.ts +++ b/src/GUI/BLSURFPlugin_msg_ja.ts @@ -96,8 +96,32 @@ 四角形を許可 - BLSURF_ALLOW_QUADRANGLES_TOOLTIP - ドミナント四角形要素の生成 + BLSURF_ELEMENT_TYPE + Element type + + + BLSURF_TRIANGLES + Triangles + + + BLSURF_QUADRANGLE_DOMINANT + Quadrangle dominant + + + BLSURF_QUADRANGLES + Quadrangles + + + BLSURF_ALLOW_QUADRANGLES_TOOLTIP + ドミナント四角形要素の生成 + + + BLSURF_TRIANGLES_TOOLTIP + To generate triangles-only mesh + + + BLSURF_QUADRANGLES_TOOLTIP + To generate quadrangles-only mesh BLSURF_GEOMETRICAL_SIZE diff --git a/tests/test_quadrangles_gradation.py b/tests/test_quadrangles_gradation.py index 9a8f108..264fd8f 100644 --- a/tests/test_quadrangles_gradation.py +++ b/tests/test_quadrangles_gradation.py @@ -87,7 +87,7 @@ params.SetGeometricMesh( 1 ) params.SetAngleMesh( 4 ) params.SetPhySize( 8 ) algo2d.SetGradation(1.05) -params.SetQuadAllowed( True ) +params.SetElementType( True ) ok = Mesh_1.Compute() @@ -124,7 +124,7 @@ params.SetGeometricMesh( 1 ) params.SetAngleMesh( 4 ) params.SetPhySize( 8 ) algo2d.SetGradation(1.05) -params.SetQuadAllowed( True ) +params.SetElementType( 1 ) params.SetAnisotropic(True) ok = Mesh_2.Compute() diff --git a/tests/test_remove_tiny_edges.py b/tests/test_remove_tiny_edges.py index 1e863ee..0b61607 100644 --- a/tests/test_remove_tiny_edges.py +++ b/tests/test_remove_tiny_edges.py @@ -76,7 +76,6 @@ params.SetGeometricMesh( 1 ) params.SetAngleMesh( 4 ) params.SetPhySize( 8 ) #algo2d.SetGradation(1.05) -#params.SetQuadAllowed( True ) params.SetQuadraticMesh( True ) params.SetRemoveTinyEdges( True ) params.SetTinyEdgeLength( tiny_edge_length ) -- 2.39.2