#include <HYDROData_PolylineOperator.h>
#include <HYDROData_Document.h>
#include <HYDROData_TopoCurve.h>
+#include <HYDROData_Object.h>
#ifndef LIGHT_MODE
#include <CurveCreator_Utils.hxx>
#include <TopExp.hxx>
#include <TopExp_Explorer.hxx>
#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
-#include <QString>
+#include <QStringList>
#include <Geom_BSplineCurve.hxx>
template<class T> void append( std::vector<T>& theList, const std::vector<T>& theList2 )
}
return aMaxDefl;
}
+
+bool HYDROData_PolylineOperator::Extract( const Handle(HYDROData_Document)& theDocument,
+ const Handle(HYDROData_Object)& theObject )
+{
+ if( theObject.IsNull() || theDocument.IsNull() )
+ return false;
+
+ QList<TopoDS_Shape> aBoundShapes;
+ QStringList aBoundNames;
+
+ theObject->GetBoundaries( aBoundShapes, aBoundNames );
+
+ for( int i=0, n=aBoundShapes.size(); i<n; i++ )
+ {
+ TopoDS_Shape aShape = aBoundShapes[i];
+ if( aShape.IsNull() )
+ continue;
+
+ QString aBoundName = i<aBoundNames.size() ? aBoundNames[i] : "";
+
+ Handle( HYDROData_PolylineXY ) aPolyline =
+ Handle( HYDROData_PolylineXY )::DownCast( theDocument->CreateObject( KIND_POLYLINEXY ) );
+
+ if( aPolyline.IsNull() )
+ return false;
+
+ aPolyline->SetShape( aShape );
+
+ int anIndex = 0;
+ QString aName = aBoundName;
+ while( !theDocument->FindObjectByName( aName ).IsNull() )
+ {
+ anIndex++;
+ aName = aBoundName + "_" + QString::number( anIndex );
+ }
+ aPolyline->SetName( aName );
+ }
+
+ return true;
+}
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
-#include "HYDROGUI_PolylineExtractionOp.h"
-
-#include <GraphicsView_Viewer.h>
-
-#include "HYDROGUI_Module.h"
-#include "HYDROGUI_Operations.h"
-#include "HYDROGUI_Tool.h"
-#include "HYDROGUI_UpdateFlags.h"
-
-#include <HYDROData_Profile.h>
+#include <HYDROGUI_PolylineExtractionOp.h>
+#include <HYDROGUI_Module.h>
+#include <HYDROGUI_Tool.h>
+#include <HYDROGUI_UpdateFlags.h>
#include <HYDROData_Document.h>
-#include <HYDROData_PolylineXY.h>
-#include <HYDROData_ShapesGroup.h>
-
-#include <LightApp_Application.h>
-#include <LightApp_Displayer.h>
-
-#include <OCCViewer_ViewModel.h>
-#include <OCCViewer_ViewManager.h>
-
-#include <BRep_Builder.hxx>
+#include <HYDROData_PolylineOperator.h>
HYDROGUI_PolylineExtractionOp::HYDROGUI_PolylineExtractionOp( HYDROGUI_Module* theModule )
: HYDROGUI_Operation( theModule )
if ( aSeq.IsEmpty() )
return;
+ startDocOperation();
+ HYDROData_PolylineOperator anOp;
for ( Standard_Integer anIndex = 1, aLength = aSeq.Length(); anIndex <= aLength; anIndex++ )
{
- Handle(HYDROData_Entity) anObject = aSeq.Value( anIndex );
- if ( anObject.IsNull() )
- continue;
-
- ShapeInfoList aList;
-
- switch ( anObject->GetKind() )
- {
- case KIND_STREAM:
- aList = extract( Handle(HYDROData_Stream)::DownCast( anObject ) );
- break;
- case KIND_DIGUE:
- case KIND_CHANNEL:
- aList = extract( Handle(HYDROData_Channel)::DownCast( anObject ) );
- break;
- case KIND_OBSTACLE:
- aList = extract( Handle(HYDROData_Obstacle)::DownCast( anObject ) );
- break;
- }
-
- startDocOperation();
-
- for ( ShapeInfoList::const_iterator it = aList.begin(); it != aList.end(); ++it )
- {
- const ShapeInfo& inf = *it;
- TopoDS_Shape aLine = inf.shape();
- QString aName = QString( "%1_%2" ).arg( anObject->GetName() ).arg( inf.name() );
- if ( !HYDROGUI_Tool::FindObjectByName( aModule, aName ).IsNull() )
- {
- int num = 1;
- while ( !HYDROGUI_Tool::FindObjectByName( aModule, aName + QString( "_%1" ).arg( num ) ).IsNull() )
- num++;
-
- aName += QString( "_%1" ).arg( num );
- }
-
- Handle(HYDROData_PolylineXY) aPolylineObj = Handle(HYDROData_PolylineXY)::DownCast( doc()->CreateObject( KIND_POLYLINEXY ) );
- if ( !aPolylineObj.IsNull() )
- {
- aPolylineObj->SetName( aName );
- aPolylineObj->ImportShape( aLine );
- aPolylineObj->Update();
- }
- }
-
- commitDocOperation();
+ Handle(HYDROData_Object) anObject = Handle(HYDROData_Object)::DownCast( aSeq.Value( anIndex ) );
+ if( !anObject.IsNull() )
+ anOp.Extract( doc(), anObject );
}
+ commitDocOperation();
aModule->update( anUpdateFlags );
-
commit();
}
-
-HYDROGUI_PolylineExtractionOp::ShapeInfoList HYDROGUI_PolylineExtractionOp::extract( const Handle(HYDROData_Stream)& theStream ) const
-{
- ShapeInfoList aList;
- if ( !theStream.IsNull() )
- {
- aList.append( ShapeInfo( theStream->GetLeftShape(), QString( "Left bank" ) ) );
- aList.append( ShapeInfo( theStream->GetRightShape(), QString( "Right bank" ) ) );
-
- HYDROData_SequenceOfObjects aProfiles = theStream->GetProfiles();
- for ( int i = 1; i <= aProfiles.Length(); i++ )
- {
- Handle(HYDROData_Profile) aProfile = Handle(HYDROData_Profile)::DownCast( aProfiles.Value( i ) );
- aList.append( ShapeInfo( aProfile->GetTopShape(), QString( "Profile_%1" ).arg( i ) ) );
- }
- }
- return aList;
-}
-
-HYDROGUI_PolylineExtractionOp::ShapeInfoList HYDROGUI_PolylineExtractionOp::extract( const Handle(HYDROData_Channel)& aChannel ) const
-{
- ShapeInfoList aList;
- if ( !aChannel.IsNull() )
- {
- HYDROData_SequenceOfObjects aGroups = aChannel->GetGroups();
- int aNum = qMin( aGroups.Length(), 2 );
- for ( int i = 1; i <= aNum; i++ )
- {
- Handle(HYDROData_ShapesGroup) aGroup = Handle(HYDROData_ShapesGroup)::DownCast( aGroups.Value( i ) );
- TopTools_SequenceOfShape aShapes;
- aGroup->GetShapes( aShapes );
- if ( !aShapes.IsEmpty() )
- {
- TopoDS_Wire aWire;
- BRep_Builder aBuilder;
- aBuilder.MakeWire( aWire );
-
- for ( int s = 1; s <= aShapes.Length(); s++ )
- aBuilder.Add( aWire, aShapes.Value( s ) );
- aList.append( ShapeInfo( aWire, i > 1 ? "Right bank" : "Left bank" ) );
- }
- }
- }
- return aList;
-}
-
-HYDROGUI_PolylineExtractionOp::ShapeInfoList HYDROGUI_PolylineExtractionOp::extract( const Handle(HYDROData_Obstacle)& theObstacle ) const
-{
- ShapeInfoList aList;
- if ( !theObstacle.IsNull() )
- {
- TopoDS_Wire aWire;
- BRep_Builder aBuilder;
- aBuilder.MakeWire( aWire );
- HYDROData_SequenceOfObjects aGroups = theObstacle->GetGroups();
- for ( int i = 1; i <= aGroups.Length(); i++ )
- {
- Handle(HYDROData_ShapesGroup) aGroup = Handle(HYDROData_ShapesGroup)::DownCast( aGroups.Value( i ) );
- TopTools_SequenceOfShape aShapes;
- aGroup->GetShapes( aShapes );
- for ( int s = 1; s <= aShapes.Length(); s++ )
- aBuilder.Add( aWire, aShapes.Value( s ) );
- }
- aList.append( ShapeInfo( aWire, QString( "Contour" ) ) );
- }
- return aList;
-}