SetToUpdate( true );
}
-bool HYDROData_Stream::HasIntersection( const Handle(HYDROData_Profile)& theProfile, const TopoDS_Face& thePlane,
- Standard_Real& outPar ) const
+bool HYDROData_Stream::HasIntersection( const Handle(HYDROData_PolylineXY)& theHydAxis,
+ const Handle(HYDROData_Profile)& theProfile,
+ const TopoDS_Face& thePlane,
+ Standard_Real& outPar)
{
- Handle(HYDROData_PolylineXY) aHydAxis = GetHydraulicAxis();
- if ( theProfile.IsNull() || aHydAxis.IsNull() )
+ if ( theProfile.IsNull() || theHydAxis.IsNull() )
return false;
- TopoDS_Wire aHydraulicWire = TopoDS::Wire( aHydAxis->GetShape() ); //guide line
+ TopoDS_Wire aHydraulicWire = TopoDS::Wire( theHydAxis->GetShape() ); //guide line
TopoDS_Wire aProfileWire = TopoDS::Wire( theProfile->GetTopShape() );
if ( aHydraulicWire.IsNull() || aProfileWire.IsNull() )
return false;
return false;
}
+bool HYDROData_Stream::HasIntersection( const Handle(HYDROData_Profile)& theProfile, const TopoDS_Face& thePlane,
+ Standard_Real& outPar ) const
+{
+ Handle(HYDROData_PolylineXY) aHydAxis = GetHydraulicAxis();
+
+ return HasIntersection( aHydAxis, theProfile, thePlane, outPar );
+}
+
bool HYDROData_Stream::AddProfile( const Handle(HYDROData_Profile)& theProfile )
{
*/
HYDRODATA_EXPORT virtual void RemoveHydraulicAxis();
+ /**
+ * Returns true if profile has the intersection with the given hydraulic axis.
+ * Returns the parameter of inresection point on axis if axis is presented by one curve,
+ * if axis presented by set of edges the <outPar> returns a common length of segments till the intersection point.
+ */
+ HYDRODATA_EXPORT static bool HasIntersection( const Handle(HYDROData_PolylineXY)& theHydAxis,
+ const Handle(HYDROData_Profile)& theProfile, const TopoDS_Face& thePlane,
+ Standard_Real& outPar);
/**
* Returns true if profile has the intersection with reference hydraulic axis.
* if axis presented by set of edges the <outPar> returns a common length of segments till the intersection point.
*/
HYDRODATA_EXPORT virtual bool HasIntersection( const Handle(HYDROData_Profile)& theProfile, const TopoDS_Face& thePlane,
- Standard_Real& outPar) const;
+ Standard_Real& outPar) const;
/**
* Builds a planar face
}
}
- if ( !aSelectedProfiles.isEmpty() ) {
- emit RemoveProfiles( aSelectedProfiles );
- }
+ emit RemoveProfiles( aSelectedProfiles );
}
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 )
Handle(HYDROData_PolylineXY) anAxis = Handle(HYDROData_PolylineXY)::DownCast(
HYDROGUI_Tool::FindObjectByName( module(), theNewAxis, KIND_POLYLINEXY ) );
+ // Prepare data for intersection check
+ TopoDS_Face aPlane;
+ if ( anAxis.IsNull() || !myEditedObject->BuildFace(anAxis, aPlane) ) {
+ // 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();
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();
+ }
}
}