X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_StreamOp.cxx;h=bd7085f4efd7aa086b947998ae6fbd69c69bdfdb;hb=a1431f03eac1d1aed4203d0568d987c41ce939b3;hp=1557a79444f00e2eea7d37579aa3afd5d784a1a7;hpb=2d99821157e770385d7af917b2d22d6aa3cacb7e;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_StreamOp.cxx b/src/HYDROGUI/HYDROGUI_StreamOp.cxx index 1557a794..bd7085f4 100755 --- a/src/HYDROGUI/HYDROGUI_StreamOp.cxx +++ b/src/HYDROGUI/HYDROGUI_StreamOp.cxx @@ -188,8 +188,10 @@ bool HYDROGUI_StreamOp::processApply( int& theUpdateFlags, module()->setObjectVisible( HYDROGUI_Tool::GetActiveOCCViewId( module() ), myEditedObject, true ); } + module()->setIsToUpdate( myEditedObject ); + // Set update flags - theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced; + theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced | UF_VTKViewer; return true; } @@ -319,19 +321,39 @@ void HYDROGUI_StreamOp::onRemoveProfiles( const QStringList& theProfilesToRemove return; } + bool isRemoved = false; + + // Take the Object Browser selection into account + HYDROData_SequenceOfObjects aSelectedObjects = HYDROGUI_Tool::GetSelectedObjects( module() ); + for( int i = 1, n = aSelectedObjects.Length(); i <= n; i++ ) { + Handle(HYDROData_Profile) aProfile = + Handle(HYDROData_Profile)::DownCast( aSelectedObjects.Value( i ) ); + if ( !aProfile.IsNull() && !theProfilesToRemove.contains(aProfile->GetName()) ) { + if ( myEditedObject->RemoveProfile( aProfile ) ) { + isRemoved = true; + } + } + } + // Remove profiles foreach( const QString& aProfileName, theProfilesToRemove ) { Handle(HYDROData_Profile) aProfile = Handle(HYDROData_Profile)::DownCast( HYDROGUI_Tool::FindObjectByName( module(), aProfileName, KIND_PROFILE ) ); - myEditedObject->RemoveProfile( aProfile ); + if ( myEditedObject->RemoveProfile( aProfile ) ) { + isRemoved = true; + } } - myEditedObject->Update(); - // Update the panel - updatePanelData(); + if ( isRemoved ) { + // Update the edited stream object + myEditedObject->Update(); - // Update preview - createPreview(); + // Update the panel + updatePanelData(); + + // Update preview + createPreview(); + } } void HYDROGUI_StreamOp::onAxisChanged( const QString& theNewAxis ) @@ -344,6 +366,19 @@ void HYDROGUI_StreamOp::onAxisChanged( const QString& theNewAxis ) Handle(HYDROData_PolylineXY) anAxis = Handle(HYDROData_PolylineXY)::DownCast( HYDROGUI_Tool::FindObjectByName( module(), theNewAxis, KIND_POLYLINEXY ) ); + // Prepare data for intersection check + TopoDS_Face aPlane; + if ( !myEditedObject->BuildFace(anAxis, aPlane) ) { + SUIT_MessageBox::critical( module()->getApp()->desktop(), + tr( "BAD_SELECTED_POLYLINE_TLT" ), + tr( "BAD_SELECTED_POLYLINE_MSG" ).arg( theNewAxis ) ); + // To restore the old axis + updatePanelData(); + return; + } + + Standard_Real aPar(.0); + // Get list of profiles which do not intersect the axis QStringList aHasNoIntersectionProfiles; HYDROData_SequenceOfObjects aCurrentProfiles = myEditedObject->GetProfiles(); @@ -351,7 +386,9 @@ void HYDROGUI_StreamOp::onAxisChanged( const QString& theNewAxis ) Handle(HYDROData_Profile) aProfile = Handle(HYDROData_Profile)::DownCast( aCurrentProfiles.Value( anIndex ) ); if ( !aProfile.IsNull() ) { - // TODO check intersection + if ( !HYDROData_Stream::HasIntersection( anAxis, aProfile, aPlane, aPar ) ) { + aHasNoIntersectionProfiles << aProfile->GetName(); + } } }