#include <OCCViewer_ViewManager.h>
#include <OCCViewer_ViewModel.h>
+#include <OCCViewer_ViewWindow.h>
#include <LightApp_Application.h>
#include <LightApp_UpdateFlags.h>
if ( !aPanel )
return;
- mySplittedZones.clear();
+ myRegionsList.clear();
aPanel->reset();
QString anObjectName = HYDROGUI_Tool::GenerateObjectName( module(), "Case" );
- QStringList aSelectedZones, aSplittedZones;
+ QStringList aSelectedZones, aRegions;
myEditedObject.Nullify();
if ( myIsEdit )
aSelectedZones.append( aRefZoneName );
}
- HYDROData_SequenceOfObjects aSplitZones = myEditedObject->GetSplittedZones();
- anIter.Init( aSplitZones );
+ HYDROData_SequenceOfObjects aDataRegions = myEditedObject->GetRegions();
+ anIter.Init( aDataRegions );
for ( ; anIter.More(); anIter.Next() )
{
- Handle(HYDROData_Zone) aSplitZone =
- Handle(HYDROData_Zone)::DownCast( anIter.Value() );
- if ( aSplitZone.IsNull() )
+ Handle(HYDROData_Region) aDataRegion =
+ Handle(HYDROData_Region)::DownCast( anIter.Value() );
+ if ( aDataRegion.IsNull() )
continue;
- QString aSplitZoneName = aSplitZone->GetName();
- if ( aSplitZoneName.isEmpty() )
+ QString aRegionName = aDataRegion->GetName();
+ if ( aRegionName.isEmpty() )
continue;
- aSplittedZones.append( aSplitZoneName );
+ Region aRegion;
+ aRegion.SplitData.Shape = aDataRegion->Face();
+
+ aRegion.FillingColor = aDataRegion->GetFillingColor();
+ aRegion.BorderColor = aDataRegion->GetBorderColor();
+
+ aRegion.RegionName = aRegionName;
+
+ aRegion.DataRegion = aDataRegion;
+
+ myRegionsList.append( aRegion );
+
+ aRegions.append( aRegionName );
}
}
}
aPanel->setZones( aZones );
aPanel->setSelectedZones( aSelectedZones );
- aPanel->setSplittedZones( aSplittedZones );
+ aPanel->setRegions( aRegions );
+
+ createPreview();
}
void HYDROGUI_CalculationOp::abortOperation()
aCalculObj->SetZones( aRefZones );
- HYDROData_SequenceOfObjects aSplittedZones;
+ HYDROData_SequenceOfObjects aRegions;
- SplittedZonesList::iterator anIter = mySplittedZones.begin();
- for ( ; anIter != mySplittedZones.end(); ++anIter )
+ RegionsList::iterator anIter = myRegionsList.begin();
+ for ( ; anIter != myRegionsList.end(); ++anIter )
{
- const SplittedZone& aSplittedZone = *anIter;
-
- Handle(HYDROData_Polyline) aPolyline =
- Handle(HYDROData_Polyline)::DownCast( aDocument->CreateObject( KIND_POLYLINE ) );
- Handle(HYDROData_Zone) aDtaZone =
- Handle(HYDROData_Zone)::DownCast( aDocument->CreateObject( KIND_ZONE ) );
-
- if( aPolyline.IsNull() || aDtaZone.IsNull() )
- continue;
+ const Region& aRegion = *anIter;
- // Fill the polyline data
- aPolyline->SetName( aSplittedZone.PolylineName );
- aPolyline->setDimension( 2 );
-
- QList<PolylineSection> aPolylineData;
- for( int i = 0, n = aSplittedZone.SplitData.Path.elementCount(); i < n; i++ )
+ if ( !aRegion.DataRegion.IsNull() )
{
- const QPainterPath::Element anElement = aSplittedZone.SplitData.Path.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;
- }
+ //No need to create new but use old zone
+ aRegions.Append( aRegion.DataRegion );
+ continue;
}
- aPolyline->setPolylineData( aPolylineData );
+
+ Handle(HYDROData_Region) aDataRegion =
+ Handle(HYDROData_Region)::DownCast( aDocument->CreateObject( KIND_REGION ) );
+ if( aDataRegion.IsNull() )
+ continue;
// Fill the zone data
- aDtaZone->SetName( aSplittedZone.ZoneName );
- aDtaZone->SetPolyline( aPolyline );
- aDtaZone->SetBorderColor( aSplittedZone.BorderColor );
- aDtaZone->SetFillingColor( aSplittedZone.FillingColor );
+ aDataRegion->SetFace( aRegion.SplitData.Face() );
- aSplittedZones.Append( aDtaZone );
+ aDataRegion->SetName( aRegion.RegionName );
+ aDataRegion->SetBorderColor( aRegion.BorderColor );
+ aDataRegion->SetFillingColor( aRegion.FillingColor );
+
+ aRegions.Append( aDataRegion );
}
- aCalculObj->SetSplittedZones( aSplittedZones );
+ aCalculObj->SetRegions( aRegions );
theUpdateFlags = UF_Model;
void HYDROGUI_CalculationOp::onSplitZones()
{
- mySplittedZones.clear();
+ myRegionsList.clear();
HYDROGUI_CalculationDlg* aPanel =
::qobject_cast<HYDROGUI_CalculationDlg*>( inputPanel() );
HYDROGUI_SplitZonesTool::SplitDataListIterator anIter( aSplittedZones );
while( anIter.hasNext() )
{
- SplittedZone aSplittedZone;
- aSplittedZone.SplitData = anIter.next();
+ Region aRegion;
+ aRegion.SplitData = anIter.next();
- aSplittedZone.FillingColor = HYDROGUI_Tool::GenerateFillingColor( module(), aSplittedZone.SplitData.ZoneNames );
- aSplittedZone.BorderColor = QColor( HYDROData_Zone::DefaultBorderColor() );
+ aRegion.FillingColor = HYDROGUI_Tool::GenerateFillingColor( module(), aRegion.SplitData.ZoneNames );
+ aRegion.BorderColor = QColor( HYDROData_Zone::DefaultBorderColor() );
- aSplittedZone.ZoneName = HYDROGUI_Tool::GenerateObjectName( module(), aSplitZonesPrefix + "Zone", aUsedNames );
- aSplittedZone.PolylineName = HYDROGUI_Tool::GenerateObjectName( module(), aSplitZonesPrefix + "Poly", aUsedNames );
+ aRegion.RegionName = HYDROGUI_Tool::GenerateObjectName( module(), aSplitZonesPrefix, aUsedNames );
- aUsedNames.append( aSplittedZone.ZoneName );
- aUsedNames.append( aSplittedZone.PolylineName );
+ aUsedNames.append( aRegion.RegionName );
- aResSplittedZones.append( aSplittedZone.ZoneName );
+ aResSplittedZones.append( aRegion.RegionName );
- mySplittedZones.append( aSplittedZone );
+ myRegionsList.append( aRegion );
}
- aPanel->setSplittedZones( aResSplittedZones );
+ aPanel->setRegions( aResSplittedZones );
createPreview();
if ( !myActiveViewManager )
{
+ if ( myRegionsList.isEmpty() )
+ return;
+
myActiveViewManager = anApp->activeViewManager();
}
Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext();
if ( !aCtx.IsNull() )
{
- SplittedZonesList::iterator anIter = mySplittedZones.begin();
- for ( ; anIter != mySplittedZones.end(); ++anIter )
+ RegionsList::iterator anIter = myRegionsList.begin();
+ for ( ; anIter != myRegionsList.end(); ++anIter )
{
- SplittedZone& aSplittedZone = *anIter;
- if ( aSplittedZone.Shape )
- delete aSplittedZone.Shape;
-
- aSplittedZone.Shape = new HYDROGUI_Shape( aCtx );
-
- aSplittedZone.Shape->setFillingColor( aSplittedZone.FillingColor, false );
- aSplittedZone.Shape->setBorderColor( aSplittedZone.BorderColor, false );
- aSplittedZone.Shape->setPath( aSplittedZone.SplitData.Path, true );
+ Region& aRegion = *anIter;
+ if ( aRegion.Shape )
+ {
+ aRegion.Shape->erase( false );
+ delete aRegion.Shape;
+ }
+
+ aRegion.Shape = new HYDROGUI_Shape( aCtx, NULL );
+
+ aRegion.Shape->setFillingColor( aRegion.FillingColor, false, false );
+ aRegion.Shape->setBorderColor( aRegion.BorderColor, false, false );
+ aRegion.Shape->setFace( aRegion.SplitData.Face(), true, false );
}
+
+ //Process the draw events for viewer
+ QApplication::processEvents();
+ if ( OCCViewer_ViewWindow* vw = (OCCViewer_ViewWindow*)myPreviewViewManager->getActiveView() )
+ vw->onTopView();
}
}
}
void HYDROGUI_CalculationOp::closePreview()
{
- SplittedZonesList::iterator anIter= mySplittedZones.begin();
- for ( ; anIter != mySplittedZones.end(); ++anIter )
+ RegionsList::iterator anIter= myRegionsList.begin();
+ for ( ; anIter != myRegionsList.end(); ++anIter )
{
- SplittedZone& aSplittedZone = *anIter;
- if ( aSplittedZone.Shape )
+ Region& aRegion = *anIter;
+ if ( aRegion.Shape )
{
- delete aSplittedZone.Shape;
- aSplittedZone.Shape = NULL;
+ aRegion.Shape->erase( false );
+ delete aRegion.Shape;
+ aRegion.Shape = NULL;
}
}