-// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
#include "SOCC_Prs.h"
#include "SOCC_ViewWindow.h"
-#include "OCCViewer_Trihedron.h"
-
#include "SUIT_Session.h"
#include "SUIT_ResourceMgr.h"
//#include "SUIT_Application.h"
//#include CORBA_CLIENT_HEADER(SALOMEDS)
#include <AIS_ListIteratorOfListOfInteractive.hxx>
-#include <Visual3d_View.hxx>
#include <SALOME_AISShape.hxx>
#include <SALOME_AISObject.hxx>
#include <SALOME_InteractiveObject.hxx>
#include <SALOME_ListIO.hxx>
-// Temporarily commented to avoid awful dependecy on SALOMEDS
-// TODO: better mechanism of storing display/erse status in a study
-// should be provided...
-//#include <Utils_ORB_INIT.hxx>
-//#include <Utils_SINGLETON.hxx>
-//#include <SALOME_ModuleCatalog_impl.hxx>
-//#include <SALOME_NamingService.hxx>
-
-//#include "SALOMEDSClient.hxx"
-//#include "SALOMEDS_StudyManager.hxx"
-#include <Basics_OCCTVersion.hxx>
-
#include <AIS_TypeOfIso.hxx>
#include <Precision.hxx>
-// in order NOT TO link with SalomeApp, here the code returns SALOMEDS_Study.
-// SalomeApp_Study::studyDS() does it as well, but -- here it is retrieved from
-// SALOMEDS::StudyManager - no linkage with SalomeApp.
-
-// Temporarily commented to avoid awful dependecy on SALOMEDS
-// TODO: better mechanism of storing display/erse status in a study
-// should be provided...
-//static _PTR(Study) getStudyDS()
-//{
-// SALOMEDSClient_Study* aStudy = NULL;
-// _PTR(StudyManager) aMgr( new SALOMEDS_StudyManager() );
-
- // get id of SUIT_Study, if it's a SalomeApp_Study, it will return
- // id of its underlying SALOMEDS::Study
-// SUIT_Application* app = SUIT_Session::session()->activeApplication();
-// if ( !app ) return _PTR(Study)(aStudy);
-// SUIT_Study* stud = app->activeStudy();
-// if ( !stud ) return _PTR(Study)(aStudy);
-// const int id = stud->id(); // virtual method, must return SALOMEDS_Study id
- // get SALOMEDS_Study with this id from StudyMgr
-// return aMgr->GetStudyByID( id );
-//}
+#include <algorithm>
/*!
Constructor
{
AIS_ListOfInteractive List;
getAISContext()->DisplayedObjects(List);
-
-#if OCC_VERSION_LARGE <= 0x06060000
- if( !onlyInViewer ) {
- AIS_ListOfInteractive List1;
- getAISContext()->ObjectsInCollector(List1);
- List.Append(List1);
-}
-#endif
-
-
AIS_ListIteratorOfListOfInteractive ite(List);
for ( ; ite.More(); ite.Next() )
{
Handle(SALOME_InteractiveObject) IO = aSh->getIO();
if ( IO->isSame( obj ) )
{
- aSh->setName( name.toLatin1().data() );
+ aSh->setName( name.toUtf8().data() );
break;
}
}
if ( !anOCCPrs || anOCCPrs->IsNull() )
return;
- // get SALOMEDS Study
- // Temporarily commented to avoid awful dependecy on SALOMEDS
- // TODO: better mechanism of storing display/erse status in a study
- // should be provided...
- // _PTR(Study) study(getStudyDS());
-
// get context
Handle (AIS_InteractiveContext) ic = getAISContext();
continue;
}
-#if OCC_VERSION_LARGE <= 0x06060000
- // then try to find presentation in the collector
- if(ic->IsInCollector(anAIS))
- {
- ic->DisplayFromCollector( anAIS, false );
- // Deactivate object if necessary
- if ( !anOCCPrs->ToActivate() )
- ic->Deactivate( anAIS );
-
- // Set visibility flag
- // Temporarily commented to avoid awful dependecy on SALOMEDS
- // TODO: better mechanism of storing display/erse status in a study
- // should be provided...
- //Handle(SALOME_InteractiveObject) anObj =
- // Handle(SALOME_InteractiveObject)::DownCast( anAIS->GetOwner() );
- //if ( !anObj.IsNull() && anObj->hasEntry() )
- //{
- // if ( study )
- // ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this );
- //}
- continue;
- }
-#endif
// if object is not displayed and not found in the collector - display it
if ( anAIS->IsKind( STANDARD_TYPE(AIS_Trihedron) ) )
{
{
aSh->SetClippable (prs->IsClippable());
applyExistingClipPlanesToObject (anAIS);
-#if OCC_VERSION_LARGE > 0x06050200
bool top = (aSh->isTopLevel() && aSh->switchTopLevel());
ic->SetZLayer( aSh, top ? getTopLayerId() : 0 );
if(!aSh->toActivate())
{
ic->Deactivate( aSh );
}
-#endif
}
//Register anAIS (if it has an entry) in entry2aisobjects map
// Handle(SALOME_InteractiveObject)::DownCast( anAIS->GetOwner() );
//if ( !anObj.IsNull() && anObj->hasEntry() )
//{
- // if ( study )
- // ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this );
+ // ToolsGUI::SetVisibility( anObj->getEntry(), true, this );
//}
// Deactivate object if necessary
if ( !anOCCPrs || anOCCPrs->IsNull() )
return;
- // get SALOMEDS Study
- // Temporarily commented to avoid awful dependecy on SALOMEDS
- // TODO: better mechanism of storing display/erse status in a study
- // should be provided...
- // _PTR(Study) study(getStudyDS());
-
// get context
Handle(AIS_InteractiveContext) ic = getAISContext();
Handle(AIS_InteractiveObject) anAIS = aIter.Value();
if ( !anAIS.IsNull() ) {
// erase the object from context : move it to collector
-#if OCC_VERSION_LARGE <= 0x06060000
- ic->Erase( anAIS, false, forced ? false : true );
-#else
ic->Erase( anAIS, false );
-#endif
// Set visibility flag if necessary
// Temporarily commented to avoid awful dependecy on SALOMEDS
// TODO: better mechanism of storing display/erse status in a study
// Handle(SALOME_InteractiveObject)::DownCast( anAIS->GetOwner() );
// if ( !anObj.IsNull() && anObj->hasEntry() )
// {
- // if ( study )
- // ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this );
+ // ToolsGUI::SetVisibility( anObj->getEntry(), true, this );
// }
//}
}
Erase all presentations
\param forced - removes all objects from context
*/
-void SOCC_Viewer::EraseAll( const bool forced )
+void SOCC_Viewer::EraseAll( SALOME_Displayer* d, const bool forced )
{
- // get SALOMEDS Study
- // Temporarily commented to avoid awful dependecy on SALOMEDS
- // TODO: better mechanism of storing display/erse status in a study
- // should be provided...
- // _PTR(Study) study(getStudyDS());
-
// get context
Handle(AIS_InteractiveContext) ic = getAISContext();
ic->DisplayedObjects( aList );
AIS_ListIteratorOfListOfInteractive anIter( aList );
for ( ; anIter.More(); anIter.Next() ) {
- if ( (isTrihedronDisplayed && anIter.Value()->DynamicType() == STANDARD_TYPE( AIS_Trihedron )) ||
- anIter.Value()->DynamicType() == STANDARD_TYPE( OCCViewer_Trihedron ))
+ if ( (isTrihedronDisplayed && anIter.Value()->DynamicType() == STANDARD_TYPE( AIS_Trihedron ) ) )
continue;
// erase an object
Handle(AIS_InteractiveObject) anIO = anIter.Value();
-#if OCC_VERSION_LARGE <= 0x06060000
- ic->Erase( anIO, false, forced ? false : true );
-#else
ic->Erase( anIO, false );
-#endif
// Set visibility flag if necessary
// Temporarily commented to avoid awful dependecy on SALOMEDS
// Handle(SALOME_InteractiveObject)::DownCast( anIO->GetOwner() );
// if ( !anObj.IsNull() && anObj->hasEntry() ) {
- // if ( study )
- // ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this );
+ // ToolsGUI::SetVisibility( anObj->getEntry(), true, this );
// }
//}
}
+ SALOME_View::EraseAll( d, forced );
+
Repaint();
updateTrihedron();
}
*/
SALOME_Prs* SOCC_Viewer::CreatePrs( const char* entry )
{
- SOCC_Prs* prs = new SOCC_Prs();
+ SOCC_Prs* prs = new SOCC_Prs(entry);
if ( entry )
{
if(entry2aisobjects.count(entry)>0)
for ( unsigned int ind = 0; ind < List.size(); ind++ )
{
Handle(AIS_InteractiveObject) anAIS=List[ind];
- if(ic->IsDisplayed(anAIS)
-#if OCC_VERSION_LARGE <= 0x06060000
- || ic->IsInCollector(anAIS)
-#endif
- )
+ if(ic->IsDisplayed(anAIS))
{
prs->AddObject( anAIS );
}
/*!
Activates selection of sub-shapes
*/
-void SOCC_Viewer::LocalSelection( const SALOME_OCCPrs* thePrs, const int theMode )
+void SOCC_Viewer::LocalSelection( const SALOME_OCCPrs* thePrs, const std::list<int> modes )
{
Handle(AIS_InteractiveContext) ic = getAISContext();
bool allObjects = thePrs == 0 || thePrs->IsNull();
if ( !ic->HasOpenedContext() ) {
ic->ClearCurrents( false );
- ic->OpenLocalContext( allObjects, true, true );
+ ic->OpenLocalContext( Standard_False, Standard_True, Standard_True );
}
AIS_ListOfInteractive anObjs;
else
anOCCPrs->GetObjects( anObjs );
+ std::list<int> sel_modes;
+ for ( int i = TopAbs_COMPOUND; i < TopAbs_SHAPE; i++ )
+ if ( std::find(modes.begin(), modes.end(), (int)TopAbs_SHAPE) != modes.end() || std::find(modes.begin(), modes.end(), i) != modes.end())
+ sel_modes.push_back(i);
+
// Activate selection of objects from prs
AIS_ListIteratorOfListOfInteractive aIter( anObjs );
for ( ; aIter.More(); aIter.Next() ) {
Handle(AIS_InteractiveObject) anAIS = aIter.Value();
if ( !anAIS.IsNull() )
{
+ std::list<int>::const_iterator it;
if ( anAIS->IsKind( STANDARD_TYPE( AIS_Shape ) ) )
{
ic->Load( anAIS, -1, false );
- ic->Activate( anAIS, AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)theMode ) );
+ for( it = sel_modes.begin(); it != sel_modes.end(); ++it )
+ ic->Activate( anAIS, AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)*it ) );
}
else if ( anAIS->DynamicType() != STANDARD_TYPE(AIS_Trihedron) )
{
ic->Load( anAIS, -1, false );
- ic->Activate( anAIS, theMode );
+ for( it = sel_modes.begin(); it != sel_modes.end(); ++it )
+ ic->Activate( anAIS, *it );
}
}
}
}
+/*!
+ Activates selection of sub-shapes
+*/
+void SOCC_Viewer::LocalSelection( const SALOME_OCCPrs* thePrs, const int theMode )
+{
+ std::list<int> modes;
+ modes.push_back( theMode );
+ LocalSelection( thePrs, modes );
+}
+
/*!
Deactivates selection of sub-shapes
*/