X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_CreatePolyhedralVolumeDlg.cxx;h=d32bd78d7a74281c06db05dbcd80c3ee7208cf8e;hp=3a572c897d9f2eca6766a8fde1fab83816b57e94;hb=73c48bae5a35eb335ace2c74c116bd14e357ed19;hpb=c38c10811a065cf5b13e8807ed71864d92ca7d80 diff --git a/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx b/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx index 3a572c897..d32bd78d7 100644 --- a/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx @@ -39,8 +39,6 @@ #include "SMESH_TypeFilter.hxx" #include "SMDS_Mesh.hxx" -#include "VTKViewer_ViewWindow.h" - #include "SUIT_ResourceMgr.h" #include "SalomeApp_Application.h" @@ -112,19 +110,15 @@ class TPolySimulation{ myPreviewActor->VisibilityOff(); myPreviewActor->SetMapper( myMapper ); - vtkProperty* aProp = vtkProperty::New(); float anRGB[3]; - anRGB[0] = GetFloat("SMESH:SettingsFillColorRed", 0)/255.; - anRGB[1] = GetFloat("SMESH:SettingsFillColorGreen", 170)/255.; - anRGB[2] = GetFloat("SMESH:SettingsFillColorBlue", 255)/255.; + vtkProperty* aProp = vtkProperty::New(); + GetColor( "SMESH", "fill_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) ); aProp->SetColor(anRGB[0],anRGB[1],anRGB[2]); myPreviewActor->SetProperty( aProp ); aProp->Delete(); vtkProperty* aBackProp = vtkProperty::New(); - anRGB[0] = GetFloat("SMESH:SettingsBackFaceColorRed", 0)/255.; - anRGB[1] = GetFloat("SMESH:SettingsBackFaceColorGreen", 0)/255.; - anRGB[2] = GetFloat("SMESH:SettingsBackFaceColorBlue", 255)/255.; + GetColor( "SMESH", "backface_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 0, 255 ) ); aBackProp->SetColor(anRGB[0],anRGB[1],anRGB[2]); myPreviewActor->SetBackfaceProperty( aBackProp ); aBackProp->Delete(); @@ -151,11 +145,15 @@ class TPolySimulation{ anIds->InsertId(i,theIds[i]); myGrid->InsertNextCell(theType,anIds); + if(theIds.size()!=0){ + myGrid->InsertNextCell(theType,anIds); + myGrid->Modified(); + } + anIds->Delete(); - myGrid->Modified(); - SetVisibility(true); + } void ResetGrid(bool theReset=true){ @@ -191,11 +189,9 @@ SMESHGUI_CreatePolyhedralVolumeDlg::SMESHGUI_CreatePolyhedralVolumeDlg( SMESHGUI bool modal, WFlags fl ) : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose), mySMESHGUI( theModule ), - mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ), - myViewWindow( SMESH::GetViewWindow( theModule ) ), - mySelector( myViewWindow->GetSelector() ) + mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) { - QPixmap image0( SMESHGUI::resourceMgr()->loadPixmap( "SMESH",tr("ICON_SELECT"))); + QPixmap image0( SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap( "SMESH",tr("ICON_SELECT"))); if ( !name ) setName( "SMESHGUI_CreatePolyhedralVolumeDlg" ); @@ -310,6 +306,8 @@ SMESHGUI_CreatePolyhedralVolumeDlg::SMESHGUI_CreatePolyhedralVolumeDlg( SMESHGUI Preview = new QCheckBox( GroupContent, "Preview" ); Preview->setText( tr( "SMESH_POLYEDRE_PREVIEW" ) ); GroupContentLayout->addWidget( Preview , 5, 0 ); + + mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); SMESHGUI_CreatePolyhedralVolumeDlgLayout->addWidget( GroupContent, 1, 0 ); @@ -382,7 +380,7 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::Init() //================================================================================= void SMESHGUI_CreatePolyhedralVolumeDlg::ConstructorsClicked(int constructorId) { - disconnect(mySelectionMgr, 0, this, 0); + //disconnect(mySelectionMgr, 0, this, 0); SALOME_ListIO aList; mySelectionMgr->setSelectedObjects( aList ); @@ -398,10 +396,13 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ConstructorsClicked(int constructorId) { if ( myActor ){ myActor->SetPointRepresentation(true); + myActor->SetEntityMode(SMESH_Actor::eVolumes); + myActor->SetRepresentation(SMESH_Actor::eSurface); } else SMESH::SetPointRepresentation(true); - myViewWindow->SetSelectionMode(NodeSelection); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(NodeSelection); AddButton->setEnabled(false); RemoveButton->setEnabled(false); @@ -416,8 +417,16 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ConstructorsClicked(int constructorId) } case 1 : { - SMESH::SetPointRepresentation(false); - myViewWindow->SetSelectionMode(FaceSelection); + if( myActor ){ + myActor->SetPointRepresentation(false); + myActor->SetEntityMode(SMESH_Actor::eFaces); + myActor->SetEntityMode(SMESH_Actor::eVolumes); + myActor->SetRepresentation(SMESH_Actor::eSurface); + } else { + SMESH::SetPointRepresentation(false); + } + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(FaceSelection); TextLabelIds->setText( tr( "SMESH_ID_FACES" ) ); myFacesByNodesLabel->hide(); @@ -429,7 +438,7 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ConstructorsClicked(int constructorId) } } - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + //connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); } //================================================================================= @@ -545,7 +554,8 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnCancel() mySelectionMgr->setSelectedObjects( aList ); SMESH::SetPointRepresentation(false); mySimulation->SetVisibility(false); - myViewWindow->SetSelectionMode( ActorSelection ); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode( ActorSelection ); disconnect( mySelectionMgr, 0, this, 0 ); mySMESHGUI->ResetState() ; reject() ; @@ -570,48 +580,30 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::onTextChange(const QString& theNewText) if (GetConstructorId() == 0) { if ( aMesh ) { - SALOME_ListIO aList; aList.Append( myActor->getIO() ); - mySelectionMgr->setSelectedObjects( aList ); - - TColStd_IndexedMapOfInteger selectedIndices; TColStd_MapOfInteger newIndices; - mySelector->GetIndex( myActor->getIO(), selectedIndices); - + QStringList aListId = QStringList::split( " ", theNewText, false); for ( int i = 0; i < aListId.count(); i++ ) { const SMDS_MeshNode * n = aMesh->FindNode( aListId[ i ].toInt() ); if ( n ) { - /*if ( mySelectionMgr->IsIndexSelected( myActor->getIO(), n->GetID() )) - allOk = false; - else - mySelectionMgr->AddOrRemoveIndex (myActor->getIO(), n->GetID(), true);*/ - if (selectedIndices.Add(n->GetID())) - newIndices.Add(n->GetID()); + newIndices.Add(n->GetID()); myNbOkElements++; } } - - if (newIndices.Extent() > 0){ - mySelector->AddOrRemoveIndex( myActor->getIO(), newIndices, true ); - myViewWindow->highlight( myActor->getIO(), true, true ); - } - -/* bool aNodesOK = false; - if (aListId.count() >= 3) - aNodesOK = true; - - allOk = (allOk && aNodesOK);*/ - + + mySelector->AddOrRemoveIndex( myActor->getIO(), newIndices, false ); + + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->highlight( myActor->getIO(), true, true ); + if ( myNbOkElements>0 && aListId.count()>=3) AddButton->setEnabled(true); - else - AddButton->setEnabled(false); - -// if (allOk && !myOkElements) - displaySimulation(); - } + else + AddButton->setEnabled(false); + + displaySimulation(); } - else if (GetConstructorId() == 1) + } else if (GetConstructorId() == 1) { myNbOkElements = 0; buttonOk->setEnabled( false ); @@ -620,33 +612,22 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::onTextChange(const QString& theNewText) // check entered ids of faces and hilight them QStringList aListId; if ( aMesh ) { - SALOME_ListIO aList; aList.Append( myActor->getIO() ); - mySelectionMgr->setSelectedObjects( aList ); - - TColStd_IndexedMapOfInteger selectedIndices; TColStd_MapOfInteger newIndices; - mySelector->GetIndex( myActor->getIO(), selectedIndices); - + aListId = QStringList::split( " ", theNewText, false); for ( int i = 0; i < aListId.count(); i++ ) { const SMDS_MeshElement * e = aMesh->FindElement( aListId[ i ].toInt() ); if ( e ) { - /*if ( mySelectionMgr->IsIndexSelected( myActor->getIO(), e->GetID() )) - myOkElements = false; - else - mySelectionMgr->AddOrRemoveIndex (myActor->getIO(), e->GetID(), true);*/ - if (selectedIndices.Add(e->GetID())) - newIndices.Add(e->GetID()); + newIndices.Add(e->GetID()); myNbOkElements++; } } - if (newIndices.Extent() > 0){ - mySelector->AddOrRemoveIndex( myActor->getIO(), newIndices, true ); - myViewWindow->highlight( myActor->getIO(), true, true ); - } - + mySelector->AddOrRemoveIndex( myActor->getIO(), newIndices, false ); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->highlight( myActor->getIO(), true, true ); + if ( myNbOkElements ) { if (aListId.count()>1){ buttonOk->setEnabled( true ); @@ -715,8 +696,9 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::SelectionIntoArgument() int anbNodes = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString); if (anbNodes >= 3) AddButton->setEnabled(true); - else - break; + else if (anbNodes < 3){ + AddButton->setEnabled(false); + } busy = true; myEditCurrentArgument->setText( aString ); busy = false; @@ -725,16 +707,19 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::SelectionIntoArgument() case 1:{ // get selected faces int aNbFaces = SMESH::GetNameOfSelectedElements(mySelector, myActor->getIO(), aString); - if (aNbFaces<=1) - return; + if (aNbFaces<=1){ + buttonOk->setEnabled( false ); + buttonApply->setEnabled( false ); + } else { + buttonOk->setEnabled( true ); + buttonApply->setEnabled( true ); + } busy = true; myEditCurrentArgument->setText( aString ); busy = false; // OK myNbOkElements = 1; - buttonOk->setEnabled( true ); - buttonApply->setEnabled( true ); break; } default: return; @@ -772,6 +757,11 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::displaySimulation() mySimulation->SetPosition(myActor, aType, aVTKIds_faces,false); } } + if(myFacesByNodes->count() == 0){ + mySimulation->SetVisibility(false); + } else { + mySimulation->SetVisibility(true); + } if(Preview->isChecked()){ mySimulation->SetPosition(myActor, aType, aVTKIds); } @@ -818,7 +808,8 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::displaySimulation() mySimulation->SetPosition(myActor, aType, aVTKIds); } } - } + SMESH::UpdateView(); + } } //================================================================================= @@ -866,7 +857,8 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ActivateThisDialog() mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ; - myViewWindow->SetSelectionMode( FaceSelection ); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode( FaceSelection ); SelectionIntoArgument(); } @@ -937,7 +929,6 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::onAdd() myNbOkElements = 1; myEditCurrentArgument->clear(); AddButton->setEnabled(false); - RemoveButton->setEnabled(true); buttonOk->setEnabled( true ); if(myFacesByNodes->count()>1) buttonApply->setEnabled( true ); } @@ -956,22 +947,20 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::onRemove() for (int i = myFacesByNodes->count(); i > 0; i--) { if (myFacesByNodes->isSelected(i-1)) { myFacesByNodes->removeItem(i-1); + myNbOkElements = 1; } } if (myFacesByNodes->count() < 1){ - myNbOkElements = 0; RemoveButton->setEnabled(false); buttonOk->setEnabled( false ); buttonApply->setEnabled( false ); } else if (myFacesByNodes->count() == 1){ - myNbOkElements = 0; buttonOk->setEnabled( false ); buttonApply->setEnabled( false ); } - displaySimulation(); busy = false; - onListSelectionChanged(); + displaySimulation(); } //================================================================================= @@ -982,22 +971,27 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::onListSelectionChanged() { if (busy || !myActor) return; busy = true; - - SALOME_ListIO list; - mySelectionMgr->setSelectedObjects( list ); + bool isSelected=false; + SALOME_ListIO aList; + mySelectionMgr->setSelectedObjects( aList ); TColStd_MapOfInteger aIndexes; QListBoxItem* anItem; for (anItem = myFacesByNodes->firstItem(); anItem != 0; anItem = anItem->next()) { if (anItem->isSelected()) { + isSelected = true; QStringList anIds = QStringList::split(" ", anItem->text()); for (QStringList::iterator it = anIds.begin(); it != anIds.end(); ++it) aIndexes.Add((*it).toInt()); } } + if(isSelected) RemoveButton->setEnabled(true); + else RemoveButton->setEnabled(false); mySelector->AddOrRemoveIndex(myActor->getIO(), aIndexes, true ); - myViewWindow->highlight( myActor->getIO(), true, true ); - list.Append( myActor->getIO() ); - mySelectionMgr->setSelectedObjects( list ); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->highlight( myActor->getIO(), true, true ); + mySelectionMgr->clearFilters(); + aList.Append( myActor->getIO() ); + mySelectionMgr->setSelectedObjects( aList ); busy = false; }