+// Copyright (C) 2007-2014 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
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
#include "SOCC_ViewModel.h"
#include "SOCC_Prs.h"
#include "SOCC_ViewWindow.h"
+#include "OCCViewer_Trihedron.h"
+
#include "SUIT_Session.h"
-#include "SUIT_Application.h"
+#include "SUIT_ResourceMgr.h"
+//#include "SUIT_Application.h"
-#include "ToolsGUI.h"
+//#include "ToolsGUI.h"
-#include <SALOMEconfig.h>
-#include CORBA_CLIENT_HEADER(SALOMEDS)
+// Temporarily commented to avoid awful dependecy on SALOMEDS
+// TODO: better mechanism of storing display/erse status in a study
+// should be provided...
+//#include <SALOMEconfig.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>
-#include <Utils_ORB_INIT.hxx>
-#include <Utils_SINGLETON.hxx>
-#include <SALOME_ModuleCatalog_impl.hxx>
-#include <SALOME_NamingService.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 "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.
-static _PTR(Study) getStudyDS()
-{
- SALOMEDSClient_Study* aStudy = NULL;
- _PTR(StudyManager) aMgr( new SALOMEDS_StudyManager() );
+// 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
+// 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 );
-}
+// return aMgr->GetStudyByID( id );
+//}
+/*!
+ Constructor
+ \param DisplayTrihedron - is trihedron displayed
+*/
SOCC_Viewer::SOCC_Viewer( bool DisplayTrihedron )
: OCCViewer_Viewer( DisplayTrihedron )
{
}
+/*!
+ Destructor
+*/
SOCC_Viewer::~SOCC_Viewer()
{
}
+/*!
+ Hilights/unhilights object in viewer
+ \param obj - object to be updated
+ \param hilight - if it is true, object will be hilighted, otherwise it will be unhilighted
+ \param update - update current viewer
+*/
bool SOCC_Viewer::highlight( const Handle(SALOME_InteractiveObject)& obj,
bool hilight, bool upd )
{
{
if ( !isInLocal )
OCCViewer_Viewer::highlight( ite.Value(), hilight, false );
- // highlight subshapes only when local selection is active
+ // highlight sub-shapes only when local selection is active
else
{
/*if ( ite.Value()->IsKind( STANDARD_TYPE( SALOME_AISShape ) ) )
return false;
}
+/*!
+ \return true if object is in viewer or in collector
+ \param obj - object to be checked
+ \param onlyInViewer - search object only in viewer (so object must be displayed)
+*/
bool SOCC_Viewer::isInViewer( const Handle(SALOME_InteractiveObject)& obj,
bool onlyInViewer )
{
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() )
return false;
}
+/*!
+ \return true if object is displayed in viewer
+ \param obj - object to be checked
+*/
bool SOCC_Viewer::isVisible( const Handle(SALOME_InteractiveObject)& obj )
{
- AIS_ListOfInteractive List;
- getAISContext()->DisplayedObjects( List );
- AIS_ListIteratorOfListOfInteractive ite( List );
- for ( ; ite.More(); ite.Next() )
- {
- Handle(SALOME_InteractiveObject) anObj =
- Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() );
-
- if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) )
- return getAISContext()->IsDisplayed( ite.Value() );
+ std::map< std::string , std::vector<Handle(AIS_InteractiveObject)> >::iterator it=entry2aisobjects.find(obj->getEntry());
+ if(it != entry2aisobjects.end())
+ {
+ // get context
+ Handle (AIS_InteractiveContext) ic = getAISContext();
+ std::vector<Handle(AIS_InteractiveObject)>& List = it->second;
+ for( unsigned int ind = 0; ind < List.size(); ind++ )
+ {
+ Handle(AIS_InteractiveObject) anAIS=List[ind];
+ if(ic->IsDisplayed(anAIS))
+ return true;
+ }
}
return false;
}
+/*!
+ Sets color of object
+ \param obj - object to be updated
+ \param color - new color
+ \param update - update current viewer
+*/
void SOCC_Viewer::setColor( const Handle(SALOME_InteractiveObject)& obj,
const QColor& color, bool update )
{
- AIS_ListOfInteractive List;
- getAISContext()->DisplayedObjects(List);
-
- AIS_ListIteratorOfListOfInteractive ite(List);
- for ( ; ite.More(); ite.Next() )
- {
- Handle(SALOME_InteractiveObject) anObj =
- Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() );
+ if(obj.IsNull() || !obj->hasEntry() )
+ return;
- if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) )
+ if(entry2aisobjects.count(obj->getEntry())>0)
{
- OCCViewer_Viewer::setColor( ite.Value(), color, update );
- return;
+ // get context
+ Handle (AIS_InteractiveContext) ic = getAISContext();
+ std::vector<Handle(AIS_InteractiveObject)>& List = entry2aisobjects[obj->getEntry()];
+ for( unsigned int ind = 0; ind < List.size(); ind++ )
+ {
+ Handle(AIS_InteractiveObject) anAIS=List[ind];
+ if( !anAIS.IsNull() && ic->IsDisplayed(anAIS))
+ OCCViewer_Viewer::setColor( anAIS, color, update );
+ }
}
- }
}
+/*!
+ Changes display mode of object
+ \param obj - object to be processed
+ \param mode - new display mode
+ \param update - update current viewer
+*/
void SOCC_Viewer::switchRepresentation( const Handle(SALOME_InteractiveObject)& obj,
int mode, bool update )
{
- AIS_ListOfInteractive List;
- getAISContext()->DisplayedObjects(List);
-
- AIS_ListIteratorOfListOfInteractive ite(List);
- for ( ; ite.More(); ite.Next() )
- {
- Handle(SALOME_InteractiveObject) anObj =
- Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() );
+ if(obj.IsNull() || !obj->hasEntry() )
+ return;
- if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) )
+ if(entry2aisobjects.count(obj->getEntry())>0)
{
- OCCViewer_Viewer::switchRepresentation( ite.Value(), mode, update );
- return;
+ // get context
+ Handle (AIS_InteractiveContext) ic = getAISContext();
+ std::vector<Handle(AIS_InteractiveObject)>& List = entry2aisobjects[obj->getEntry()];
+ for( unsigned int ind = 0; ind < List.size(); ind++ )
+ {
+ Handle(AIS_InteractiveObject) anAIS=List[ind];
+ if( !anAIS.IsNull() && ic->IsDisplayed(anAIS))
+ OCCViewer_Viewer::switchRepresentation( anAIS, mode, update );
+ }
}
- }
}
+/*!
+ Changes transparency of object
+ \param obj - object to be processed
+ \param trans - new transparency
+ \param update - update current viewer
+*/
void SOCC_Viewer::setTransparency( const Handle(SALOME_InteractiveObject)& obj,
float trans, bool update )
{
- AIS_ListOfInteractive List;
- getAISContext()->DisplayedObjects( List );
-
- AIS_ListIteratorOfListOfInteractive ite( List );
- for ( ; ite.More(); ite.Next() )
- {
- Handle(SALOME_InteractiveObject) anObj =
- Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() );
+ if(obj.IsNull() || !obj->hasEntry() )
+ return;
- if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) )
+ if(entry2aisobjects.count(obj->getEntry())>0)
{
- OCCViewer_Viewer::setTransparency( ite.Value(), trans, update );
- return;
+ // get context
+ Handle (AIS_InteractiveContext) ic = getAISContext();
+ std::vector<Handle(AIS_InteractiveObject)>& List = entry2aisobjects[obj->getEntry()];
+ for( unsigned int ind = 0; ind < List.size(); ind++ )
+ {
+ Handle(AIS_InteractiveObject) anAIS=List[ind];
+ if( !anAIS.IsNull() && ic->IsDisplayed(anAIS))
+ OCCViewer_Viewer::setTransparency( anAIS, trans, update );
+ }
}
- }
}
+/*!
+ Changes name of object
+ \param obj - object to be renamed
+ \param name - new name
+*/
void SOCC_Viewer::rename( const Handle(SALOME_InteractiveObject)& obj,
const QString& name )
{
Handle(SALOME_InteractiveObject) IO = aSh->getIO();
if ( IO->isSame( obj ) )
{
- aSh->setName( (char*)name.latin1() );
+ aSh->setName( name.toLatin1().data() );
break;
}
}
}
}
-//=======================================================================
-// name : Display
-// Purpose : Display presentation
-//=======================================================================
+
+/*!
+ Display presentation
+ \param prs - presentation
+*/
void SOCC_Viewer::Display( const SALOME_OCCPrs* prs )
{
// try do downcast object
return;
// get SALOMEDS Study
- _PTR(Study) study(getStudyDS());
+ // 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();
- // get all displayed objects
- AIS_ListOfInteractive List;
- ic->DisplayedObjects( List );
- // get objects in the collector
- AIS_ListOfInteractive ListCollector;
- ic->ObjectsInCollector( ListCollector );
-
// get objects to be displayed
AIS_ListOfInteractive anAISObjects;
anOCCPrs->GetObjects( anAISObjects );
if ( !anAIS.IsNull() )
{
// try to find presentation in the viewer
- bool bDisplayed = false;
- AIS_ListIteratorOfListOfInteractive ite( List );
- for ( ; ite.More(); ite.Next() )
- {
- // compare presentations by handles
- // if the object is already displayed - nothing to do more
- if ( ite.Value() == anAIS )
+
+ // if the object is already displayed - nothing to do more
+ if(ic->IsDisplayed(anAIS))
{
// Deactivate object if necessary
if ( !anOCCPrs->ToActivate() )
ic->Deactivate( anAIS );
- bDisplayed = true;
- break;
+ continue;
}
- }
-
- if ( bDisplayed )
- continue;
+#if OCC_VERSION_LARGE <= 0x06060000
// then try to find presentation in the collector
- bDisplayed = false;
- ite.Initialize( ListCollector );
- for ( ; ite.More(); ite.Next() )
- {
- // compare presentations by handles
- // if the object is in collector - display it
- if ( ite.Value() == anAIS )
+ if(ic->IsInCollector(anAIS))
{
ic->DisplayFromCollector( anAIS, false );
-
// Deactivate object if necessary
if ( !anOCCPrs->ToActivate() )
ic->Deactivate( anAIS );
- bDisplayed = true;
// Set visibility flag
- Handle(SALOME_InteractiveObject) anObj =
- Handle(SALOME_InteractiveObject)::DownCast( anAIS->GetOwner() );
- if ( !anObj.IsNull() && anObj->hasEntry() )
- {
- if ( study )
- ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this );
- }
-
- break;
+ // 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;
}
- }
- if ( bDisplayed )
- continue;
-
+#endif
// if object is not displayed and not found in the collector - display it
if ( anAIS->IsKind( STANDARD_TYPE(AIS_Trihedron) ) )
{
Handle(AIS_Trihedron) aTrh = Handle(AIS_Trihedron)::DownCast( anAIS );
double aNewSize = 100, aSize = 100;
- getTrihedronSize( aNewSize, aSize );
+ computeTrihedronSize( aNewSize, aSize );
aTrh->SetSize( aTrh == getTrihedron() ? aNewSize : 0.5 * aNewSize );
}
ic->Display( anAIS, false );
-
- // Set visibility flag
- Handle(SALOME_InteractiveObject) anObj =
- Handle(SALOME_InteractiveObject)::DownCast( anAIS->GetOwner() );
- if ( !anObj.IsNull() && anObj->hasEntry() )
+ Handle(SALOME_AISShape) aSh = Handle(SALOME_AISShape)::DownCast (anAIS);
+ if (!aSh.IsNull())
{
- if ( study )
- ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this );
+ 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) anObj = Handle(SALOME_InteractiveObject)::DownCast( anAIS->GetOwner() );
+ if ( !anObj.IsNull() && anObj->hasEntry())
+ {
+ std::vector<Handle(AIS_InteractiveObject)>& List = entry2aisobjects[anObj->getEntry()];
+ int found=0;
+ for ( unsigned int ind = 0; ind < List.size(); ind++ )
+ {
+ if(List[ind] == anAIS)
+ {
+ found=1;
+ break;
+ }
+ }
+ if(!found)
+ {
+ List.push_back(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 );
+ //}
+
// Deactivate object if necessary
if ( !anOCCPrs->ToActivate() )
ic->Deactivate( anAIS );
}
}
+ updateTrihedron();
}
-//=======================================================================
-// name : Erase
-// Purpose : Erase presentation
-//=======================================================================
+
+/*!
+ Erase presentation
+ \param prs - presentation
+ \param forced - removes object from context
+*/
void SOCC_Viewer::Erase( const SALOME_OCCPrs* prs, const bool forced )
{
// try do downcast object
return;
// get SALOMEDS Study
- _PTR(Study) study(getStudyDS());
+ // 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
- if ( !forced )
- {
- Handle(SALOME_InteractiveObject) anObj =
- Handle(SALOME_InteractiveObject)::DownCast( anAIS->GetOwner() );
- if ( !anObj.IsNull() && anObj->hasEntry() )
- {
- if ( study )
- ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this );
- }
- }
+ // Temporarily commented to avoid awful dependecy on SALOMEDS
+ // TODO: better mechanism of storing display/erse status in a study
+ // should be provided...
+ //if ( !forced )
+ //{
+ // Handle(SALOME_InteractiveObject) anObj =
+ // Handle(SALOME_InteractiveObject)::DownCast( anAIS->GetOwner() );
+ // if ( !anObj.IsNull() && anObj->hasEntry() )
+ // {
+ // if ( study )
+ // ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this );
+ // }
+ //}
}
}
+ updateTrihedron();
}
-//=======================================================================
-// name : EraseAll
-// Purpose : Erase all presentations
-//=======================================================================
+
+/*!
+ Erase all presentations
+ \param forced - removes all objects from context
+*/
void SOCC_Viewer::EraseAll( const bool forced )
{
// get SALOMEDS Study
- _PTR(Study) study(getStudyDS());
+ // 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 ) )
+ if ( (isTrihedronDisplayed && anIter.Value()->DynamicType() == STANDARD_TYPE( AIS_Trihedron )) ||
+ anIter.Value()->DynamicType() == STANDARD_TYPE( OCCViewer_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
- if ( !forced ) {
- Handle(SALOME_InteractiveObject) anObj =
- Handle(SALOME_InteractiveObject)::DownCast( anIO->GetOwner() );
-
- if ( !anObj.IsNull() && anObj->hasEntry() ) {
- if ( study )
- ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this );
- }
- }
+ // Temporarily commented to avoid awful dependecy on SALOMEDS
+ // TODO: better mechanism of storing display/erse status in a study
+ // should be provided...
+ //if ( !forced ) {
+ // Handle(SALOME_InteractiveObject) anObj =
+ // Handle(SALOME_InteractiveObject)::DownCast( anIO->GetOwner() );
+
+ // if ( !anObj.IsNull() && anObj->hasEntry() ) {
+ // if ( study )
+ // ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this );
+ // }
+ //}
}
- // display trihedron if necessary
- if ( isTrihedronDisplayed )
- getAISContext()->Display( getTrihedron() );
- else
- Repaint();
+ Repaint();
+ updateTrihedron();
}
-//=======================================================================
-// name : CreatePrs
-// Purpose : Create presentation corresponding to the entry
-//=======================================================================
+/*!
+ Create presentation corresponding to the entry
+ \param entry - entry
+*/
SALOME_Prs* SOCC_Viewer::CreatePrs( const char* entry )
{
SOCC_Prs* prs = new SOCC_Prs();
if ( entry )
{
- // get context
- Handle(AIS_InteractiveContext) ic = getAISContext();
-
- // get displayed objects
- AIS_ListOfInteractive List;
- ic->DisplayedObjects( List );
- // get objects in the collector
- AIS_ListOfInteractive ListCollector;
- ic->ObjectsInCollector( ListCollector );
- List.Append( ListCollector );
-
- AIS_ListIteratorOfListOfInteractive ite( List );
- for ( ; ite.More(); ite.Next() )
- {
- Handle(SALOME_InteractiveObject) anObj =
- Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() );
-
- if ( !anObj.IsNull() && anObj->hasEntry() && strcmp( anObj->getEntry(), entry ) == 0 )
- prs->AddObject( ite.Value() );
- }
+ if(entry2aisobjects.count(entry)>0)
+ {
+ //ais object exists
+ std::vector<Handle(AIS_InteractiveObject)> List = entry2aisobjects[entry];
+ // get context
+ Handle(AIS_InteractiveContext) ic = getAISContext();
+ //add all ais
+ 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
+ )
+ {
+ prs->AddObject( anAIS );
+ }
+ }
+ }
}
return prs;
}
-//=======================================================================
-// name : LocalSelection
-// Purpose : Activates selection of sub shapes
-//=======================================================================
+/*!
+ Activates selection of sub-shapes
+*/
void SOCC_Viewer::LocalSelection( const SALOME_OCCPrs* thePrs, const int theMode )
{
Handle(AIS_InteractiveContext) ic = getAISContext();
}
}
-//=======================================================================
-// name : GlobalSelection
-// Purpose : Deactivates selection of sub shapes
-//=======================================================================
+/*!
+ Deactivates selection of sub-shapes
+*/
void SOCC_Viewer::GlobalSelection( const bool update ) const
{
Handle(AIS_InteractiveContext) ic = getAISContext();
}
}
-//=======================================================================
-// name : BeforeDisplay
-// Purpose : Axiluary method called before displaying of objects
-//=======================================================================
-void SOCC_Viewer::BeforeDisplay( SALOME_Displayer* d )
-{
- d->BeforeDisplay( this, SALOME_OCCViewType() );
-}
-
-//=======================================================================
-// name : AfterDisplay
-// Purpose : Axiluary method called after displaying of objects
-//=======================================================================
-void SOCC_Viewer::AfterDisplay( SALOME_Displayer* d )
-{
- d->AfterDisplay( this, SALOME_OCCViewType() );
-}
-//=======================================================================
-// name : getTrihedronSize
-// Purpose : Get new and current trihedron size corresponding to the
-// current model size
-//=======================================================================
-bool SOCC_Viewer::getTrihedronSize( double& theNewSize, double& theSize )
+/*!
+ \Collect objects visible in viewer
+ \param theList - visible objects collection
+*/
+void SOCC_Viewer::GetVisible( SALOME_ListIO& theList )
{
- theNewSize = 100;
- theSize = 100;
-
- //SRN: BUG IPAL8996, a usage of method ActiveView without an initialization
- Handle(V3d_Viewer) viewer = getViewer3d();
- viewer->InitActiveViews();
- if(!viewer->MoreActiveViews()) return false;
-
- Handle(V3d_View) view3d = viewer->ActiveView();
- //SRN: END of fix
-
- if ( view3d.IsNull() )
- return false;
-
- double Xmin = 0, Ymin = 0, Zmin = 0, Xmax = 0, Ymax = 0, Zmax = 0;
- double aMaxSide;
-
- view3d->View()->MinMaxValues( Xmin, Ymin, Zmin, Xmax, Ymax, Zmax );
-
- if ( Xmin == RealFirst() || Ymin == RealFirst() || Zmin == RealFirst() ||
- Xmax == RealLast() || Ymax == RealLast() || Zmax == RealLast() )
- return false;
-
- aMaxSide = Xmax - Xmin;
- if ( aMaxSide < Ymax -Ymin ) aMaxSide = Ymax -Ymin;
- if ( aMaxSide < Zmax -Zmin ) aMaxSide = Zmax -Zmin;
-
- float aSizeInPercents = SUIT_Session::session()->resourceMgr()->doubleValue("Viewer","TrihedronSize", 105.);
-
- static float EPS = 5.0E-3;
- theSize = getTrihedron()->Size();
- theNewSize = aMaxSide*aSizeInPercents / 100.0;
+ AIS_ListOfInteractive List;
+ getAISContext()->DisplayedObjects(List);
+
+ AIS_ListIteratorOfListOfInteractive ite(List);
+ for ( ; ite.More(); ite.Next() )
+ {
+ Handle(SALOME_InteractiveObject) anObj =
+ Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() );
- return fabs( theNewSize - theSize ) > theSize * EPS ||
- fabs( theNewSize - theSize) > theNewSize * EPS;
+ if ( !anObj.IsNull() && anObj->hasEntry() )
+ theList.Append( anObj );
+ }
}
-//=======================================================================
-// name : Repaint
-// Purpose :
-//=======================================================================
+/*!
+ Updates current viewer
+*/
void SOCC_Viewer::Repaint()
{
// onAdjustTrihedron();
getViewer3d()->Update();
}
-//=======================================================================
-// name : createView
-// Purpose : create SOCC_ViewWindow
-//=======================================================================
-SUIT_ViewWindow* SOCC_Viewer::createView( SUIT_Desktop* theDesktop )
+
+/*!
+ create SOCC_ViewWindow
+*/
+/*SUIT_ViewWindow* SOCC_Viewer::createView( SUIT_Desktop* theDesktop )
{
SOCC_ViewWindow* view = new SOCC_ViewWindow(theDesktop, this);
- initView( view );
+ //initView( view );
+ initView( view->getView(OCCViewer_ViewFrame::MAIN_VIEW) );
return view;
+ }*/
+
+/*
+ * Returns a new OCCViewer_ViewWindow instance which will be placed as a sub window in ViewFrame
+ */
+OCCViewer_ViewWindow* SOCC_Viewer::createSubWindow()
+{
+ return new SOCC_ViewWindow( 0, this);
}