X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_SewingDlg.cxx;h=519d207cdebfbfe635acace9cce936621d256351;hp=00ce12ef3044de3849791cec619aaa2049334d75;hb=88141f757b048eaa5aae0be49faaf274448bbcaf;hpb=11bba48d41633960431c5ead19671abae3cf1d98 diff --git a/src/SMESHGUI/SMESHGUI_SewingDlg.cxx b/src/SMESHGUI/SMESHGUI_SewingDlg.cxx index 00ce12ef3..519d207cd 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 @@ -54,6 +54,7 @@ #include #include #include +#include // OCCT includes #include @@ -451,7 +452,7 @@ SMESHGUI_SewingDlg::SMESHGUI_SewingDlg( SMESHGUI* theModule ) mySMESHGUI->SetActiveDialogBox((QDialog*)this); - myHelpFileName = "sewing_meshes_page.html"; + myHelpFileName = "sewing_meshes.html"; myActor = 0; myStoredEntityMode = 0; @@ -825,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 ] ); } } @@ -851,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 ]; @@ -883,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; @@ -932,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; @@ -956,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 ); @@ -982,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() ); } //======================================================================= @@ -1001,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() ); } //======================================================================= @@ -1190,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(); @@ -1302,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) { @@ -1389,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) { @@ -1522,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) @@ -1887,7 +1897,6 @@ SMESHGUI_SewingDlg::BorderGroupDisplayer::~BorderGroupDisplayer() } } myIdPreview.SetPointsLabeled(false); - //myViewWindow->Repaint(); } void SMESHGUI_SewingDlg::BorderGroupDisplayer::Hide() @@ -1939,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() @@ -2010,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(); } } }