#include <OCCViewer_ViewWindow.h>
#include <OCCViewer_ViewPort3d.h>
+#include <OCCViewer_ViewManager.h>
+
#include <LightApp_Application.h>
#include <LightApp_SelectionMgr.h>
+#include <LightApp_DataOwner.h>
#include <SUIT_ViewWindow.h>
+#include <SUIT_DataObject.h>
#include <TopoDS.hxx>
#include <TopoDS_Face.hxx>
HYDROGUI_LandCoverMapOp::HYDROGUI_LandCoverMapOp( HYDROGUI_Module* theModule, const int theOperationId )
: HYDROGUI_Operation( theModule ),
myOperationId( theOperationId ),
- myPreviewPrs( 0 )
+ myPreviewPrs( 0 ),
+ myPolylineFacePreviewPrs( 0 )
{
switch( myOperationId )
{
HYDROGUI_LandCoverMapDlg* aPanel = new HYDROGUI_LandCoverMapDlg( module(), getName(), myOperationId );
connect( aPanel, SIGNAL( landCoverMapChanged( const QString& ) ),
this, SLOT( onLandCoverMapChanged( const QString& ) ) );
+ connect( aPanel, SIGNAL( polylineFaceChanged() ),
+ this, SLOT( onPolylineFaceChanged() ) );
return aPanel;
}
}
}
+void HYDROGUI_LandCoverMapOp::onPolylineFaceChanged()
+{
+ HYDROGUI_LandCoverMapDlg* aPanel = ::qobject_cast<HYDROGUI_LandCoverMapDlg*>( inputPanel() );
+ if ( !aPanel )
+ return;
+
+ LightApp_DataOwner* aPolylineFaceDataOwner = NULL;
+ Handle(HYDROData_Entity) aPolylineFace = aPanel->getPolylineFace();
+ if ( !aPolylineFace.IsNull() )
+ {
+ // Select chosen polyline/face in the Object Browser, if it is not selected yet
+ // (i.e. object was chosen not in the Object Browser or 3d Viewer, but in combo-box)
+ aPolylineFaceDataOwner = new LightApp_DataOwner( HYDROGUI_DataObject::dataObjectEntry( aPolylineFace ) );
+ LightApp_SelectionMgr* aSelectionMgr = module()->getApp()->selectionMgr();
+ if ( aSelectionMgr )
+ {
+ bool bIsAlreadySelected = false;
+ SUIT_DataOwnerPtrList aSelectedOwners;
+ aSelectionMgr->selected( aSelectedOwners );
+ foreach( SUIT_DataOwner* aSUITOwner, aSelectedOwners )
+ {
+ if ( LightApp_DataOwner* anOwner = dynamic_cast<LightApp_DataOwner*>( aSUITOwner ) )
+ {
+ if ( anOwner->entry() == aPolylineFaceDataOwner->entry() )
+ {
+ bIsAlreadySelected = true;
+ break;
+ }
+ }
+ }
+ if ( !bIsAlreadySelected )
+ {
+ SUIT_DataOwnerPtrList aList( true );
+ aList.append( SUIT_DataOwnerPtr( aPolylineFaceDataOwner ) );
+ aSelectionMgr->setSelected( aList );
+ }
+ }
+
+ // Show Preview of selected polyline/face
+ Handle(HYDROData_PolylineXY) aPolyline = Handle(HYDROData_PolylineXY)::DownCast( aPolylineFace );
+ Handle(HYDROData_Object) aFace = Handle(HYDROData_Object)::DownCast( aPolylineFace );
+ if ( !aPolyline.IsNull() || !aFace.IsNull() )
+ {
+ TopoDS_Shape aTopoDSShape;
+ if ( !aPolyline.IsNull() )
+ aTopoDSShape = aPolyline->GetShape();
+ else
+ aTopoDSShape = aFace->GetTopShape();
+
+ OCCViewer_ViewManager* aViewManager = ::qobject_cast<OCCViewer_ViewManager*>(
+ module()->getApp()->getViewManager( OCCViewer_Viewer::Type(), true ) );
+ if ( aViewManager )
+ {
+ if ( OCCViewer_Viewer* aViewer = aViewManager->getOCCViewer() )
+ {
+ if ( myPolylineFacePreviewPrs )
+ {
+ delete myPolylineFacePreviewPrs;
+ myPolylineFacePreviewPrs = 0;
+ }
+
+ int aViewerId = (size_t)aViewer;
+ if ( !module()->isObjectVisible( aViewerId, aPolylineFace ) )
+ {
+ Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext();
+ if ( !aCtx.IsNull() )
+ {
+ myPolylineFacePreviewPrs = new HYDROGUI_Shape( aCtx, NULL, getPreviewZLayer() );
+ aCtx->ClearSelected();
+
+ myPolylineFacePreviewPrs->setBorderColor( Qt::white, false, false );
+ myPolylineFacePreviewPrs->setShape( aTopoDSShape, true, true, !aPolyline.IsNull() ? AIS_WireFrame : AIS_Shaded );
+
+ module()->update( UF_OCCViewer | UF_FitAll );
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
void HYDROGUI_LandCoverMapOp::onCreatePreview()
{
HYDROGUI_LandCoverMapDlg* aPanel = ::qobject_cast<HYDROGUI_LandCoverMapDlg*>( inputPanel() );
Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext();
if ( !aCtx.IsNull() )
{
- disconnect(aViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)),
- aViewer, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*)));
- disconnect(aViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)),
- aViewer, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
-
- connect(aViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)),
- this, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*)));
- connect(aViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)),
- this, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
-
- LightApp_SelectionMgr* aSelectionMgr = module()->getApp()->selectionMgr();
- if( aSelectionMgr )
+ if ( myOperationId == RemoveLandCoverId ||
+ myOperationId == MergeLandCoverId ||
+ myOperationId == ChangeLandCoverTypeId )
{
- QList<SUIT_Selector*> aSelectorList;
- aSelectionMgr->selectors( aViewManager->getType(), aSelectorList );
- QList<SUIT_Selector*>::iterator anIter, anIterEnd = aSelectorList.end();
- for( anIter = aSelectorList.begin(); anIter != anIterEnd; anIter++ )
+ disconnect(aViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)),
+ aViewer, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*)));
+ disconnect(aViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)),
+ aViewer, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
+
+ connect(aViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)),
+ this, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*)));
+ connect(aViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)),
+ this, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
+
+ LightApp_SelectionMgr* aSelectionMgr = module()->getApp()->selectionMgr();
+ if ( aSelectionMgr )
{
- HYDROGUI_OCCSelector* aHydroSelector = dynamic_cast<HYDROGUI_OCCSelector*>( *anIter );
- if ( aHydroSelector )
+ QList<SUIT_Selector*> aSelectorList;
+ aSelectionMgr->selectors( aViewManager->getType(), aSelectorList );
+ QList<SUIT_Selector*>::iterator anIter, anIterEnd = aSelectorList.end();
+ for( anIter = aSelectorList.begin(); anIter != anIterEnd; anIter++ )
{
- disconnect( aHydroSelector->viewer(), SIGNAL( deselection() ), aHydroSelector, SLOT( onDeselection() ) );
- connect( this, SIGNAL( deselection() ), aHydroSelector, SLOT( onDeselection() ) );
+ HYDROGUI_OCCSelector* aHydroSelector = dynamic_cast<HYDROGUI_OCCSelector*>( *anIter );
+ if ( aHydroSelector )
+ {
+ disconnect( aHydroSelector->viewer(), SIGNAL( deselection() ), aHydroSelector, SLOT( onDeselection() ) );
+ connect( this, SIGNAL( deselection() ), aHydroSelector, SLOT( onDeselection() ) );
+ }
}
}
- }
- connect( this, SIGNAL( selectionChanged() ), this, SLOT( onViewerSelectionChanged() ) );
+ connect( this, SIGNAL( selectionChanged() ), this, SLOT( onViewerSelectionChanged() ) );
+ }
+ else
+ connect( aViewer, SIGNAL( selectionChanged() ), this, SLOT( onViewerSelectionChanged() ) );
myPreviewPrs = new HYDROGUI_ShapeLandCoverMap( module()->getOCCDisplayer(), aCtx, myEditedObject, getPreviewZLayer()/*, theIsScalarMapMode*/ );
}
}
void HYDROGUI_LandCoverMapOp::closePreview()
{
- if( myPreviewPrs )
+ if ( myPreviewPrs )
{
delete myPreviewPrs;
myPreviewPrs = 0;
}
+ if ( myPolylineFacePreviewPrs )
+ {
+ delete myPolylineFacePreviewPrs;
+ myPolylineFacePreviewPrs = 0;
+ }
+
HYDROGUI_LandCoverMapDlg* aPanel = ::qobject_cast<HYDROGUI_LandCoverMapDlg*>( inputPanel() );
if ( !aPanel )
return;
if ( myOperationId == RemoveLandCoverId || myOperationId == MergeLandCoverId || myOperationId == ChangeLandCoverTypeId )
aPanel->setApplyEnabled( false );
- OCCViewer_ViewManager* aViewManager = getPreviewManager();
- if ( aViewManager )
+ if ( myOperationId == RemoveLandCoverId ||
+ myOperationId == MergeLandCoverId ||
+ myOperationId == ChangeLandCoverTypeId )
{
- if ( OCCViewer_Viewer* aViewer = aViewManager->getOCCViewer() )
+ OCCViewer_ViewManager* aViewManager = getPreviewManager();
+ if ( aViewManager )
{
- disconnect(aViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)),
- this, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*)));
- disconnect(aViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)),
- this, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
- connect(aViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)),
- aViewer, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*)));
- connect(aViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)),
- aViewer, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
-
- LightApp_SelectionMgr* aSelectionMgr = module()->getApp()->selectionMgr();
- if( aSelectionMgr )
+ if ( OCCViewer_Viewer* aViewer = aViewManager->getOCCViewer() )
{
- QList<SUIT_Selector*> aSelectorList;
- aSelectionMgr->selectors( aViewManager->getType(), aSelectorList );
- QList<SUIT_Selector*>::iterator anIter, anIterEnd = aSelectorList.end();
- for( anIter = aSelectorList.begin(); anIter != anIterEnd; anIter++ )
+ disconnect(aViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)),
+ this, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*)));
+ disconnect(aViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)),
+ this, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
+ connect(aViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)),
+ aViewer, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*)));
+ connect(aViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)),
+ aViewer, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
+
+ LightApp_SelectionMgr* aSelectionMgr = module()->getApp()->selectionMgr();
+ if ( aSelectionMgr )
{
- HYDROGUI_OCCSelector* aHydroSelector = dynamic_cast<HYDROGUI_OCCSelector*>( *anIter );
- if ( aHydroSelector )
+ QList<SUIT_Selector*> aSelectorList;
+ aSelectionMgr->selectors( aViewManager->getType(), aSelectorList );
+ QList<SUIT_Selector*>::iterator anIter, anIterEnd = aSelectorList.end();
+ for( anIter = aSelectorList.begin(); anIter != anIterEnd; anIter++ )
{
- disconnect( this, SIGNAL( deselection() ), aHydroSelector, SLOT( onDeselection() ) );
- connect( aHydroSelector->viewer(), SIGNAL( deselection() ), aHydroSelector, SLOT( onDeselection() ) );
+ HYDROGUI_OCCSelector* aHydroSelector = dynamic_cast<HYDROGUI_OCCSelector*>( *anIter );
+ if ( aHydroSelector )
+ {
+ disconnect( this, SIGNAL( deselection() ), aHydroSelector, SLOT( onDeselection() ) );
+ connect( aHydroSelector->viewer(), SIGNAL( deselection() ), aHydroSelector, SLOT( onDeselection() ) );
+ }
}
}
}