-// Copyright (C) 2007-2013 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
// 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.
+// 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
#include <LightApp_SelectionMgr.h>
#include <LightApp_DataOwner.h>
#include <SalomeApp_Tools.h>
-#include <SALOME_ListIteratorOfListIO.hxx>
+#include <SALOME_ListIO.hxx>
+#include "utilities.h"
#include <SALOME_Prs.h>
+#include "utilities.h"
#include <OCCViewer_ViewModel.h>
#include <SVTK_ViewModel.h>
-#include <TColStd_MapOfInteger.hxx>
#include <TCollection_AsciiString.hxx>
#include <TColStd_IndexedMapOfInteger.hxx>
// Purpose :
//================================================================
GEOMBase_Helper::GEOMBase_Helper( SUIT_Desktop* desktop )
- : myDesktop( desktop ), myViewWindow( 0 ), myDisplayer( 0 ), myCommand( 0 ), isPreview( false ),
+ : myDisplayer( 0 ), myCommand( 0 ), myViewWindow( 0 ), isPreview( false ), myDesktop( desktop ),
myIsApplyAndClose( false ), myIsOptimizedBrowsing( false ), myIsWaitCursorEnabled( true ),
myIsDisableBrowsing(false), myIsDisplayResult(true)
{
const bool toRemoveFromEngine,
const double lineWidth,
const int displayMode,
- const int color )
+ const int color,
+ const bool append )
{
if(!display) {
erasePreview( update );
return;
}
- erasePreview( false );
+ if( !append )
+ erasePreview( false );
try {
SUIT_OverrideCursor wc;
SALOME_Prs* aPrs = getDisplayer()->BuildPrs( object );
if ( aPrs == 0 || aPrs->IsNull() )
return;
+
+ // Make preview not clippable
+ aPrs->SetClippable (false);
// Display prs
displayPreview( aPrs, append, update );
SUIT_ViewModel* aViewModel = aViewManager->getViewModel();
SALOME_View* aView = dynamic_cast<SALOME_View*>(aViewModel);
if (aView)
- aView->Display( prs );
+ aView->Display( getDisplayer(), prs );
}
// Add prs to the preview list
// check view frame where the preview was displayed
bool vfOK = checkViewWindow() && myViewWindow;
// Iterate through presentations and delete them
- for ( PrsList::iterator anIter = myPreview.begin(); anIter != myPreview.end(); ++anIter ) {
+ for ( PrsList::iterator anIter = myPreview.begin(); anIter != myPreview.end(); ++anIter )
+ {
if ( vfOK )
+ {
+ SUIT_ViewManager* aViewManager = myViewWindow->getViewManager();
+ if ( aViewManager->getType() == OCCViewer_Viewer::Type() ||
+ aViewManager->getType() == SVTK_Viewer::Type() )
{
- SUIT_ViewManager* aViewManager = myViewWindow->getViewManager();
- if ( aViewManager->getType() == OCCViewer_Viewer::Type() ||
- aViewManager->getType() == SVTK_Viewer::Type() )
- {
- SUIT_ViewModel* aViewModel = aViewManager->getViewModel();
- SALOME_View* aView = dynamic_cast<SALOME_View*>(aViewModel);
- if (aView)
- aView->Erase( *anIter, true );
- }
+ SUIT_ViewModel* aViewModel = aViewManager->getViewModel();
+ SALOME_View* aView = dynamic_cast<SALOME_View*>(aViewModel);
+ if (aView)
+ aView->Erase( getDisplayer(), *anIter, true );
}
+ }
delete *anIter;
}
myPreview.clear();
//================================================================
// Function : localSelection
// Purpose : Activate selection of sub-shapes in accordance with mode
-// theMode is from TopAbs_ShapeEnum
+// modes are from TopAbs_ShapeEnum
//================================================================
-void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMode )
+void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const std::list<int> modes )
{
SALOME_ListIO aListOfIO;
anEntry.toLatin1().constData(), "GEOM", strdup( GEOMBase::GetName( anObj ).toLatin1().constData() ) ) );
}
- getDisplayer()->LocalSelection( aListOfIO, theMode );
+ getDisplayer()->LocalSelection( aListOfIO, modes );
}
//================================================================
// Purpose : Activate selection of sub-shapes in accordance with mode
// theMode is from TopAbs_ShapeEnum
//================================================================
-void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const int mode )
+void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMode )
+{
+ std::list<int> modes;
+ modes.push_back( theMode );
+ localSelection( theObjs, modes );
+}
+
+//================================================================
+// Function : localSelection
+// Purpose : Activate selection of sub-shapes in accordance with mode
+// modes are from TopAbs_ShapeEnum
+//================================================================
+void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const std::list<int> modes )
{
// If object is null local selection for all objects is activated
if ( obj->_is_nil() ) {
- getDisplayer()->LocalSelection( Handle(SALOME_InteractiveObject)(), mode );
+ getDisplayer()->LocalSelection( Handle(SALOME_InteractiveObject)(), modes );
return;
}
ObjectList objList;
objList.push_back( obj );
- localSelection( objList, mode );
+ localSelection( objList, modes );
}
+//================================================================
+// Function : localSelection
+// Purpose : Activate selection of sub-shapes in accordance with mode
+// mode is from TopAbs_ShapeEnum
+//================================================================
+void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const int mode )
+{
+ std::list<int> modes;
+ modes.push_back( mode );
+ localSelection( obj, modes );
+}
+
+//================================================================
+// Function : localSelection
+// Purpose : Activate selection of sub-shapes in accordance with mode
+// modes are from TopAbs_ShapeEnum
+//================================================================
+void GEOMBase_Helper::localSelection( const std::list<int> modes )
+{
+ localSelection( GEOM::GEOM_Object::_nil(), modes );
+}
+
+//================================================================
+// Function : localSelection
+// Purpose : Activate selection of sub-shapes in accordance with mode
+// mode is from TopAbs_ShapeEnum
+//================================================================
+void GEOMBase_Helper::localSelection( const int mode )
+{
+ std::list<int> modes;
+ modes.push_back( mode );
+ localSelection( modes );
+}
//================================================================
// Function : globalSelection
//================================================================
// Function : onAccept
// Purpose : This method should be called from dialog's slots onOk() and onApply()
-// It perfroms user input validation, then it
+// It performs user input validation, then it
// performs a proper operation and manages transactions, etc.
//================================================================
bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, bool erasePreviewFlag )
showError();
}
else {
+ QList<GEOM::GeomObjPtr> anObjectList = getSourceObjects( );
addSubshapesToStudy(); // add Sub-shapes if local selection
const int nbObjs = objects.size();
QStringList anEntryList;
if ( publish ) {
QString aName = getObjectName(obj);
if (aName.isEmpty()) {
- aName = getNewObjectName(currObj);
- if ( nbObjs > 1 ) {
- if (aName.isEmpty())
- aName = getPrefix(obj);
- if (nbObjs <= 30) {
- // Try to find a unique name
- aName = GEOMBase::GetDefaultName(aName, extractPrefix());
- } else {
- // Don't check name uniqueness in case of numerous objects
- aName = aName + "_" + QString::number(aNumber++);
- }
- } else {
- // PAL6521: use a prefix, if some dialog box doesn't reimplement getNewObjectName()
- if ( aName.isEmpty() )
- aName = GEOMBase::GetDefaultName( getPrefix( obj ) );
- }
+ aName = getNewObjectName(currObj);
+ if ( nbObjs > 1 ) {
+ if (aName.isEmpty())
+ aName = getPrefix(obj);
+ if (nbObjs <= 30) {
+ // Try to find a unique name
+ aName = GEOMBase::GetDefaultName(aName, extractPrefix());
+ } else {
+ // Don't check name uniqueness in case of numerous objects
+ aName = aName + "_" + QString::number(aNumber++);
+ }
+ } else {
+ // PAL6521: use a prefix, if some dialog box doesn't reimplement getNewObjectName()
+ if ( aName.isEmpty() )
+ aName = GEOMBase::GetDefaultName( getPrefix( obj ) );
+ }
}
anEntryList << addInStudy( obj, aName.toLatin1().constData() );
// updateView=false
updateObjBrowser();
if( SUIT_Application* anApp = SUIT_Session::session()->activeApplication() ) {
LightApp_Application* aLightApp = dynamic_cast<LightApp_Application*>( anApp );
- if(aLightApp && !isDisableBrowsing() )
- aLightApp->browseObjects( anEntryList, isApplyAndClose(), isOptimizedBrowsing() );
+ if(aLightApp) {
+ QString anOpName( typeid(*this).name() );
+ aLightApp->emitOperationFinished( "Geometry", anOpName, anEntryList );
+
+ if ( !isDisableBrowsing() )
+ aLightApp->browseObjects( anEntryList, isApplyAndClose(), isOptimizedBrowsing() );
+ }
anApp->putInfo( QObject::tr("GEOM_PRP_DONE") );
}
+ if ( anObjectList.count() > 0 )
+ hideSourceObjects( anObjectList );
result = true;
}
else
catch( const SALOME::SALOME_Exception& e ) {
SalomeApp_Tools::QtCatchCorbaException( e );
abortCommand();
- MESSAGE("Exception catched")
+ MESSAGE("Exception caught")
}
updateViewer();
int theIndex )
{
GEOM::GEOM_Object_var object;
- bool found = false;
SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
if ( study ) {
_PTR(SObject) sobject( studyDS->FindObjectIOR( IOR.toLatin1().constData() ) );
if ( sobject ) {
_PTR(ChildIterator) it( studyDS->NewChildIterator( sobject ) );
- for ( ; it->More() && !found; it->Next() ) {
+ for ( ; it->More(); it->Next() ) {
GEOM::GEOM_Object_var cobject = GEOM::GEOM_Object::_narrow( GeometryGUI::ClientSObjectToObject( it->Value() ) );
if ( !CORBA::is_nil( cobject ) ) {
GEOM::ListOfLong_var indices = cobject->GetSubShapeIndices();
int length = indices->length();
- for ( int i = 0; i < length && !found; i++ ) {
- if ( indices[i] == theIndex ) {
- object = cobject;
- found = true;
- }
+ // VSR 18/03/2014: we need only sub-shapes with single sub-shape index (to exclude groups, etc)
+ if ( length == 1 && indices[0] == theIndex ) {
+ object = cobject;
+ break;
}
}
}
//Impemented in Dialogs, called from Accept method
}
+//================================================================
+// Function : getSourceObjects
+// Purpose : Virtual method to get source objects
+//================================================================
+QList<GEOM::GeomObjPtr> GEOMBase_Helper::getSourceObjects()
+{
+ //Impemented in Dialogs, called from Accept method
+ QList<GEOM::GeomObjPtr> res;
+ return res;
+}
+
//================================================================
// Function : getSelected
// Purpose : Get selected object by specified type
}
return result;
}
+//================================================================
+// Function : hideSourceObject
+// Purpose :
+//================================================================
+void GEOMBase_Helper::hideSourceObjects( QList<GEOM::GeomObjPtr> theObject )
+{
+ SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+ if ( resMgr->booleanValue( "Geometry", "hide_input_object", true) ) {
+ GEOM_Displayer* aDisplayer = getDisplayer();
+ for ( int i = 0; i < theObject.count(); i++ )
+ aDisplayer->Erase( theObject[i].get() );
+ }
+}
//================================================================
// Function : setIsApplyAndClose