X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_SewingDlg.cxx;h=cc27ffed285889363d6e8416d03fd65096833ccd;hb=0a237be4b91b6db526b340c534f40a385d6d65ab;hp=d0a5cc5db624c1a3d137c782db318aae86175981;hpb=fd96feab4b58b9ebe8706e44b35006e0122d682e;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_SewingDlg.cxx b/src/SMESHGUI/SMESHGUI_SewingDlg.cxx index d0a5cc5db..cc27ffed2 100644 --- a/src/SMESHGUI/SMESHGUI_SewingDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_SewingDlg.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -44,6 +44,7 @@ // SALOME GUI includes #include #include +#include #include #include #include @@ -53,6 +54,7 @@ #include #include #include +#include // OCCT includes #include @@ -282,7 +284,7 @@ SMESHGUI_SewingDlg::SMESHGUI_SewingDlg( SMESHGUI* theModule ) AutoSewCheck->setChecked( true ); // mesh - QGroupBox* GroupMesh = new QGroupBox(tr("SMESH_SELECT_WHOLE_MESH"), SewFreeBordersWidget); + QGroupBox* GroupMesh = new QGroupBox(tr("SMESH_MESH"), SewFreeBordersWidget); QHBoxLayout* GroupMeshLayout = new QHBoxLayout(GroupMesh); GroupMeshLayout->setSpacing(SPACING); GroupMeshLayout->setMargin(MARGIN); @@ -450,11 +452,12 @@ SMESHGUI_SewingDlg::SMESHGUI_SewingDlg( SMESHGUI* theModule ) mySMESHGUI->SetActiveDialogBox((QDialog*)this); - myHelpFileName = "sewing_meshes_page.html"; + myHelpFileName = "sewing_meshes.html"; myActor = 0; - setDisplayMode(); + myStoredEntityMode = 0; + setDisplayMode(); Init(); /* signals and slots connections */ @@ -572,6 +575,8 @@ void SMESHGUI_SewingDlg::ConstructorsClicked (int constructorId) CheckBoxPolyedrs->hide(); } + CheckBoxMerge->setVisible ( constructorId == 3 ); + if (( !SubGroup1->isVisible() ) && ( constructorId != 0 || ModeButGrp->checkedId() == MODE_MANUAL )) { @@ -702,6 +707,8 @@ void SMESHGUI_SewingDlg::ConstructorsClicked (int constructorId) void SMESHGUI_SewingDlg::setDisplayMode() { + if ( myStoredEntityMode ) + return; myStoredEntityMode = 0; myStoredRepresentation = -1; @@ -819,15 +826,17 @@ bool SMESHGUI_SewingDlg::haveBorders() QString SMESHGUI_SewingDlg::getPartText(const SMESH::FreeBorderPart& aPART) { + typedef CORBA::Long TInt; QString text; - if ( 0 <= aPART.border && aPART.border < myBorders->borders.length() ) + if ( 0 <= aPART.border && aPART.border < (TInt)myBorders->borders.length() ) { const SMESH::FreeBorder& aBRD = myBorders->borders[ aPART.border ]; - if ( 0 <= aPART.node1 && aPART.node1 < aBRD.nodeIDs.length() && - 0 <= aPART.nodeLast && aPART.nodeLast < aBRD.nodeIDs.length() ) + if ( 0 <= aPART.node1 && aPART.node1 < (TInt)aBRD.nodeIDs.length() && + 0 <= aPART.nodeLast && aPART.nodeLast < (TInt)aBRD.nodeIDs.length() ) { - text += QString("( %1 %2 ) ") + text += QString("( %1 %2 %3 ) ") .arg( aBRD.nodeIDs[ aPART.node1 ] ) + .arg( aBRD.nodeIDs[ aPART.node2 ] ) .arg( aBRD.nodeIDs[ aPART.nodeLast ] ); } } @@ -845,7 +854,7 @@ QString SMESHGUI_SewingDlg::getGroupText(int groupIndex) if ( haveBorders() && groupIndex >= 0 && - groupIndex < myBorders->coincidentGroups.length() ) + groupIndex < (int)myBorders->coincidentGroups.length() ) { const SMESH::FreeBordersGroup& aGRP = myBorders->coincidentGroups[ groupIndex ]; @@ -877,30 +886,30 @@ void SMESHGUI_SewingDlg::onDetectClicked() SMESH::SMESH_MeshEditor_var editor = myMesh->GetMeshEditor(); myBorders = editor->FindCoincidentFreeBorders( SpinBoxTolerance->GetValue() ); - if ( !haveBorders() ) - return; - - for ( size_t i = 0; i < myBorderDisplayers.size(); ++i ) + if ( haveBorders() ) { - delete myBorderDisplayers[ i ]; - myBorderDisplayers[ i ] = 0; - } - myBorderDisplayers.resize( myBorders->coincidentGroups.length(), 0 ); + for ( size_t i = 0; i < myBorderDisplayers.size(); ++i ) + { + delete myBorderDisplayers[ i ]; + myBorderDisplayers[ i ] = 0; + } + myBorderDisplayers.resize( myBorders->coincidentGroups.length(), 0 ); - for ( CORBA::ULong i = 0; i < myBorders->coincidentGroups.length(); ++i ) - { - QString groupText = getGroupText( i ); - if ( groupText.isEmpty() ) - continue; - - QColor groupColor; - groupColor.setHsvF( float(i) / myBorders->coincidentGroups.length(), 1., 1. ); - QPixmap icon( QSize( 20, 20 )); - icon.fill( groupColor ); - - QListWidgetItem * item = new QListWidgetItem( icon, groupText, ListCoincident ); - item->setData( GROUP_COLOR, groupColor ); - item->setData( GROUP_INDEX, i ); + for ( uint i = 0; i < myBorders->coincidentGroups.length(); ++i ) + { + QString groupText = getGroupText( i ); + if ( groupText.isEmpty() ) + continue; + + QColor groupColor; + groupColor.setHsvF( float(i) / myBorders->coincidentGroups.length(), 1., 1. ); + QPixmap icon( QSize( 20, 20 )); + icon.fill( groupColor ); + + QListWidgetItem * item = new QListWidgetItem( icon, groupText, ListCoincident ); + item->setData( GROUP_COLOR, groupColor ); + item->setData( GROUP_INDEX, i ); + } } myBusy = false; @@ -926,7 +935,7 @@ void SMESHGUI_SewingDlg::onRemoveGroupClicked() delete item; if ( myBorderDisplayers[ groupIndex ]) myBorderDisplayers[ groupIndex ]->Hide(); - SMESH::FreeBordersGroup& aGRP = myBorders->coincidentGroups[ myCurGroupIndex ]; + SMESH::FreeBordersGroup& aGRP = myBorders->coincidentGroups[ groupIndex ]; aGRP.length( 0 ); } myBusy = false; @@ -950,7 +959,7 @@ void SMESHGUI_SewingDlg::showGroup( QListWidgetItem* item ) int groupIndex = item->data( GROUP_INDEX ).toInt(); QColor groupColor = item->data( GROUP_COLOR ).value(); if ( groupIndex >= 0 && - groupIndex < myBorders->coincidentGroups.length() ) + groupIndex < (int)myBorders->coincidentGroups.length() ) { if ( !myBorderDisplayers[ groupIndex ] && SMESH::GetCurrentVtkView()) myBorderDisplayers[ groupIndex ] = new BorderGroupDisplayer( myBorders, groupIndex, groupColor, myMesh ); @@ -976,7 +985,7 @@ bool SMESHGUI_SewingDlg::setCurrentGroup() myCurGroupIndex = selItems[0]->data( GROUP_INDEX ).toInt(); - return ( myCurGroupIndex >= 0 && myCurGroupIndex < myBorders->coincidentGroups.length() ); + return ( myCurGroupIndex >= 0 && myCurGroupIndex < (int)myBorders->coincidentGroups.length() ); } //======================================================================= @@ -995,7 +1004,7 @@ bool SMESHGUI_SewingDlg::setCurrentPart() myCurPartIndex = ListEdit->currentRow(); const SMESH::FreeBordersGroup& aGRP = myBorders->coincidentGroups[ myCurGroupIndex ]; - return ( myCurPartIndex >= 0 && myCurPartIndex < aGRP.length() ); + return ( myCurPartIndex >= 0 && myCurPartIndex < (int)aGRP.length() ); } //======================================================================= @@ -1184,15 +1193,18 @@ void SMESHGUI_SewingDlg::onRemoveElemClicked() SMESH::FreeBordersGroup& aGRP = myBorders->coincidentGroups[ myCurGroupIndex ]; + myBusy = true; QList selItems = ListEdit->selectedItems(); for ( int i = 0; i < selItems.count(); ++i ) { int part = ListEdit->row( selItems[i] ); - for ( ; part + 1 < aGRP.length(); ++part ) + for ( ; part + 1 < (int)aGRP.length(); ++part ) aGRP[ part ] = aGRP[ part + 1 ]; - aGRP.length( aGRP.length() - 1 ); + if ( aGRP.length() > 0 ) + aGRP.length( aGRP.length() - 1 ); delete selItems[i]; } + myBusy = false; if ( aGRP.length() == 0 ) onRemoveGroupClicked(); @@ -1281,7 +1293,7 @@ void SMESHGUI_SewingDlg::onSwapClicked() //================================================================================= bool SMESHGUI_SewingDlg::ClickOnApply() { - if (mySMESHGUI->isActiveStudyLocked()) + if (SMESHGUI::isStudyLocked()) return false; bool aResult = false; @@ -1296,7 +1308,7 @@ bool SMESHGUI_SewingDlg::ClickOnApply() SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); int aConstructorId = GetConstructorId(); - SMESH::SMESH_MeshEditor::Sew_Error anError; + SMESH::SMESH_MeshEditor::Sew_Error anError = SMESH::SMESH_MeshEditor::SEW_OK; if (aConstructorId == 0) { @@ -1383,7 +1395,11 @@ bool SMESHGUI_SewingDlg::ClickOnApply() QString msg = tr(QString("ERROR_%1").arg(anError).toLatin1().data()); SUIT_MessageBox::warning(this, tr("SMESH_WRN_WARNING"), msg); } - } catch (...) { + } + catch ( const SALOME::SALOME_Exception& S_ex ) + { + SalomeApp_Tools::QtCatchCorbaException( S_ex ); + return false; } if (aResult) { @@ -1516,7 +1532,7 @@ void SMESHGUI_SewingDlg::onTextChange (const QString& theNewText) else if (send == LineEdit6) myOk6 = false; - // hilight entered elements/nodes + // highlight entered elements/nodes SMDS_Mesh* aMesh = 0; if (myActor) @@ -1640,7 +1656,8 @@ void SMESHGUI_SewingDlg::SelectionIntoArgument (bool isSelectionChanged) if ( myEditCurrentArgument == LineEditMesh ) { - LineEditMesh->setText( IO->getName() ); + if ( _PTR(SObject) meshSO = SMESH::FindSObject( myMesh )) + LineEditMesh->setText( meshSO->GetName().c_str() ); ListCoincident->clear(); if ( AutoSewCheck->isChecked() ) { @@ -1880,7 +1897,6 @@ SMESHGUI_SewingDlg::BorderGroupDisplayer::~BorderGroupDisplayer() } } myIdPreview.SetPointsLabeled(false); - //myViewWindow->Repaint(); } void SMESHGUI_SewingDlg::BorderGroupDisplayer::Hide() @@ -1932,16 +1948,21 @@ void SMESHGUI_SewingDlg::BorderGroupDisplayer::getPartEnds( int p std::vector & ids, std::list& coords) { + if ( partIndex >= (int)myGroup.length() ) return; const SMESH::FreeBorderPart& aPART = myGroup [ partIndex ]; const SMESH::FreeBorder& aBRD = myBorders[ aPART.border ]; ids.push_back( aBRD.nodeIDs[ aPART.node1 ]); ids.push_back( aBRD.nodeIDs[ aPART.nodeLast ]); + if ( aPART.node1 == aPART.nodeLast ) + ids.push_back( aBRD.nodeIDs[ aPART.node2 ]); SMDS_Mesh* mesh = myPartActors[ partIndex ]->GetObject()->GetMesh(); coords.push_back( SMESH_TNodeXYZ( mesh->FindNode( aPART.node1+1 ))); coords.push_back( SMESH_TNodeXYZ( mesh->FindNode( aPART.nodeLast+1 ))); + if ( aPART.node1 == aPART.nodeLast ) + coords.push_back( SMESH_TNodeXYZ( mesh->FindNode( aPART.node2+1 ))); } void SMESHGUI_SewingDlg::BorderGroupDisplayer::Update() @@ -2003,7 +2024,6 @@ void SMESHGUI_SewingDlg::BorderGroupDisplayer::Update() myPartActors[ i ]->SetMarkerStd( VTK::MT_POINT, 13 ); myPartActors[ i ]->SetPickable ( false ); myViewWindow->AddActor( myPartActors[ i ]); - //myViewWindow->Repaint(); } } }