-
-//-----------------------------------------------------------------------------
-// Test splitting
-//-----------------------------------------------------------------------------
-#include <HYDROData_Iterator.h>
-#include <HYDROGUI_Tool.h>
-void HYDROGUI_Module::onTestSplit()
-{
- Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( getStudyId() );
-
- aDocument->StartOperation();
-
- HYDROData_SequenceOfObjects aZoneList;
- HYDROData_Iterator anIterator( aDocument, KIND_ZONE );
- for( ; anIterator.More(); anIterator.Next() )
- aZoneList.Append( anIterator.Current() );
-
- HYDROGUI_SplitZonesTool::SplitDataList aSplitDataList =
- HYDROGUI_SplitZonesTool::SplitZones( aZoneList, NULL );
-
- int anIndex = 0;
- HYDROGUI_SplitZonesTool::SplitDataListIterator anIter( aSplitDataList );
- while( anIter.hasNext() )
- {
- const HYDROGUI_SplitZonesTool::SplitData& aSplitData = anIter.next();
- const QPainterPath& aPath = aSplitData.Path;
- const QStringList& aZoneNames = aSplitData.ZoneNames;
-
- Handle(HYDROData_Polyline) aPolyline =
- Handle(HYDROData_Polyline)::DownCast( aDocument->CreateObject( KIND_POLYLINE ) );
- if( !aPolyline.IsNull() )
- {
- aPolyline->SetName( QString( "SplitPolyline_%1" ).arg( ++anIndex ) );
- aPolyline->setDimension( 2 );
-
- QList<PolylineSection> aPolylineData;
- for( int i = 0, n = aPath.elementCount(); i < n; i++ )
- {
- const QPainterPath::Element anElement = aPath.elementAt( i );
- switch( anElement.type )
- {
- case QPainterPath::MoveToElement:
- aPolylineData.append( PolylineSection() );
- break;
- case QPainterPath::LineToElement:
- if( !aPolylineData.isEmpty() )
- {
- PolylineSection& aSection = aPolylineData.last();
- aSection.myCoords << anElement.x;
- aSection.myCoords << anElement.y;
- }
- break;
- case QPainterPath::CurveToElement: // currently not supported
- default:
- break;
- }
- }
- aPolyline->setPolylineData( aPolylineData );
- }
-
- Handle(HYDROData_Zone) aZone =
- Handle(HYDROData_Zone)::DownCast( aDocument->CreateObject( KIND_ZONE ) );
- if( !aZone.IsNull() )
- {
- aZone->SetName( QString( "SplitZone_%1" ).arg( anIndex ) );
- aZone->SetPolyline( aPolyline );
-
- aZone->SetBorderColor( Qt::black );
-
- int aCounter = 0;
- int aR = 0, aG = 0, aB = 0;
- QStringListIterator aZoneNameIter( aZoneNames );
- while( aZoneNameIter.hasNext() )
- {
- const QString& aZoneName = aZoneNameIter.next();
- Handle(HYDROData_Zone) aRefZone = Handle(HYDROData_Zone)::DownCast(
- HYDROGUI_Tool::FindObjectByName( this, aZoneName, KIND_ZONE ) );
- if( !aRefZone.IsNull() )
- {
- QColor aRefColor = aRefZone->GetFillingColor();
- aR += aRefColor.red();
- aG += aRefColor.green();
- aB += aRefColor.blue();
- aCounter++;
- }
- }
- if( aCounter > 0 )
- {
- QColor aFillingColor( aR / aCounter, aG / aCounter, aB / aCounter );
- aZone->SetFillingColor( aFillingColor );
- }
- }
- }
-
- aDocument->CommitOperation();
- update( UF_Model );
-}