X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_StreamOp.cxx;h=bd7085f4efd7aa086b947998ae6fbd69c69bdfdb;hb=a1431f03eac1d1aed4203d0568d987c41ce939b3;hp=f23b1c03a614b67907772463e8d9081efa6a05c6;hpb=240521de7f31918d82ca00f0a3480a3d877a97c6;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_StreamOp.cxx b/src/HYDROGUI/HYDROGUI_StreamOp.cxx index f23b1c03..bd7085f4 100755 --- a/src/HYDROGUI/HYDROGUI_StreamOp.cxx +++ b/src/HYDROGUI/HYDROGUI_StreamOp.cxx @@ -174,6 +174,12 @@ bool HYDROGUI_StreamOp::processApply( int& theUpdateFlags, // Set the object name myEditedObject->SetName( anObjectName ); + if ( !myIsEdit ) + { + myEditedObject->SetFillingColor( HYDROData_Stream::DefaultFillingColor() ); + myEditedObject->SetBorderColor( HYDROData_Stream::DefaultBorderColor() ); + } + // Erase preview erasePreview(); @@ -182,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; } @@ -245,13 +253,13 @@ void HYDROGUI_StreamOp::onAddProfiles() QStringList anInvalidProfiles, anExistingProfiles, aHasNoIntersectionProfiles; HYDROData_SequenceOfObjects aVerifiedProfiles; - HYDROData_SequenceOfObjects aSelectedProfiles = HYDROGUI_Tool::GetSelectedObjects( module() ); - gp_Ax2 aX2(gp::XOY()); - gp_Ax3 aX3(aX2); - gp_Pln aPln(aX3); - BRepBuilderAPI_MakeFace aMkr(aPln); - if(!aMkr.IsDone()) return; - const TopoDS_Face& aPlane = TopoDS::Face(aMkr.Shape()); + HYDROData_SequenceOfObjects aSelectedProfiles = HYDROGUI_Tool::GetSelectedObjects( module() ); + Handle(HYDROData_PolylineXY) aHydAxis = myEditedObject->GetHydraulicAxis(); + if ( aHydAxis.IsNull() ) + return; + TopoDS_Face aPlane; + if(!myEditedObject->BuildFace(aHydAxis, aPlane)) + return; Standard_Real aPar(.0); for( int i = 1, n = aSelectedProfiles.Length(); i <= n; i++ ) { Handle(HYDROData_Profile) aProfile = @@ -313,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 ) @@ -338,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(); @@ -345,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(); + } } }