X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=1dca53b610cd8301da79b4cdb207d874c476244b;hb=494cae92368d8ad49b1cd4a15200d4921d65af1e;hp=fe435204003ff2777ca92f2f1babea6ae71de86f;hpb=519f45e49541ef86004a139b9dccc909927bc406;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index fe4352040..1dca53b61 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -685,9 +685,9 @@ new SalomeApp_CheckFileDlg ( SMESHGUI::desktop(), false, checkBoxes, true, true ); fd->setWindowTitle( aTitle ); fd->setNameFilters( filters ); - fd->selectNameFilter(aDefaultFilter); - fd->SetChecked(0,toCreateGroups); - fd->SetChecked(1,toFindOutDim); + fd->selectNameFilter( aDefaultFilter ); + fd->SetChecked( toCreateGroups, 0 ); + fd->SetChecked( toFindOutDim, 1 ); if ( !anInitialPath.isEmpty() ) fd->setDirectory( anInitialPath ); fd->selectFile(aMeshName); @@ -960,7 +960,7 @@ { SMESH::SMESH_GroupBase_var aGroupObject = aListOfGroups[i]; //SALOMEDS::Color aColor = aGroupObject->GetColor(); - + #ifdef SIMPLE_AUTOCOLOR // simplified algorithm for auto-colors SALOMEDS::Color aColor = SMESHGUI::getPredefinedUniqueColor(); #else // old algorithm for auto-colors @@ -1004,7 +1004,7 @@ SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); - + if ( selected.IsEmpty() ) return; SALOME_ListIteratorOfListIO It( selected ); for ( ; It.More(); It.Next() ) { @@ -1228,7 +1228,7 @@ SALOME_ListIO selected; if( aSel ) { aSel->selectedObjects( selected ); - + if(selected.Extent()){ Handle(SALOME_InteractiveObject) anIObject = selected.First(); _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); @@ -2018,7 +2018,7 @@ bool SMESHGUI::automaticUpdate( SMESH::SMESH_Mesh_ptr theMesh, if ( nbOdElems > 0 ) { if ( total + nbOdElems > updateLimit ) { *entities = *entities & ~SMESH_Actor::e0DElements; - *hidden = *hidden | SMESH_Actor::e0DElements; + *hidden = *hidden | SMESH_Actor::e0DElements; } else exceeded = false; @@ -2028,7 +2028,7 @@ bool SMESHGUI::automaticUpdate( SMESH::SMESH_Mesh_ptr theMesh, if ( nbEdges > 0 ) { if ( total + nbEdges > updateLimit ) { *entities = *entities & ~SMESH_Actor::eEdges; - *hidden = *hidden | SMESH_Actor::eEdges; + *hidden = *hidden | SMESH_Actor::eEdges; } else exceeded = false; @@ -2038,7 +2038,7 @@ bool SMESHGUI::automaticUpdate( SMESH::SMESH_Mesh_ptr theMesh, if ( nbFaces > 0 ) { if ( total + nbFaces > updateLimit ) { *entities = *entities & ~SMESH_Actor::eFaces; - *hidden = *hidden | SMESH_Actor::eFaces; + *hidden = *hidden | SMESH_Actor::eFaces; } else exceeded = false; @@ -2048,7 +2048,7 @@ bool SMESHGUI::automaticUpdate( SMESH::SMESH_Mesh_ptr theMesh, if ( nbVolumes > 0 ) { if ( total + nbVolumes > updateLimit ) { *entities = *entities & ~SMESH_Actor::eVolumes; - *hidden = *hidden | SMESH_Actor::eVolumes; + *hidden = *hidden | SMESH_Actor::eVolumes; } else exceeded = false; @@ -2058,14 +2058,14 @@ bool SMESHGUI::automaticUpdate( SMESH::SMESH_Mesh_ptr theMesh, if ( nbBalls > 0 ) { if ( total + nbBalls > updateLimit ) { *entities = *entities & ~SMESH_Actor::eBallElem; - *hidden = *hidden | SMESH_Actor::eBallElem; + *hidden = *hidden | SMESH_Actor::eBallElem; } else exceeded = false; } total += nbBalls; } - + return autoUpdate && !exceeded; } @@ -2668,7 +2668,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) else if ( theCommandID == 410 ) aDlg = new SMESHGUI_UnionOfTrianglesDlg(this); else if ( theCommandID == 419 ) - aDlg = new SMESHGUI_CuttingIntoTetraDlg(this); + aDlg = new SMESHGUI_SplitVolumesDlg(this); else aDlg = new SMESHGUI_CuttingOfQuadsDlg(this); @@ -3505,7 +3505,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) tr( "NOT_A_VTK_VIEWER" ) ); } break; - case 6032: + case 6032: OverallMeshQuality(); break; case 9010: @@ -3549,13 +3549,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { int page = SMESHGUI_MeasureDlg::MinDistance; if ( theCommandID == 502 ) - page = SMESHGUI_MeasureDlg::BoundingBox; + page = SMESHGUI_MeasureDlg::BoundingBox; else if ( theCommandID == 503 ) - page = SMESHGUI_MeasureDlg::Length; + page = SMESHGUI_MeasureDlg::Length; else if ( theCommandID == 504 ) - page = SMESHGUI_MeasureDlg::Area; + page = SMESHGUI_MeasureDlg::Area; else if ( theCommandID == 505 ) - page = SMESHGUI_MeasureDlg::Volume; + page = SMESHGUI_MeasureDlg::Volume; EmitSignalDeactivateDialog(); SMESHGUI_MeasureDlg* dlg = new SMESHGUI_MeasureDlg( SMESHGUI::desktop(), page ); @@ -4044,11 +4044,21 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( 214, viewId, -1 ); // ----- create toolbars -------------- - int meshTb = createTool( tr( "TB_MESH" ) ), - ctrlTb = createTool( tr( "TB_CTRL" ) ), - addRemTb = createTool( tr( "TB_ADD_REMOVE" ) ), - modifyTb = createTool( tr( "TB_MODIFY" ) ), - dispModeTb = createTool( tr( "TB_DISP_MODE" ) ); + int meshTb = createTool( tr( "TB_MESH" ) ), + info = createTool( tr( "TB_INFO" ) ), + groupTb = createTool( tr( "TB_GROUP" ) ), + ctrl0dTb = createTool( tr( "TB_CTRL0D" ) ), + ctrl1dTb = createTool( tr( "TB_CTRL1D" ) ), + ctrl2dTb = createTool( tr( "TB_CTRL2D" ) ), + ctrl3dTb = createTool( tr( "TB_CTRL3D" ) ), + addElemTb = createTool( tr( "TB_ADD" ) ), + addNonElemTb = createTool( tr( "TB_ADDNON" ) ), + remTb = createTool( tr( "TB_REM" ) ), + renumbTb = createTool( tr( "TB_RENUMBER" ) ), + transformTb = createTool( tr( "TB_TRANSFORM" ) ), + modifyTb = createTool( tr( "TB_MODIFY" ) ), + measuremTb = createTool( tr( "TB_MEASUREM" ) ), + dispModeTb = createTool( tr( "TB_DISP_MODE" ) ); createTool( 702, meshTb ); createTool( 703, meshTb ); @@ -4060,93 +4070,90 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( 711, meshTb ); createTool( 712, meshTb ); createTool( 713, meshTb ); - createTool( separator(), meshTb ); - createTool( 801, meshTb ); - createTool( 806, meshTb ); - createTool( 802, meshTb ); - createTool( 803, meshTb ); - //createTool( 815, meshTb ); - createTool( separator(), meshTb ); - createTool( 900, meshTb ); + + createTool( 801, groupTb ); + createTool( 806, groupTb ); + createTool( 802, groupTb ); + createTool( 803, groupTb ); + + createTool( 900, info ); //createTool( 902, meshTb ); //createTool( 903, meshTb ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command) - createTool( 904, meshTb ); - createTool( separator(), meshTb ); - - createTool( 6005, ctrlTb ); - createTool( 6028, ctrlTb ); - createTool( separator(), ctrlTb ); - createTool( 6002, ctrlTb ); - createTool( 6003, ctrlTb ); - createTool( 6001, ctrlTb ); - createTool( 6004, ctrlTb ); - createTool( 6029, ctrlTb ); - createTool( separator(), ctrlTb ); - createTool( 6021, ctrlTb ); - createTool( 6025, ctrlTb ); - createTool( 6027, ctrlTb ); - createTool( 6018, ctrlTb ); - createTool( 6019, ctrlTb ); - createTool( 6011, ctrlTb ); - createTool( 6012, ctrlTb ); - createTool( 6013, ctrlTb ); - createTool( 6014, ctrlTb ); - createTool( 6015, ctrlTb ); - createTool( 6016, ctrlTb ); - createTool( 6022, ctrlTb ); - createTool( 6030, ctrlTb ); - createTool( separator(), ctrlTb ); - createTool( 6017, ctrlTb ); - createTool( 6009, ctrlTb ); - createTool( 6023, ctrlTb ); - createTool( 6024, ctrlTb ); - createTool( 6026, ctrlTb ); - createTool( 6031, ctrlTb ); - createTool( separator(), ctrlTb ); - - createTool( 4000, addRemTb ); - createTool( 4009, addRemTb ); - createTool( 4070, addRemTb ); - createTool( 4008, addRemTb ); - createTool( 4010, addRemTb ); - createTool( 4021, addRemTb ); - createTool( 4022, addRemTb ); - createTool( 4023, addRemTb ); - createTool( 4031, addRemTb ); - createTool( 4032, addRemTb ); - createTool( 4133, addRemTb ); - createTool( 4134, addRemTb ); - createTool( 4135, addRemTb ); - createTool( 4033, addRemTb ); - createTool( separator(), addRemTb ); - createTool( 4034, addRemTb ); - createTool( 4035, addRemTb ); - createTool( 4137, addRemTb ); - createTool( 4036, addRemTb ); - createTool( 4136, addRemTb ); - createTool( 4037, addRemTb ); - createTool( 4038, addRemTb ); - createTool( 4039, addRemTb ); - createTool( 4040, addRemTb ); - createTool( 4140, addRemTb ); - createTool( separator(), addRemTb ); - createTool( 4041, addRemTb ); - createTool( 4042, addRemTb ); - createTool( 4044, addRemTb ); - createTool( 4043, addRemTb ); - createTool( separator(), addRemTb ); - createTool( 4051, addRemTb ); - createTool( 4052, addRemTb ); - createTool( separator(), addRemTb ); - createTool( 4061, addRemTb ); - createTool( 4062, addRemTb ); - createTool( 4063, addRemTb ); - createTool( 4068, addRemTb ); - createTool( 4064, addRemTb ); - createTool( 4065, addRemTb ); - createTool( 4066, addRemTb ); - createTool( 4069, addRemTb ); - createTool( separator(), addRemTb ); + createTool( 904, info ); + + createTool( 6005, ctrl0dTb ); + createTool( 6028, ctrl0dTb ); + + createTool( 6002, ctrl1dTb ); + createTool( 6003, ctrl1dTb ); + createTool( 6001, ctrl1dTb ); + createTool( 6004, ctrl1dTb ); + createTool( 6029, ctrl1dTb ); + + createTool( 6021, ctrl2dTb ); + createTool( 6025, ctrl2dTb ); + createTool( 6027, ctrl2dTb ); + createTool( 6018, ctrl2dTb ); + createTool( 6019, ctrl2dTb ); + createTool( 6011, ctrl2dTb ); + createTool( 6012, ctrl2dTb ); + createTool( 6013, ctrl2dTb ); + createTool( 6014, ctrl2dTb ); + createTool( 6015, ctrl2dTb ); + createTool( 6016, ctrl2dTb ); + createTool( 6022, ctrl2dTb ); + createTool( 6030, ctrl2dTb ); + + createTool( 6017, ctrl3dTb ); + createTool( 6009, ctrl3dTb ); + createTool( 6023, ctrl3dTb ); + createTool( 6024, ctrl3dTb ); + createTool( 6026, ctrl3dTb ); + createTool( 6031, ctrl3dTb ); + + createTool( 4000, addElemTb ); + createTool( 4009, addElemTb ); + createTool( 4070, addElemTb ); + createTool( 4008, addElemTb ); + createTool( 4010, addElemTb ); + createTool( 4021, addElemTb ); + createTool( 4022, addElemTb ); + createTool( 4023, addElemTb ); + createTool( 4031, addElemTb ); + createTool( 4032, addElemTb ); + createTool( 4133, addElemTb ); + createTool( 4134, addElemTb ); + createTool( 4135, addElemTb ); + createTool( 4033, addElemTb ); + + createTool( 4034, addNonElemTb ); + createTool( 4035, addNonElemTb ); + createTool( 4137, addNonElemTb ); + createTool( 4036, addNonElemTb ); + createTool( 4136, addNonElemTb ); + createTool( 4037, addNonElemTb ); + createTool( 4038, addNonElemTb ); + createTool( 4039, addNonElemTb ); + createTool( 4040, addNonElemTb ); + createTool( 4140, addNonElemTb ); + + createTool( 4041, remTb ); + createTool( 4042, remTb ); + createTool( 4044, remTb ); + createTool( 4043, remTb ); + + createTool( 4051, renumbTb ); + createTool( 4052, renumbTb ); + + + createTool( 4061, transformTb ); + createTool( 4062, transformTb ); + createTool( 4063, transformTb ); + createTool( 4068, transformTb ); + createTool( 4064, transformTb ); + createTool( 4065, transformTb ); + createTool( 4066, transformTb ); + createTool( 4069, transformTb ); createTool( 4067,modifyTb ); createTool( 407, modifyTb ); @@ -4164,6 +4171,8 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( 417, modifyTb ); createTool( 418, modifyTb ); + createTool( 501, measuremTb ); + createTool( 214, dispModeTb ); QString lc = "$"; // VSR : instead of QtxPopupSelection::defEquality(); @@ -4507,7 +4516,7 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->insert ( action( 6031 ), aSubId, -1 ); // EQUAL_VOLUME popupMgr()->setRule( action( 6031 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); popupMgr()->setRule( action( 6031 ), "controlMode = 'eCoincidentElems3D'", QtxPopupMgr::ToggleRule ); - + popupMgr()->insert( separator(), anId, -1 ); popupMgr()->insert( action( 201 ), anId, -1 ); // SCALAR_BAR_PROP @@ -5524,13 +5533,34 @@ void SMESHGUI::storeVisualParameters (int savePoint) aPropertyName += gSeparator; aPropertyName += QString::number( anId ); - QString aPropertyValue = QString::number( (int)aPlane->GetOrientation() ).toLatin1().constData(); + QString aPropertyValue = QString::number( (int)aPlane->PlaneMode ).toLatin1().constData(); aPropertyValue += gDigitsSep; - aPropertyValue += QString::number( aPlane->GetDistance() ).toLatin1().constData(); + aPropertyValue += QString::number( aPlane->IsOpenGLClipping ).toLatin1().constData(); aPropertyValue += gDigitsSep; - aPropertyValue += QString::number( aPlane->myAngle[0] ).toLatin1().constData(); - aPropertyValue += gDigitsSep; - aPropertyValue += QString::number( aPlane->myAngle[1] ).toLatin1().constData(); + if ( aPlane->PlaneMode == SMESH::Absolute ) { + aPropertyValue += QString::number( aPlane->myAbsoluteOrientation ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->X ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->Y ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->Z ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->Dx ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->Dy ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->Dz ).toLatin1().constData(); + } + else if ( aPlane->PlaneMode == SMESH::Relative ) { + aPropertyValue += QString::number( (int)aPlane->myRelativeOrientation ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->GetDistance() ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->myAngle[0] ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->myAngle[1] ).toLatin1().constData(); + } ip->setProperty( aPropertyName.toStdString(), aPropertyValue.toStdString() ); } @@ -5740,9 +5770,13 @@ void SMESHGUI::storeVisualParameters (int savePoint) // data structures for clipping planes processing typedef struct { int Id; - vtkIdType Orientation; + int Mode; + bool isOpenGLClipping; + vtkIdType RelativeOrientation; double Distance; double Angle[2]; + int AbsoluteOrientation; + double X, Y, Z, Dx, Dy, Dz; } TPlaneData; typedef std::list TPlaneDataList; typedef std::map TPlaneDataMap; @@ -5859,31 +5893,80 @@ void SMESHGUI::restoreVisualParameters (int savePoint) continue; QStringList aPropertyValueList = aPropertyValue.split( gDigitsSep, QString::SkipEmptyParts ); - if( aPropertyValueList.size() != 4 ) + if( aPropertyValueList.size() != 6 && aPropertyValueList.size() != 9 ) continue; TPlaneData aPlaneData; aPlaneData.Id = aClippingPlaneId; ok = false; - aPlaneData.Orientation = aPropertyValueList[0].toInt( &ok ); + aPlaneData.Mode = aPropertyValueList[0].toInt( &ok ); if( !ok ) continue; - + ok = false; - aPlaneData.Distance = aPropertyValueList[1].toDouble( &ok ); + aPlaneData.isOpenGLClipping = aPropertyValueList[1].toInt( &ok ); if( !ok ) continue; - ok = false; - aPlaneData.Angle[0] = aPropertyValueList[2].toDouble( &ok ); - if( !ok ) - continue; + if ( (SMESH::Mode)aPlaneData.Mode == SMESH::Absolute ) + { + ok = false; + aPlaneData.AbsoluteOrientation = aPropertyValueList[2].toInt( &ok ); + if( !ok ) + continue; - ok = false; - aPlaneData.Angle[1] = aPropertyValueList[3].toDouble( &ok ); - if( !ok ) - continue; + ok = false; + aPlaneData.X = aPropertyValueList[3].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Y = aPropertyValueList[4].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Z = aPropertyValueList[5].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Dx = aPropertyValueList[6].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Dy = aPropertyValueList[7].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Dz = aPropertyValueList[8].toDouble( &ok ); + if( !ok ) + continue; + } + else if ( (SMESH::Mode)aPlaneData.Mode == SMESH::Relative ) { + ok = false; + aPlaneData.RelativeOrientation = aPropertyValueList[2].toInt( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Distance = aPropertyValueList[3].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Angle[0] = aPropertyValueList[4].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Angle[1] = aPropertyValueList[5].toDouble( &ok ); + if( !ok ) + continue; + } TPlaneDataList& aPlaneDataList = aPlaneDataMap[ aViewId ]; aPlaneDataList.push_back( aPlaneData ); @@ -6306,21 +6389,18 @@ void SMESHGUI::restoreVisualParameters (int savePoint) // Clipping else if (paramNameStr.startsWith("ClippingPlane")) { QStringList vals = val.split(gDigitsSep, QString::SkipEmptyParts); - // old format - val looks like "Off" or "0:0.5:0:0" (orientation, distance, two angles) + // old format - val looks like "Off" or "1:0:0:0.5:0:0" + // (mode(relative), is OpenGL clipping plane, orientation, distance, two angles) + // or "0:1:1:10.5:1.0:1.0:15.0:10.0:10.0" + // (mode(absolute), is OpenGL clipping plane, orientation, base point(x, y, z), direction (dx, dy, dz)) // new format - val looks like "Off" or "0" (plane id) // (note: in new format "Off" value is used only for consistency, // so it is processed together with values in old format) - bool anIsOldFormat = ( vals.count() == 4 || val == "Off" ); + bool anIsOldFormat = ( vals.count() == 6 || vals.count() == 9 || val == "Off" ); if( anIsOldFormat ) { if (paramNameStr == "ClippingPlane1" || val == "Off") aSmeshActor->RemoveAllClippingPlanes(); if (val != "Off") { - SMESH::Orientation anOrientation = (SMESH::Orientation)vals[0].toInt(); - double aDistance = vals[1].toFloat(); - double anAngle[2]; - anAngle[0] = vals[2].toFloat(); - anAngle[1] = vals[3].toFloat(); - QList lst; getApp()->viewManagers(viewerTypStr, lst); // SVTK ViewManager always has 1 ViewWindow, so view index is index of view manager @@ -6332,13 +6412,35 @@ void SMESHGUI::restoreVisualParameters (int savePoint) SMESH::TActorList anActorList; anActorList.push_back( aSmeshActor ); - SMESH::OrientedPlane* aPlane = - SMESHGUI_ClippingDlg::AddPlane(anActorList, vtkView, anOrientation, aDistance, anAngle); + SMESH::OrientedPlane* aPlane = SMESH::OrientedPlane::New( vtkView ); + aPlane->myViewWindow = vtkView; + SMESH::Mode aMode = ( SMESH::Mode )vals[0].toInt(); + aPlane->PlaneMode = aMode; + bool isOpenGLClipping = ( bool )vals[1].toInt(); + aPlane->IsOpenGLClipping = isOpenGLClipping; + if ( aMode == SMESH::Absolute ) { + aPlane->myAbsoluteOrientation = vals[2].toInt(); + aPlane->X = vals[3].toFloat(); + aPlane->Y = vals[4].toFloat(); + aPlane->Z = vals[5].toFloat(); + aPlane->Dx = vals[6].toFloat(); + aPlane->Dy = vals[7].toFloat(); + aPlane->Dz = vals[8].toFloat(); + } + else if ( aMode == SMESH::Relative ) { + aPlane->myRelativeOrientation = (SMESH::Orientation)vals[2].toInt(); + aPlane->myDistance = vals[3].toFloat(); + aPlane->myAngle[0] = vals[4].toFloat(); + aPlane->myAngle[1] = vals[5].toFloat(); + } + if( aPlane ) { - SMESH::ClippingPlaneInfo aClippingPlaneInfo; - aClippingPlaneInfo.Plane = aPlane; - aClippingPlaneInfo.ActorList = anActorList; - aClippingPlaneInfoList.push_back( aClippingPlaneInfo ); + if ( SMESHGUI_ClippingDlg::AddPlane( anActorList, aPlane ) ) { + SMESH::ClippingPlaneInfo aClippingPlaneInfo; + aClippingPlaneInfo.Plane = aPlane; + aClippingPlaneInfo.ActorList = anActorList; + aClippingPlaneInfoList.push_back( aClippingPlaneInfo ); + } } } } @@ -6459,23 +6561,40 @@ void SMESHGUI::restoreVisualParameters (int savePoint) for( ; anIter4 != aPlaneDataList.end(); anIter4++ ) { const TPlaneData& aPlaneData = *anIter4; if( aPlaneData.Id == aPlaneId ) { - SMESH::OrientedPlane* aPlane = - SMESHGUI_ClippingDlg::AddPlane( anActorList, - aViewWindow, - (SMESH::Orientation)aPlaneData.Orientation, - aPlaneData.Distance, - aPlaneData.Angle ); + SMESH::OrientedPlane* aPlane = SMESH::OrientedPlane::New( aViewWindow ); + aPlane->myViewWindow = aViewWindow; + aPlane->PlaneMode = (SMESH::Mode)aPlaneData.Mode; + aPlane->IsOpenGLClipping = aPlaneData.isOpenGLClipping; + if ( aPlane->PlaneMode == SMESH::Absolute ) { + aPlane->myAbsoluteOrientation = aPlaneData.AbsoluteOrientation; + aPlane->X = aPlaneData.X; + aPlane->Y = aPlaneData.Y; + aPlane->Z = aPlaneData.Z; + aPlane->Dx = aPlaneData.Dx; + aPlane->Dy = aPlaneData.Dy; + aPlane->Dz = aPlaneData.Dz; + } + else if ( aPlane->PlaneMode == SMESH::Relative ) { + aPlane->myRelativeOrientation = (SMESH::Orientation)aPlaneData.RelativeOrientation; + aPlane->myDistance = aPlaneData.Distance; + aPlane->myAngle[0] = aPlaneData.Angle[0]; + aPlane->myAngle[1] = aPlaneData.Angle[1]; + } if( aPlane ) { - SMESH::ClippingPlaneInfo aClippingPlaneInfo; - aClippingPlaneInfo.Plane = aPlane; - aClippingPlaneInfo.ActorList = anActorList; - aClippingPlaneInfoList.push_back( aClippingPlaneInfo ); + if ( SMESHGUI_ClippingDlg::AddPlane( anActorList, aPlane ) ) { + SMESH::ClippingPlaneInfo aClippingPlaneInfo; + aClippingPlaneInfo.Plane = aPlane; + aClippingPlaneInfo.ActorList = anActorList; + aClippingPlaneInfoList.push_back( aClippingPlaneInfo ); + } } break; } } + } } + // update all VTK views QList lst; @@ -6484,6 +6603,14 @@ void SMESHGUI::restoreVisualParameters (int savePoint) SUIT_ViewModel* vmodel = (*it)->getViewModel(); if (vmodel && vmodel->getType() == SVTK_Viewer::Type()) { SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView(); + // set OpenGL clipping planes + VTK::ActorCollectionCopy aCopy( vtkView->getRenderer()->GetActors() ); + vtkActorCollection* anAllActors = aCopy.GetActors(); + anAllActors->InitTraversal(); + while( vtkActor* aVTKActor = anAllActors->GetNextActor() ) + if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) ) + anActor->SetOpenGLClippingPlane(); + vtkView->getRenderer()->ResetCameraClippingRange(); vtkView->Repaint(); } @@ -6682,7 +6809,6 @@ bool SMESHGUI::renameObject( const QString& entry, const QString& name) { return false; } - SALOMEDS::Color SMESHGUI::getPredefinedUniqueColor() { static QList colors;