#include "HYDROGUI_GVSelector.h"
#include "HYDROGUI_InputPanel.h"
#include "HYDROGUI_ObjSelector.h"
+#include "HYDROGUI_OCCDisplayer.h"
+#include "HYDROGUI_OCCSelector.h"
#include "HYDROGUI_Operations.h"
#include "HYDROGUI_PrsImage.h"
#include "HYDROGUI_Tool.h"
#include "HYDROGUI_UpdateFlags.h"
+#include "HYDROGUI_Shape.h"
#include <HYDROData_Image.h>
+#include <HYDROData_Lambert93.h>
-#include <HYDROOperations_Factory.h>
+#include <HYDROData_OperationsFactory.h>
#include <GraphicsView_ViewFrame.h>
#include <GraphicsView_ViewManager.h>
#include <LightApp_SelectionMgr.h>
#include <LightApp_UpdateFlags.h>
+#include <OCCViewer_ViewFrame.h>
+#include <OCCViewer_ViewManager.h>
+#include <OCCViewer_ViewModel.h>
+
#include <SALOME_Event.h>
#include <SUIT_Desktop.h>
HYDROGUI_Module::HYDROGUI_Module()
: LightApp_Module( "HYDRO" ),
myDisplayer( 0 ),
+ myOCCDisplayer( 0 ),
myIsUpdateEnabled( true )
{
}
setToolShown( false );
myDisplayer = new HYDROGUI_Displayer( this );
+ myOCCDisplayer = new HYDROGUI_OCCDisplayer( this );
}
bool HYDROGUI_Module::activateModule( SUIT_Study* theStudy )
myViewManagerMap.clear();
myObjectStateMap.clear();
+ myShapesMap.clear();
// clear the data model's list of copying objects
HYDROGUI_DataModel::changeCopyingObjects( HYDROData_SequenceOfObjects() );
void HYDROGUI_Module::viewManagers( QStringList& theTypesList ) const
{
- theTypesList << GraphicsView_Viewer::Type();
+ theTypesList << OCCViewer_Viewer::Type() << GraphicsView_Viewer::Type();
}
void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
HYDROGUI_DataModel* aModel = getDataModel();
bool anIsObjectBrowser = theClient == "ObjectBrowser";
- bool anIsGraphicsView = theClient == "GraphicsView";
- if( !anIsObjectBrowser && !anIsGraphicsView )
+ bool anIsGraphicsView = theClient == GraphicsView_Viewer::Type();
+ bool anIsOCCView = theClient == OCCViewer_Viewer::Type();
+ if( !anIsObjectBrowser && !anIsGraphicsView && !anIsOCCView )
return;
- size_t aViewId = HYDROGUI_Tool::GetActiveGraphicsViewId( this );
+ size_t anActiveViewId = HYDROGUI_Tool::GetActiveViewId( this );
bool anIsSelectedDataObjects = false;
bool anIsVisibleInSelection = false;
bool anIsImage = false;
bool anIsImportedImage = false;
- bool anIsCompositeImage = false;
+ bool anIsImageHasRefs = false;
bool anIsFusedImage = false;
bool anIsCutImage = false;
bool anIsSplittedImage = false;
bool anIsMustBeUpdatedImage = false;
bool anIsPolyline = false;
bool anIsCalculation = false;
- bool anIsZone = false;
+ bool anIsImmersibleZone = false;
bool anIsVisualState = false;
// check the selected data model objects
HYDROData_SequenceOfObjects aSeq = HYDROGUI_Tool::GetSelectedObjects( this );
for( Standard_Integer anIndex = 1, aLength = aSeq.Length(); anIndex <= aLength; anIndex++ )
{
- Handle(HYDROData_Object) anObject = aSeq.Value( anIndex );
+ Handle(HYDROData_Entity) anObject = aSeq.Value( anIndex );
if( !anObject.IsNull() )
{
anIsSelectedDataObjects = true;
- bool aVisibility = isObjectVisible( aViewId, anObject );
+ bool aVisibility = isObjectVisible( anActiveViewId, anObject );
anIsVisibleInSelection |= aVisibility;
anIsHiddenInSelection |= !aVisibility;
Handle(HYDROData_Image) anImage = Handle(HYDROData_Image)::DownCast( anObject );
if( !anImage.IsNull() )
{
- anIsImportedImage = anImage->HasTrsfPoints() && !anImage->IsSelfSplitted();
- anIsCompositeImage = anImage->NbReferences() > 0;
- if( HYDROOperations_Factory* aFactory = HYDROOperations_Factory::Factory() )
+ anIsImportedImage = anImage->HasLocalPoints() && !anImage->IsSelfSplitted();
+ anIsImageHasRefs = anImage->HasReferences();
+ if( HYDROData_OperationsFactory* aFactory = HYDROData_OperationsFactory::Factory() )
{
if( ImageComposer_Operator* anOperator = aFactory->Operator( anImage ) )
{
anIsSplittedImage = true;
}
}
- anIsMustBeUpdatedImage = anImage->MustBeUpdated();
+ anIsMustBeUpdatedImage = anImage->IsMustBeUpdated();
}
}
else if( anObject->GetKind() == KIND_POLYLINE )
anIsPolyline = true;
else if( anObject->GetKind() == KIND_CALCULATION )
anIsCalculation = true;
- else if( anObject->GetKind() == KIND_ZONE )
- anIsZone = true;
+ else if( anObject->GetKind() == KIND_IMMERSIBLE_ZONE )
+ anIsImmersibleZone = true;
else if( anObject->GetKind() == KIND_VISUAL_STATE )
anIsVisualState = true;
}
case KIND_CALCULATION:
theMenu->addAction( action( CreateCalculationId ) );
break;
- case KIND_ZONE:
- theMenu->addAction( action( CreateZoneId ) );
+ case KIND_IMMERSIBLE_ZONE:
+ theMenu->addAction( action( CreateImmersibleZoneId ) );
break;
}
theMenu->addSeparator();
{
if( anIsImportedImage )
theMenu->addAction( action( EditImportedImageId ) );
- else if( anIsCompositeImage )
+ else if( anIsImageHasRefs )
{
if( anIsFusedImage )
theMenu->addAction( action( EditFusedImageId ) );
theMenu->addAction( action( ExportImageId ) );
theMenu->addSeparator();
+ if( anIsImageHasRefs )
+ {
+ theMenu->addAction( action( RemoveImageRefsId ) );
+ theMenu->addSeparator();
+ }
+
theMenu->addAction( action( FuseImagesId ) );
theMenu->addAction( action( CutImagesId ) );
theMenu->addAction( action( SplitImageId ) );
theMenu->addAction( action( EditCalculationId ) );
theMenu->addSeparator();
}
- else if( anIsZone )
+ else if( anIsImmersibleZone )
{
- theMenu->addAction( action( EditZoneId ) );
+ theMenu->addAction( action( EditImmersibleZoneId ) );
theMenu->addSeparator();
}
else if( anIsVisualState && anIsObjectBrowser )
theMenu->addSeparator();
}
- if( anIsSelectedDataObjects && ( anIsImage || anIsPolyline || anIsZone ) )
+ if( anIsSelectedDataObjects && ( anIsImage || anIsPolyline || anIsImmersibleZone ) )
{
if( anIsHiddenInSelection )
theMenu->addAction( action( ShowId ) );
theMenu->addSeparator();
}
- if( anIsObjectBrowser || anIsGraphicsView )
+ if( anIsObjectBrowser || anIsGraphicsView || anIsOCCView )
{
theMenu->addAction( action( ShowAllId ) );
theMenu->addAction( action( HideAllId ) );
updateGV( flags & UF_GV_Init,
flags & UF_GV_Forced );
+ if( ( flags & UF_OCCViewer ) )
+ updateOCCViewer( flags & UF_OCC_Init,
+ flags & UF_OCC_Forced );
+
if( ( flags & UF_Model ) && getDataModel() && getApp() )
{
getDataModel()->update( getStudyId() );
// the selection in the object browser.
// Note: processEvents() should be called after updateGV(),
// otherwise the application crashes from time to time.
- qApp->processEvents();
+ //RKV: qApp->processEvents();
getApp()->updateObjectBrowser( true );
}
return myDisplayer;
}
+HYDROGUI_OCCDisplayer* HYDROGUI_Module::getOCCDisplayer() const
+{
+ return myOCCDisplayer;
+}
+
GraphicsView_Viewer* HYDROGUI_Module::getViewer( const int theId ) const
{
if( myViewManagerMap.contains( theId ) )
return NULL;
}
+OCCViewer_Viewer* HYDROGUI_Module::getOCCViewer( const int theId ) const
+{
+ if( myViewManagerMap.contains( theId ) )
+ {
+ ViewManagerInfo anInfo = myViewManagerMap[ theId ];
+ OCCViewer_ViewManager* aViewManager =
+ ::qobject_cast<OCCViewer_ViewManager*>( anInfo.first );
+ if( aViewManager )
+ return aViewManager->getOCCViewer();
+ }
+ return NULL;
+}
+
int HYDROGUI_Module::getViewManagerId( SUIT_ViewManager* theViewManager )
{
ViewManagerMapIterator anIter( myViewManagerMap );
}
bool HYDROGUI_Module::isObjectVisible( const int theViewId,
- const Handle(HYDROData_Object)& theObject )
+ const Handle(HYDROData_Entity)& theObject ) const
{
if( theObject.IsNull() )
return false;
}
void HYDROGUI_Module::setObjectVisible( const int theViewId,
- const Handle(HYDROData_Object)& theObject,
+ const Handle(HYDROData_Entity)& theObject,
const bool theState )
{
if( !theObject.IsNull() )
}
}
+HYDROGUI_Shape* HYDROGUI_Module::getObjectShape( const int theViewId,
+ const Handle(HYDROData_Entity)& theObject ) const
+{
+ HYDROGUI_Shape* aResShape = NULL;
+ if( theObject.IsNull() )
+ return aResShape;
+
+ if ( myShapesMap.contains( theViewId ) )
+ {
+ const ListOfShapes& aViewShapes = myShapesMap.value( theViewId );
+ foreach ( HYDROGUI_Shape* aShape, aViewShapes )
+ {
+ if ( !aShape || !IsEqual( aShape->getObject(), theObject ) )
+ continue;
+
+ aResShape = aShape;
+ break;
+ }
+ }
+
+ return aResShape;
+}
+
+void HYDROGUI_Module::setObjectShape( const int theViewId,
+ const Handle(HYDROData_Entity)& theObject,
+ HYDROGUI_Shape* theShape )
+{
+ if( theObject.IsNull() )
+ return;
+
+ ListOfShapes& aViewShapes = myShapesMap[ theViewId ];
+ aViewShapes.append( theShape );
+}
+
+void HYDROGUI_Module::removeObjectShape( const int theViewId,
+ const Handle(HYDROData_Entity)& theObject )
+{
+ if ( !myShapesMap.contains( theViewId ) )
+ return;
+
+ ListOfShapes& aViewShapes = myShapesMap[ theViewId ];
+ Handle(HYDROData_Entity) anObject;
+ for ( int i = 0; i < aViewShapes.length(); )
+ {
+ HYDROGUI_Shape* aShape = aViewShapes.at( i );
+ anObject = aShape->getObject();
+ if ( aShape && (!anObject.IsNull()) && IsEqual( anObject, theObject ) )
+ {
+ delete aShape;
+ aViewShapes.removeAt( i );
+ continue;
+ }
+
+ ++i;
+ }
+}
+
+void HYDROGUI_Module::removeViewShapes( const int theViewId )
+{
+ if ( !myShapesMap.contains( theViewId ) )
+ return;
+
+ const ListOfShapes& aViewShapes = myShapesMap.value( theViewId );
+ for ( int i = 0, n = aViewShapes.length(); i < n; ++i )
+ {
+ HYDROGUI_Shape* aShape = aViewShapes.at( i );
+ if ( aShape )
+ delete aShape;
+ }
+
+ myShapesMap.remove( theViewId );
+}
+
CAM_DataModel* HYDROGUI_Module::createDataModel()
{
return new HYDROGUI_DataModel( this );
{
if( GraphicsView_Viewer* aViewer = dynamic_cast<GraphicsView_Viewer*>( aViewFrame->getViewer() ) )
{
+ SUIT_ViewManager* aViewManager = aViewer->getViewManager();
+ ViewManagerRole aRole = getViewManagerRole( aViewManager );
+
if( GraphicsView_ViewPort* aViewPort = aViewer->getActiveViewPort() )
{
+ if( aRole != VMR_TransformImage && aRole != VMR_ReferenceImage )
+ aViewPort->scale( 1, -1 ); // invert the Y axis direction from down to up
+
aViewPort->setInteractionFlag( GraphicsView_ViewPort::TraceBoundingRect );
aViewPort->setInteractionFlag( GraphicsView_ViewPort::ImmediateContextMenu );
aViewPort->setInteractionFlag( GraphicsView_ViewPort::ImmediateSelection );
//aViewPort->setViewLabelPosition( GraphicsView_ViewPort::VLP_BottomLeft, true );
}
- SUIT_ViewManager* aViewManager = aViewer->getViewManager();
- ViewManagerRole aRole = getViewManagerRole( aViewManager );
- if( aRole != VMR_TransformImage )
+ if( aRole != VMR_TransformImage && aRole != VMR_ReferenceImage )
update( UF_Viewer );
aViewer->activateTransform( GraphicsView_Viewer::FitAll );
if( theViewManager->getType() == GraphicsView_Viewer::Type() )
{
- createSelector( theViewManager ); // replace the default selector
-
+ connect( theViewManager, SIGNAL( viewCreated( SUIT_ViewWindow* ) ),
+ this, SLOT( onViewCreated( SUIT_ViewWindow* ) ) );
+ }
+ else if( theViewManager->getType() == OCCViewer_Viewer::Type() )
+ {
connect( theViewManager, SIGNAL( viewCreated( SUIT_ViewWindow* ) ),
this, SLOT( onViewCreated( SUIT_ViewWindow* ) ) );
}
+ createSelector( theViewManager ); // replace the default selector
+
ViewManagerInfo anInfo( theViewManager, VMR_General );
myViewManagerMap.insert( ViewManagerId++, anInfo );
}
int anId = getViewManagerId( theViewManager );
if( anId != -1 )
+ {
+ OCCViewer_ViewManager* anOCCViewManager =
+ ::qobject_cast<OCCViewer_ViewManager*>( myViewManagerMap[ anId ].first );
+ if ( anOCCViewManager )
+ {
+ OCCViewer_Viewer* anOCCViewer = anOCCViewManager->getOCCViewer();
+ if ( anOCCViewer )
+ removeViewShapes( (size_t)anOCCViewer );
+ }
+
myViewManagerMap.remove( anId );
+ }
}
void HYDROGUI_Module::onViewCreated( SUIT_ViewWindow* theViewWindow )
connect( aViewPort, SIGNAL( vpMouseEvent( QGraphicsSceneMouseEvent* ) ),
this, SLOT( onViewPortMouseEvent( QGraphicsSceneMouseEvent* ) ) );
- return;
+ }
+ }
+ else if( theViewWindow && theViewWindow->inherits( "OCCViewer_ViewFrame" ) )
+ {
+ if( OCCViewer_ViewFrame* aViewFrame = dynamic_cast<OCCViewer_ViewFrame*>( theViewWindow ) )
+ {
+ aViewFrame->onTopView();
}
}
}
void HYDROGUI_Module::onViewPortMouseEvent( QGraphicsSceneMouseEvent* theEvent )
{
+ /* ouv: currently unused
if( GraphicsView_ViewPort* aViewPort = qobject_cast<GraphicsView_ViewPort*>( sender() ) )
{
SUIT_ViewManager* aViewManager = 0;
int aXDeg = 0, aYDeg = 0;
int aXMin = 0, aYMin = 0;
double aXSec = 0, aYSec = 0;
- HYDROGUI_Tool::DoubleToLambert( aMouseX, aXDeg, aXMin, aXSec );
- HYDROGUI_Tool::DoubleToLambert( aMouseY, aYDeg, aYMin, aYSec );
+ HYDROData_Lambert93::secToDMS( aMouseX, aXDeg, aXMin, aXSec );
+ HYDROData_Lambert93::secToDMS( aMouseY, aYDeg, aYMin, aYSec );
QString aDegSymbol( QChar( 0x00B0 ) );
QString aXStr = QString( "%1%2 %3' %4\"" ).arg( aXDeg ).arg( aDegSymbol ).arg( aXMin ).arg( aXSec );
else if( aRole == VMR_TransformImage )
aViewPort->setViewLabelText( QString( "X: %1\nY: %2" ).arg( (int)aMouseX ).arg( (int)aMouseY ) );
}
+ */
}
void HYDROGUI_Module::updateGV( const bool theIsInit,
// currently, all views are updated
ViewManagerMapIterator anIter( myViewManagerMap );
while( anIter.hasNext() )
- {
- int anId = anIter.next().key();
+ {
+ GraphicsView_ViewManager* aViewManager =
+ dynamic_cast<GraphicsView_ViewManager*>( anIter.next().value().first );
+ if ( !aViewManager )
+ continue;
+
+ int anId = anIter.key();
aViewManagerIdList.append( anId );
}
getDisplayer()->UpdateAll( anIdIter.next(), theIsInit, theIsForced );
}
+void HYDROGUI_Module::updateOCCViewer( const bool theIsInit,
+ const bool theIsForced )
+{
+ HYDROGUI_OCCDisplayer* anOCCDisplayer = getOCCDisplayer();
+ if( !anOCCDisplayer )
+ return;
+
+ QList<int> aViewManagerIdList;
+
+ // currently, all views are updated
+ ViewManagerMapIterator anIter( myViewManagerMap );
+ while( anIter.hasNext() )
+ {
+ OCCViewer_ViewManager* aViewManager =
+ ::qobject_cast<OCCViewer_ViewManager*>( anIter.next().value().first );
+ if ( !aViewManager )
+ continue;
+
+ int anId = anIter.key();
+ aViewManagerIdList.append( anId );
+ }
+
+ QListIterator<int> anIdIter( aViewManagerIdList );
+ while( anIdIter.hasNext() )
+ anOCCDisplayer->UpdateAll( anIdIter.next(), theIsInit, theIsForced );
+}
+
void HYDROGUI_Module::createSelector( SUIT_ViewManager* theViewManager )
{
if( !theViewManager )
return;
QString aViewType = theViewManager->getType();
- if( aViewType != GraphicsView_Viewer::Type() )
- return;
-
- GraphicsView_ViewManager* aViewManager =
- dynamic_cast<GraphicsView_ViewManager*>( theViewManager );
- if( !aViewManager )
+ if( aViewType != GraphicsView_Viewer::Type() &&
+ aViewType != OCCViewer_Viewer::Type())
return;
QList<SUIT_Selector*> aSelectorList;
for( anIter = aSelectorList.begin(); anIter != anIterEnd; anIter++ )
{
SUIT_Selector* aSelector = *anIter;
- if( aSelector && !dynamic_cast<HYDROGUI_GVSelector*>( aSelector ) )
+ if( aSelector && ( !dynamic_cast<HYDROGUI_GVSelector*>( aSelector ) &&
+ !dynamic_cast<HYDROGUI_OCCSelector*>( aSelector ) ) )
aSelector->setEnabled( false );
}
- new HYDROGUI_GVSelector( this, aViewManager->getViewer(), aSelectionMgr );
+ if ( aViewType == GraphicsView_Viewer::Type() )
+ {
+ GraphicsView_ViewManager* aViewManager =
+ ::qobject_cast<GraphicsView_ViewManager*>( theViewManager );
+ if( aViewManager )
+ new HYDROGUI_GVSelector( this, aViewManager->getViewer(), aSelectionMgr );
+ }
+ else if ( aViewType == OCCViewer_Viewer::Type() )
+ {
+ OCCViewer_ViewManager* aViewManager =
+ ::qobject_cast<OCCViewer_ViewManager*>( theViewManager );
+ if( aViewManager )
+ new HYDROGUI_OCCSelector( this, aViewManager->getOCCViewer(), aSelectionMgr );
+ }
}
bool HYDROGUI_Module::setUpdateEnabled( const bool theState )