-// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
#include "SMESH_NumberFilter.hxx"
#include "SMESH_TypeDefs.hxx"
#include "SMESH_TypeFilter.hxx"
+#include "SMESH_Gen_i.hxx"
#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
// SALOME GEOM includes
#include <GEOMBase.h>
#include <GEOMImpl_Types.hxx>
+#include <GEOM_Client.hxx>
#include <GEOM_SelectionFilter.h>
#include <GEOM_wrap.hxx>
#include <GeometryGUI.h>
return myDlg;
}
+//================================================================================
+/*!
+ * \brief Log meshers info
+*/
+//================================================================================
+void SMESHGUI_MeshOp::logSmeshParams()
+{
+ QString mesherType;
+ int curMeshType = myDlg->currentMeshType();
+ switch ( curMeshType ) {
+ case MT_ANY:
+ mesherType = "Any";
+ break;
+ case MT_TRIANGULAR:
+ mesherType = "Triangular";
+ break;
+ case MT_QUADRILATERAL:
+ mesherType = "Quadrilateral";
+ break;
+ case MT_TETRAHEDRAL:
+ mesherType = "Tetrahedral";
+ break;
+ case MT_HEXAHEDRAL:
+ mesherType = "Hexahedral";
+ break;
+ default:
+ mesherType = "";
+ }
+
+ QString aMessage = QString("Mesh type is %1").arg(mesherType);
+ CAM_Application::logStructuredUserEvent( "Mesh",
+ "create mesh",
+ "",
+ "",
+ aMessage);
+
+ for ( int dim = 0; dim <= 3; ++dim )
+ {
+ HypothesisData * curAlgo = hypData( dim, Algo, currentHyp( dim, Algo ));
+ if(curAlgo)
+ {
+ aMessage = QString("%1D algorithm is %2").arg(dim).arg(curAlgo->Label);
+ CAM_Application::logStructuredUserEvent( "Mesh",
+ "create mesh",
+ "",
+ "",
+ aMessage);
+ }
+ }
+}
+
//================================================================================
/*!
* \brief Creates or edits mesh
if (( myToCreate && !myIsMesh ) || myIsInvalidSubMesh )
aResult = createSubMesh( aMess, anEntryList );
else if ( !myToCreate )
- aResult = editMeshOrSubMesh( aMess );
+ aResult = editMeshOrSubMesh( aMess, anEntryList );
if ( aResult )
{
SMESHGUI::Modified();
{
if ( myToCreate )
setDefaultName();
+ //connect(aAction, SIGNAL(triggered(bool)), this, SLOT(logSmeshParams()));
}
else
{
SUIT_MessageBox::warning( myDlg, tr( "SMESH_ERROR" ), aMess );
}
+ logSmeshParams();
myHypoSet = 0;
return aResult;
//================================================================================
/*!
* \brief check if selected shape is a sub-shape of the shape to mesh
- * \retval bool - check result
+ * \retval bool - check result
*/
//================================================================================
bool SMESHGUI_MeshOp::isSubshapeOk() const
QStringList aGEOMs;
myDlg->selectedObject(SMESHGUI_MeshDlg::Geom, aGEOMs);
- if (aGEOMs.count() > 0) {
- GEOM::GEOM_Gen_var geomGen = mainGeom->GetGen();
- if (geomGen->_is_nil()) return false;
-
- GEOM::GEOM_IGroupOperations_ptr op = geomGen->GetIGroupOperations();
- if (op->_is_nil()) return false;
-
- // check all selected shapes
- QStringList::const_iterator aSubShapesIter = aGEOMs.begin();
- for ( ; aSubShapesIter != aGEOMs.end(); aSubShapesIter++) {
- QString aSubGeomEntry = (*aSubShapesIter);
- _PTR(SObject) pSubGeom = SMESH::getStudy()->FindObjectID(aSubGeomEntry.toUtf8().data());
- if (!pSubGeom) return false;
-
- GEOM::GEOM_Object_var aSubGeomVar =
- GEOM::GEOM_Object::_narrow(_CAST(SObject,pSubGeom)->GetObject());
- if (aSubGeomVar->_is_nil()) return false;
-
- // skl for NPAL14695 - implementation of searching of mainObj
- GEOM::GEOM_Object_var mainObj = op->GetMainShape(aSubGeomVar); /* _var not _wrap as
- mainObj already exists! */
- while( !mainObj->_is_nil()) {
- CORBA::String_var entry1 = mainObj->GetEntry();
- CORBA::String_var entry2 = mainGeom->GetEntry();
- if (std::string( entry1.in() ) == entry2.in() )
- return true;
- mainObj = op->GetMainShape(mainObj);
- }
- if ( aSubGeomVar->GetShapeType() == GEOM::COMPOUND )
- {
- // is aSubGeomVar a compound of sub-shapes?
- GEOM::GEOM_IShapesOperations_wrap sop = geomGen->GetIShapesOperations();
- if (sop->_is_nil()) return false;
- GEOM::ListOfLong_var ids = sop->GetAllSubShapesIDs( aSubGeomVar,
- GEOM::SHAPE,/*sorted=*/false);
- if ( ids->length() > 0 )
- {
- ids->length( 1 );
- GEOM::GEOM_Object_var compSub = geomGen->AddSubShape( aSubGeomVar, ids );
- if ( !compSub->_is_nil() )
- {
- GEOM::ListOfGO_var shared = sop->GetSharedShapes( mainGeom,
- compSub,
- compSub->GetShapeType() );
- geomGen->RemoveObject( compSub );
- compSub->UnRegister();
- if ( shared->length() > 0 ) {
- geomGen->RemoveObject( shared[0] );
- shared[0]->UnRegister();
- }
- return ( shared->length() > 0 );
- }
- }
- }
- }
+ // check all selected shapes
+ for ( QString& aSubGeomEntry : aGEOMs )
+ {
+ _PTR(SObject) pSubGeom = SMESH::getStudy()->FindObjectID( aSubGeomEntry.toUtf8().data() );
+ if ( !pSubGeom ) return false;
+
+ GEOM::GEOM_Object_var subGeom =
+ GEOM::GEOM_Object::_narrow(_CAST(SObject,pSubGeom)->GetObject());
+
+ if ( SMESH::ContainsSubShape( mainGeom, subGeom, false ))
+ return true;
}
return false;
THypDataList& theDataList,
HypothesisData* thePrevAlgoData,
HypothesisData* theNextAlgoData,
- const QString& theMeshType)
+ const QString& /*theMeshType*/)
{
theDataList.clear();
theHyps.clear();
initHypCreator( aCreator );
myDlg->setEnabled( false );
+ myDlg->hide();
aCreator->create(initParamHyp, aHypName, myDlg, this, SLOT( onHypoCreated( int ) ) );
dialog = true;
}
int obj = myDlg->getActiveObject();
onActivateObject( obj ); // Issue 0020170. Restore filters
myDlg->setEnabled( true );
+ myDlg->show();
}
_PTR(SComponent) aFather = SMESH::getStudy()->FindComponent("SMESH");
removeCustomFilters(); // Issue 0020170
myDlg->setEnabled( false );
+ myDlg->hide();
aCreator->edit( aHyp.in(), aHypItem.second, dlg(), this, SLOT( onHypoEdited( int ) ) );
}
* 1 = accepted
*/
//================================================================================
-void SMESHGUI_MeshOp::onHypoEdited( int result )
+void SMESHGUI_MeshOp::onHypoEdited( int /*result*/ )
{
int obj = myDlg->getActiveObject();
onActivateObject( obj ); // Issue 0020170. Restore filters
myDlg->setEnabled( true );
+ myDlg->show();
}
//================================================================================
if ( aHypoSet->toUseCommonSize() && !getAverageSize( myAverageSize ))
return;
+ int maxDim = -1;
for ( int isAlgo = 1; isAlgo >= 0; --isAlgo )
for ( aHypoSet->init( isAlgo, setType ); aHypoSet->more(); aHypoSet->next() )
{
{
setCurrentHyp( myDim, Algo, index );
onAlgoSelected( index, myDim );
+ maxDim = Max( maxDim, myDim );
}
}
else
}
}
+ if ( maxDim > 0 )
+ myDlg->setCurrentTab( maxDim );
+
return;
}
elemType = SMESH::NODE;
CORBA::String_var name = geomGroups[ iG ]->GetName();
- meshGroup = aMesh->CreateGroupFromGEOM( elemType, name, geomGroups[ iG ]);
+
+ SALOMEDS::SObject_wrap groupSO = SMESH_Gen_i::GetSMESHGen()->ObjectToSObject( geomGroups[iG] );
+ if (!groupSO->_is_nil())
+ meshGroup = aMesh->CreateGroupFromGEOM( elemType, name, geomGroups[ iG ]);
// if ( elemType != SMESH::NODE )
// meshGroup = aMesh->CreateGroupFromGEOM( SMESH::NODE, name, geomGroups[ iG ]);
}
// create a GEOM group
GEOM::GEOM_Gen_var geomGen = mainGeom->GetGen();
if ( !geomGen->_is_nil() ) {
- GEOM::GEOM_IGroupOperations_ptr op = geomGen->GetIGroupOperations();
+ GEOM::GEOM_IGroupOperations_wrap op = geomGen->GetIGroupOperations();
if ( !op->_is_nil() )
{
// check and add all selected GEOM objects: they must be
//================================================================================
/*!
* \brief Edits mesh or sub-mesh
- * \param theMess - Output parameter intended for returning error message
- * \retval bool - TRUE if mesh is edited successfully, FALSE otherwise
+ * \param theMess - Output parameter intended for returning error message
+ * \param theEntryList - List of entries of published objects
+ * \retval bool - TRUE if mesh is edited successfully, FALSE otherwise
*
* Assigns new name hypotheses and algorithms to the mesh or sub-mesh
*/
//================================================================================
-bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess )
+bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess, QStringList& theEntryList)
{
theMess = "";
if ( !isMesh && !aSubMeshVar->_is_nil() )
aMesh = aSubMeshVar->GetFather();
+ _PTR(SObject) aMeshSO = SMESH::FindSObject(aMesh.in());
+ if (aMeshSO) {
+ if (aSubMeshVar->_is_nil()) SMESH::SetName(aMeshSO, myDlg->objectText(SMESHGUI_MeshDlg::Obj));
+ theEntryList.append(aMeshSO->GetID().c_str());
+ }
+
// Assign new algorithms and hypotheses
for ( int dim = aDim; dim <= SMESH::DIM_3D; dim++ )
{
* \param theIndex - Index of current type of mesh
*/
//================================================================================
-void SMESHGUI_MeshOp::onAlgoSetByMeshType( const int theTabIndex, const int theIndex )
+void SMESHGUI_MeshOp::onAlgoSetByMeshType( const int /*theTabIndex*/, const int /*theIndex*/ )
{
setFilteredAlgoData();
}