From 3071b4328e1e11482c3eb5af569f2896b007e1de Mon Sep 17 00:00:00 2001 From: sln Date: Tue, 11 Sep 2012 12:28:12 +0000 Subject: [PATCH] Migration of DIAGRAM to 1.7.3 --- src/CAM/CAM_Application.cxx | 2 + src/CAM/Makefile.am | 2 +- src/LightApp/LightApp_Application.cxx | 123 ++++---------------- src/LightApp/LightApp_Application.h | 5 +- src/LightApp/LightApp_Module.cxx | 6 - src/LightApp/LightApp_Module.h | 3 - src/LightApp/resources/LightApp_msg_en.ts | 28 ----- src/LightApp/resources/LightApp_msg_fr.ts | 28 ----- src/Qtx/QtxMultiAction.cxx | 2 +- src/Qtx/QtxSplash.cxx | 2 + src/Qtx/QtxWorkstack.cxx | 2 + src/SUIT/SUIT_DataObject.cxx | 2 + src/SVTK/SALOME_Actor.cxx | 13 +++ src/SVTK/SALOME_Actor.h | 7 ++ src/SVTK/SVTK_Actor.cxx | 2 +- src/SVTK/SVTK_Renderer.cxx | 124 +++++++++++++++++++-- src/SVTK/SVTK_Renderer.h | 32 +++++- src/VTKViewer/VTKViewer_GeometryFilter.cxx | 52 ++++----- 18 files changed, 226 insertions(+), 209 deletions(-) diff --git a/src/CAM/CAM_Application.cxx b/src/CAM/CAM_Application.cxx index 73d7ef787..d70e80840 100755 --- a/src/CAM/CAM_Application.cxx +++ b/src/CAM/CAM_Application.cxx @@ -31,6 +31,8 @@ #include #include +#include + #ifdef WIN32 #include #else diff --git a/src/CAM/Makefile.am b/src/CAM/Makefile.am index 3b80df3f8..44283644a 100755 --- a/src/CAM/Makefile.am +++ b/src/CAM/Makefile.am @@ -49,7 +49,7 @@ nodist_libCAM_la_SOURCES = $(MOC_FILES) nodist_salomeres_DATA = \ CAM_msg_en.qm \ - CAM_msg_en.qm + CAM_msg_fr.qm libCAM_la_CPPFLAGS = $(QT_INCLUDES) -I$(srcdir)/../SUIT -I$(srcdir)/../STD -I$(srcdir)/../Qtx libCAM_la_LDFLAGS = $(QT_MT_LIBS) diff --git a/src/LightApp/LightApp_Application.cxx b/src/LightApp/LightApp_Application.cxx index 02c07a4ee..689a84336 100644 --- a/src/LightApp/LightApp_Application.cxx +++ b/src/LightApp/LightApp_Application.cxx @@ -585,7 +585,6 @@ void LightApp_Application::createActions() // New window int windowMenu = createMenu( tr( "MEN_DESK_WINDOW" ), -1, MenuWindowId, 100 ); int newWinMenu = createMenu( tr( "MEN_DESK_NEWWINDOW" ), windowMenu, -1, 0 ); - int restoreWinMenu = createMenu( tr( "MEN_DESK_RESTORE" ), windowMenu, -1, 0 ); createAction( CloseId, tr( "TOT_CLOSE" ), QIcon(), tr( "MEN_DESK_CLOSE" ), tr( "PRP_CLOSE" ), Qt::SHIFT+Qt::Key_C, desk, false, this, SLOT( onCloseWindow() ) ); @@ -618,17 +617,6 @@ void LightApp_Application::createActions() createActionForViewer( NewGraphicsViewId, newWinMenu, QString::number( 5 ), Qt::ALT+Qt::Key_R ); #endif - createAction( RestoreDefaultId, tr( "TOT_RESTORE_DEFAULT" ), QIcon(), - tr( "MEN_DESK_RESTORE_DEFAULT" ), tr( "PRP_RESTORE_DEFAULT" ), - 0, desk, false, this, SLOT( onRestoreDefault() ) ); - - createAction( RestoreFromPrefsId, tr( "TOT_RESTORE_FROM_PREFERENCES" ), QIcon(), - tr( "MEN_DESK_RESTORE_FROM_PREFERENCES" ), tr( "PRP_RESTORE_FROM_PREFERENCES" ), - 0, desk, false, this, SLOT( onRestoreFromPreferences() ) ); - - createMenu( RestoreDefaultId, restoreWinMenu, -1 ); - createMenu( RestoreFromPrefsId, restoreWinMenu, -1 ); - createAction( RenameId, tr( "TOT_RENAME" ), QIcon(), tr( "MEN_DESK_RENAME" ), tr( "PRP_RENAME" ), Qt::SHIFT+Qt::Key_R, desk, false, this, SLOT( onRenameWindow() ) ); createMenu( RenameId, windowMenu, -1 ); @@ -865,14 +853,6 @@ void LightApp_Application::updateCommandsStatus() if( a ) a->setEnabled( activeStudy() ); #endif - - a = action( RestoreDefaultId ); - if( a ) - a->setEnabled( activeStudy() ); - - a = action( RestoreFromPrefsId ); - if( a ) - a->setEnabled( activeStudy() ); } /*! @@ -2125,14 +2105,27 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) } // Default Module Preferences - int moduleGroup = pref->addPreference( tr( "PREF_DEFAULT_MODULE" ), genTab ); - int moduleNameCombo = pref->addPreference( tr( "PREF_DEF_MODULE_NAME" ), moduleGroup, LightApp_Preferences::Selector, "Activate", "def_module" ); - aValuesList.clear(); - anIndicesList.clear(); - aValuesList << tr("PREF_DEF_MODULE_NONE") << tr("PREF_DEF_MODULE_CATHARE") << tr("PREF_DEF_MODULE_DIAGRAM"); - anIndicesList << 0 << 1 << 2 ; - pref->setItemProperty( "strings", aValuesList, moduleNameCombo ); - pref->setItemProperty( "indexes", anIndicesList, moduleNameCombo ); + QStringList aModuleNames; + modules( aModuleNames, false ); + if ( aModuleNames.count() > 1 ) + { + int moduleGroup = pref->addPreference( tr( "PREF_DEFAULT_MODULE" ), genTab ); + int moduleNameCombo = pref->addPreference( tr( "PREF_DEF_MODULE_NAME" ), moduleGroup, LightApp_Preferences::Selector, "Activate", "def_module" ); + aValuesList.clear(); + anIndicesList.clear(); + aValuesList.append( tr("PREF_DEF_MODULE_NONE") ); + anIndicesList.append( 0 ); + QStringList::iterator it = aModuleNames.begin(); + for ( int ind = 1; it != aModuleNames.end(); ++it, ++ind ) + { + const QString& modName = *it; + aValuesList.append( modName ); + anIndicesList.append( ind ); + } + + pref->setItemProperty( "strings", aValuesList, moduleNameCombo ); + pref->setItemProperty( "indexes", anIndicesList, moduleNameCombo ); + } // theme values Style_Model* aSModel = 0; @@ -2722,13 +2715,13 @@ void LightApp_Application::updateViewManagers() /*! Loads windows geometry */ -void LightApp_Application::loadDockWindowsState( const bool theIsForced ) +void LightApp_Application::loadDockWindowsState() { if ( !desktop() ) return; bool store = resourceMgr()->booleanValue( "Study", "store_positions", true ); - if ( !theIsForced && !store ) + if( !store ) return; QString modName; @@ -3071,76 +3064,6 @@ void LightApp_Application::onGroupAllWindow() wgStack->stack(); } -/*! - Restore default state of application windows -*/ -void LightApp_Application::onRestoreDefault() -{ - if ( !activeStudy() || !desktop() ) - return; - - QMap winMap; - bool restored = false; - - if ( activeModule() && activeModule()->inherits( "LightApp_Module" ) ) - { - ((LightApp_Module*)activeModule())->windows( winMap ); - restored = ((LightApp_Module*)activeModule())->defaultWindowsState(); - } - - if ( !restored ) - { - if( winMap.isEmpty() ) - defaultWindows( winMap ); - - QMap::const_iterator winMapIt = winMap.constBegin(); - for ( ; winMapIt != winMap.constEnd(); ++winMapIt ) - { - QWidget* win = dockWindow( winMapIt.key() ); - QDockWidget* dock = ::qobject_cast( win ); - if ( !dock ) - dock = windowDock( win ); - - if ( dock ) - { - if ( !dock->isVisible() ) - dock->setVisible( true ); - - if ( dock->isFloating() ) - dock->setFloating( false ); - - desktop()->addDockWidget( (Qt::DockWidgetArea)winMapIt.value(), dock ); - } - } - - QList tbList = qFindChildren( desktop() ); - for ( QList::iterator tit = tbList.begin(); tit != tbList.end(); ++tit ) - { - QToolBar* tb = *tit; - - QObject* po = Qtx::findParent( tb, "QMainWindow" ); - if ( po != desktop() ) - continue; - - if ( !tb->isVisible() ) - tb->setVisible( true ); - - desktop()->addToolBar( Qt::TopToolBarArea, tb ); - } - } -} - -/*! - Restore application windows state from preferences file -*/ -void LightApp_Application::onRestoreFromPreferences() -{ - if ( !activeStudy() || !desktop() ) - return; - - loadDockWindowsState( true ); -} - /*! \return if the library of module exists \param moduleTitle - title of module diff --git a/src/LightApp/LightApp_Application.h b/src/LightApp/LightApp_Application.h index 3815ec437..3fe5d6ced 100644 --- a/src/LightApp/LightApp_Application.h +++ b/src/LightApp/LightApp_Application.h @@ -76,7 +76,6 @@ public: enum { RenameId = CAM_Application::UserID, CloseId, CloseAllId, GroupAllId, - RestoreDefaultId, RestoreFromPrefsId, PreferencesId, MRUId, ModulesListId, NewGLViewId, NewPlot2dId, NewOCCViewId, NewVTKViewId, NewQxGraphViewId, NewGraphicsViewId, UserID }; @@ -218,15 +217,13 @@ private slots: void onCloseWindow(); void onCloseAllWindow(); void onGroupAllWindow(); - void onRestoreDefault(); - void onRestoreFromPreferences(); protected: void updateWindows(); void updateViewManagers(); void updateModuleActions(); - void loadDockWindowsState( const bool theIsForced = false ); + void loadDockWindowsState(); void saveDockWindowsState(); virtual void studyOpened( SUIT_Study* ); diff --git a/src/LightApp/LightApp_Module.cxx b/src/LightApp/LightApp_Module.cxx index c9ce91928..332e4a70a 100644 --- a/src/LightApp/LightApp_Module.cxx +++ b/src/LightApp/LightApp_Module.cxx @@ -124,12 +124,6 @@ void LightApp_Module::windows( QMap& ) const { } -/*!NOT IMPLEMENTED*/ -bool LightApp_Module::defaultWindowsState() -{ - return false; -} - /*!NOT IMPLEMENTED*/ void LightApp_Module::viewManagers( QStringList& ) const { diff --git a/src/LightApp/LightApp_Module.h b/src/LightApp/LightApp_Module.h index b97547243..95206ec46 100644 --- a/src/LightApp/LightApp_Module.h +++ b/src/LightApp/LightApp_Module.h @@ -93,9 +93,6 @@ public: virtual QString updateDesktopTitle( const QString& ); // Custom update desktop title - virtual bool defaultWindowsState(); - // Custom restore the default windows state - public slots: virtual bool activateModule( SUIT_Study* ); virtual bool deactivateModule( SUIT_Study* ); diff --git a/src/LightApp/resources/LightApp_msg_en.ts b/src/LightApp/resources/LightApp_msg_en.ts index 6cdfcf194..29985e9ea 100644 --- a/src/LightApp/resources/LightApp_msg_en.ts +++ b/src/LightApp/resources/LightApp_msg_en.ts @@ -533,34 +533,6 @@ CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITASPRP_GROUP_ALL Group all windows - - MEN_DESK_RESTORE - Restore windows &state - - - TOT_RESTORE_DEFAULT - By Default - - - MEN_DESK_RESTORE_DEFAULT - &By Default - - - PRP_RESTORE_DEFAULT - Restore windows state by default - - - TOT_RESTORE_FROM_PREFERENCES - From Preferences - - - MEN_DESK_RESTORE_FROM_PREFERENCES - &From Preferences - - - PRP_RESTORE_FROM_PREFERENCES - Restore windows state from preferences file - ERR_DOC_NOT_EXISTS Can not open %1. diff --git a/src/LightApp/resources/LightApp_msg_fr.ts b/src/LightApp/resources/LightApp_msg_fr.ts index e167be16e..b88a546b7 100755 --- a/src/LightApp/resources/LightApp_msg_fr.ts +++ b/src/LightApp/resources/LightApp_msg_fr.ts @@ -533,34 +533,6 @@ CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITASPRP_GROUP_ALL Grouper toutes les fenêtres - - MEN_DESK_RESTORE - Redimensionner les fenêtres - - - TOT_RESTORE_DEFAULT - Par défaut - - - MEN_DESK_RESTORE_DEFAULT - &Défaut - - - PRP_RESTORE_DEFAULT - Redimensionner les fenêtres par défaut. - - - TOT_RESTORE_FROM_PREFERENCES - Selon les préférences - - - MEN_DESK_RESTORE_FROM_PREFERENCES - &Préférences - - - PRP_RESTORE_FROM_PREFERENCES - Redimensionner les fenêtres selon le fichier de préférences. - ERR_DOC_NOT_EXISTS Impossible d'ouvrir %1. diff --git a/src/Qtx/QtxMultiAction.cxx b/src/Qtx/QtxMultiAction.cxx index c46689ffb..903e11798 100644 --- a/src/Qtx/QtxMultiAction.cxx +++ b/src/Qtx/QtxMultiAction.cxx @@ -84,7 +84,7 @@ protected: { QHelpEvent* help = static_cast( e ); QWidget* w = QApplication::widgetAt( help->globalPos() ); - if ( w && Qtx::isParent( w, this ) ) + if ( w && w != this && Qtx::isParent( w, this ) ) { QHelpEvent he( help->type(), w->mapFromGlobal( help->globalPos() ), help->globalPos() ); QApplication::sendEvent( w, &he ); diff --git a/src/Qtx/QtxSplash.cxx b/src/Qtx/QtxSplash.cxx index 044d8fe88..3fb5bbb0f 100644 --- a/src/Qtx/QtxSplash.cxx +++ b/src/Qtx/QtxSplash.cxx @@ -28,6 +28,8 @@ #include #include +#include + /*! \class ProgressEvent \internal diff --git a/src/Qtx/QtxWorkstack.cxx b/src/Qtx/QtxWorkstack.cxx index 5ad12139c..e7849756a 100644 --- a/src/Qtx/QtxWorkstack.cxx +++ b/src/Qtx/QtxWorkstack.cxx @@ -38,6 +38,8 @@ #include #include +#include + /*! \class QtxWorkstackArea::WidgetEvent \internal diff --git a/src/SUIT/SUIT_DataObject.cxx b/src/SUIT/SUIT_DataObject.cxx index bb64cafa4..ebd6c74b4 100755 --- a/src/SUIT/SUIT_DataObject.cxx +++ b/src/SUIT/SUIT_DataObject.cxx @@ -23,6 +23,8 @@ #include "SUIT_DataObject.h" #include "SUIT_DataObjectKey.h" +#include + SUIT_DataObject::Signal* SUIT_DataObject::mySignal = 0; /*! diff --git a/src/SVTK/SALOME_Actor.cxx b/src/SVTK/SALOME_Actor.cxx index 589dee0aa..9583cc3f2 100644 --- a/src/SVTK/SALOME_Actor.cxx +++ b/src/SVTK/SALOME_Actor.cxx @@ -163,6 +163,7 @@ SALOME_Actor ::SALOME_Actor(): myRenderer(NULL), myInteractor(NULL), + myPrehighlightedCellId(-1), mySelectionMode(ActorSelection), myPreHighlightActor(SVTK_Actor::New()), myHighlightActor(SVTK_Actor::New()), @@ -448,6 +449,7 @@ SALOME_Actor SVTK_SelectionEvent* theSelectionEvent, bool theIsHighlight) { + myPrehighlightedCellId = -1; if ( !GetPickable() ) return false; @@ -517,6 +519,7 @@ SALOME_Actor if ( anObjId >= 0 ) { myIsPreselected = CheckDimensionId(aSelectionMode,this,anObjId); if(myIsPreselected){ + myPrehighlightedCellId = anObjId; const TColStd_IndexedMapOfInteger& aMapIndex = myPreHighlightActor->GetMapIndex(); int anExtent = aMapIndex.Extent(); anIsChanged |= (anExtent == 0 || anExtent > 0 && anObjId != aMapIndex(1)); @@ -594,6 +597,16 @@ SALOME_Actor return anIsChanged; } +/*! + Returns id of the prehighlighted cell (-1 if no cell is highlighted) +*/ +int +SALOME_Actor +::GetPrehighlightedCellId() const +{ + return myPrehighlightedCellId; +} + /*! To process highlight (called from SVTK_InteractorStyle) */ diff --git a/src/SVTK/SALOME_Actor.h b/src/SVTK/SALOME_Actor.h index e51d4eb43..8c635f5f4 100644 --- a/src/SVTK/SALOME_Actor.h +++ b/src/SVTK/SALOME_Actor.h @@ -171,6 +171,11 @@ class SVTK_EXPORT SALOME_Actor : public VTKViewer_Actor SVTK_SelectionEvent* theSelectionEvent, bool theIsHighlight); + //! Returns id of the prehighlighted cell (-1 if no cell is highlighted) + virtual + int + GetPrehighlightedCellId() const; + //! To process highlight (called from #SVTK_InteractorStyle) virtual bool @@ -214,6 +219,8 @@ class SVTK_EXPORT SALOME_Actor : public VTKViewer_Actor Handle(SALOME_InteractiveObject) myIO; + int myPrehighlightedCellId; + SALOME_Actor(); ~SALOME_Actor(); diff --git a/src/SVTK/SVTK_Actor.cxx b/src/SVTK/SVTK_Actor.cxx index 11bfa36c0..400067055 100644 --- a/src/SVTK/SVTK_Actor.cxx +++ b/src/SVTK/SVTK_Actor.cxx @@ -144,7 +144,7 @@ SVTK_Actor int aPartId = theMapIndex( i+1 ); if(vtkFloatingPointType* aCoord = theMapActor->GetNodeCoord(aPartId)){ aPoints->SetPoint(i,aCoord); - myUnstructuredGrid->InsertNextCell(VTK_VERTEX,1,&i); + myUnstructuredGrid->InsertNextCell(VTK_VERTEX,1,(vtkIdType*)&i); } } myUnstructuredGrid->SetPoints(aPoints); diff --git a/src/SVTK/SVTK_Renderer.cxx b/src/SVTK/SVTK_Renderer.cxx index cab5ca695..c2fd4ea62 100644 --- a/src/SVTK/SVTK_Renderer.cxx +++ b/src/SVTK/SVTK_Renderer.cxx @@ -37,25 +37,26 @@ #include "VTKViewer_Transform.h" #include "VTKViewer_Utilities.h" -#include -#include -#include -#include +#include #include - +#include +#include +#include +#include #include #include -#include - #include +#include +#include +#include // undefining min and max because CASCADE's defines them and // it clashes with std::min(), std::max() included in utilities.h #undef min #undef max - vtkStandardNewMacro(SVTK_Renderer); +vtkStandardNewMacro(SVTK_CellPicker); /*! Constructor @@ -67,7 +68,7 @@ SVTK_Renderer myPriority(0.0), myEventCallbackCommand(vtkCallbackCommand::New()), myPointPicker(vtkPointPicker::New()), - myCellPicker(vtkCellPicker::New()), + myCellPicker(SVTK_CellPicker::New()), myPointRectPicker(SVTK_RectPicker::New()), myCellRectPicker(SVTK_RectPicker::New()), myPreHighlightProperty(vtkProperty::New()), @@ -751,3 +752,108 @@ SVTK_Renderer aCamera->SetFocalPoint(0,0,0); this->OnFitAll(); } + +/*! + SVTK_CellPicker constructor +*/ +SVTK_CellPicker::SVTK_CellPicker() +{ + this->Cell = vtkGenericCell::New(); +} + +/*! + SVTK_CellPicker destructor +*/ +SVTK_CellPicker::~SVTK_CellPicker() +{ + this->Cell->Delete(); +} + +/*! + Redefined virtual method of the vtkCellPicker class +*/ +double SVTK_CellPicker::IntersectWithLine(double p1[3], double p2[3], double tol, + vtkAssemblyPath *path, + vtkProp3D *prop3D, + vtkAbstractMapper3D *m) +{ + vtkIdType numCells, cellId, minCellId; + int i, minSubId, subId; + double x[3], tMin, t, pcoords[3], minXYZ[3], minPcoords[3]; + vtkDataSet *input; + vtkMapper *mapper; + vtkAbstractVolumeMapper *volumeMapper; + + // Get the underlying dataset + if ( (mapper=vtkMapper::SafeDownCast(m)) != NULL ) + { + input = mapper->GetInput(); + } + else if ( (volumeMapper=vtkAbstractVolumeMapper::SafeDownCast(m)) != NULL ) + { + input = volumeMapper->GetDataSetInput(); + } + else + { + return VTK_DOUBLE_MAX; + } + + if ( (numCells = input->GetNumberOfCells()) < 1 ) + { + return 2.0; + } + + // Intersect each cell with ray. Keep track of one closest to + // the eye (within the tolerance tol) and within the clipping range). + // Note that we fudge the "closest to" (tMin+this->Tolerance) a little and + // keep track of the cell with the best pick based on parametric + // coordinate (pick the minimum, maximum parametric distance). This + // breaks ties in a reasonable way when cells are the same distance + // from the eye (like cells lying on a 2D plane). + // + minCellId = -1; + minSubId = -1; + pcoords[0] = pcoords[1] = pcoords[2] = 0; + double pDistMin=VTK_DOUBLE_MAX, pDist; + for (tMin=VTK_DOUBLE_MAX,cellId=0; cellIdGetCell(cellId, this->Cell); + + if ( this->Cell->IntersectWithLine(p1, p2, tol, t, x, pcoords, subId) + && t <= (tMin+this->Tolerance) ) + { + pDist = this->Cell->GetParametricDistance(pcoords); + // This is the only difference of this method from the vtkCellPicker's one + static double aTolerance = 1E-7; + //if ( pDist < pDistMin || (pDist == pDistMin && t < tMin ) ) + if ( pDist < pDistMin || (pDist == pDistMin && t < tMin + aTolerance ) ) + { + minCellId = cellId; + minSubId = subId; + for (i=0; i<3; i++) + { + minXYZ[i] = x[i]; + minPcoords[i] = pcoords[i]; + } + tMin = t; + pDistMin = pDist; +// cout << "cell id: " << minCellId << "\n"; + }//if minimum, maximum + }//if a close cell + }//for all cells + + // Now compare this against other actors. + // + if ( minCellId>(-1) && tMin < this->GlobalTMin ) + { + this->MarkPicked(path, prop3D, m, tMin, minXYZ); + this->CellId = minCellId; + this->SubId = minSubId; + for (i=0; i<3; i++) + { + this->PCoords[i] = minPcoords[i]; + } + vtkDebugMacro("Picked cell id= " << minCellId); + } + return tMin; +} diff --git a/src/SVTK/SVTK_Renderer.h b/src/SVTK/SVTK_Renderer.h index 8dbd981b2..1b08d5965 100644 --- a/src/SVTK/SVTK_Renderer.h +++ b/src/SVTK/SVTK_Renderer.h @@ -34,6 +34,7 @@ #include #include +#include class vtkRenderer; class vtkCallbackCommand; @@ -41,7 +42,6 @@ class vtkRenderWindowInteractor; class vtkPicker; class vtkPointPicker; -class vtkCellPicker; class vtkProperty; class SVTK_RectPicker; @@ -51,6 +51,7 @@ class VTKViewer_Transform; class SVTK_CubeAxesActor2D; class VTKViewer_Actor; class SVTK_Selector; +class SVTK_CellPicker; #ifdef WIN32 #pragma warning ( disable:4251 ) @@ -236,7 +237,7 @@ class SVTK_EXPORT SVTK_Renderer : public vtkObject //---------------------------------------------------------------------------- // Highlight/ Prehighlight devices vtkSmartPointer myPointPicker; - vtkSmartPointer myCellPicker; + vtkSmartPointer myCellPicker; vtkSmartPointer myPointRectPicker; vtkSmartPointer myCellRectPicker; @@ -252,6 +253,33 @@ class SVTK_EXPORT SVTK_Renderer : public vtkObject vtkFloatingPointType myBndBox[6]; }; +/*! + \class SVTK_CellPicker + The class is intended to redefine the IntersectWithLine() + to correct the mechanism of picking coincident cells +*/ +class SVTK_CellPicker : public vtkCellPicker +{ +public: + static SVTK_CellPicker* New(); + vtkTypeMacro(SVTK_CellPicker,vtkCellPicker); + +protected: + SVTK_CellPicker(); + ~SVTK_CellPicker(); + + virtual double IntersectWithLine(double p1[3], double p2[3], double tol, + vtkAssemblyPath *path, vtkProp3D *p, + vtkAbstractMapper3D *m); + +private: + vtkGenericCell *Cell; //used to accelerate picking + +private: + SVTK_CellPicker(const SVTK_CellPicker&); // Not implemented. + void operator=(const SVTK_CellPicker&); // Not implemented. +}; + #ifdef WIN32 //#pragma warning ( default:4251 ) #endif diff --git a/src/VTKViewer/VTKViewer_GeometryFilter.cxx b/src/VTKViewer/VTKViewer_GeometryFilter.cxx index 630b7870a..cd83d7505 100755 --- a/src/VTKViewer/VTKViewer_GeometryFilter.cxx +++ b/src/VTKViewer/VTKViewer_GeometryFilter.cxx @@ -350,7 +350,7 @@ VTKViewer_GeometryFilter { for ( i=0; i < numFacePts; i++) aNewPts[i] = pts[faceVerts[i]]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); outputCD->CopyData(cd,cellId,newCellId); @@ -375,7 +375,7 @@ VTKViewer_GeometryFilter { for ( i=0; i < numFacePts; i++) aNewPts[i] = pts[faceVerts[PixelConvert[i]]]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); outputCD->CopyData(cd,cellId,newCellId); @@ -400,7 +400,7 @@ VTKViewer_GeometryFilter { for ( i=0; i < numFacePts; i++) aNewPts[i] = pts[faceVerts[i]]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); outputCD->CopyData(cd,cellId,newCellId); @@ -430,7 +430,7 @@ VTKViewer_GeometryFilter { for ( i=0; i < numFacePts; i++) aNewPts[i] = pts[faceVerts[i]]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); outputCD->CopyData(cd,cellId,newCellId); @@ -460,7 +460,7 @@ VTKViewer_GeometryFilter { for ( i=0; i < numFacePts; i++) aNewPts[i] = pts[faceVerts[i]]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); outputCD->CopyData(cd,cellId,newCellId); @@ -489,7 +489,7 @@ VTKViewer_GeometryFilter for (i=0; i < pts->GetNumberOfIds(); i+=2) { aNewPts[0] = pts->GetId(i); aNewPts[1] = pts->GetId(i+1); - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); outputCD->CopyData(cd,cellId,newCellId); @@ -503,7 +503,7 @@ VTKViewer_GeometryFilter aNewPts[0] = pts->GetId(i); aNewPts[1] = pts->GetId(i+1); aNewPts[2] = pts->GetId(i+2); - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); outputCD->CopyData(cd,cellId,newCellId); @@ -522,7 +522,7 @@ VTKViewer_GeometryFilter aNewPts[0] = pts->GetId(i); aNewPts[1] = pts->GetId(i+1); aNewPts[2] = pts->GetId(i+2); - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); outputCD->CopyData(cd,cellId,newCellId); @@ -544,7 +544,7 @@ VTKViewer_GeometryFilter aNewPts[2] = pts[1]; aNewPts[1] = pts[2]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); @@ -562,7 +562,7 @@ VTKViewer_GeometryFilter aNewPts[4] = pts[2]; aNewPts[5] = pts[5]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); @@ -582,7 +582,7 @@ VTKViewer_GeometryFilter aNewPts[6] = pts[3]; aNewPts[7] = pts[7]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); @@ -601,7 +601,7 @@ VTKViewer_GeometryFilter aNewPts[4] = pts[2]; aNewPts[5] = pts[6]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); @@ -615,7 +615,7 @@ VTKViewer_GeometryFilter aNewPts[4] = pts[1]; aNewPts[5] = pts[4]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); @@ -629,7 +629,7 @@ VTKViewer_GeometryFilter aNewPts[4] = pts[2]; aNewPts[5] = pts[5]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); @@ -643,7 +643,7 @@ VTKViewer_GeometryFilter aNewPts[4] = pts[0]; aNewPts[5] = pts[6]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); @@ -662,7 +662,7 @@ VTKViewer_GeometryFilter aNewPts[3] = pts[7]; aNewPts[4] = pts[2]; aNewPts[5] = pts[8]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); outputCD->CopyData(cd,cellId,newCellId); @@ -675,7 +675,7 @@ VTKViewer_GeometryFilter aNewPts[3] = pts[10]; aNewPts[4] = pts[5]; aNewPts[5] = pts[11]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); outputCD->CopyData(cd,cellId,newCellId); @@ -691,7 +691,7 @@ VTKViewer_GeometryFilter aNewPts[5] = pts[11]; aNewPts[6] = pts[3]; aNewPts[7] = pts[12]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); outputCD->CopyData(cd,cellId,newCellId); @@ -706,7 +706,7 @@ VTKViewer_GeometryFilter aNewPts[5] = pts[14]; aNewPts[6] = pts[2]; aNewPts[7] = pts[7]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); outputCD->CopyData(cd,cellId,newCellId); @@ -721,7 +721,7 @@ VTKViewer_GeometryFilter aNewPts[5] = pts[13]; aNewPts[6] = pts[1]; aNewPts[7] = pts[6]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); outputCD->CopyData(cd,cellId,newCellId); @@ -741,7 +741,7 @@ VTKViewer_GeometryFilter aNewPts[6] = pts[4]; aNewPts[7] = pts[16]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); @@ -757,7 +757,7 @@ VTKViewer_GeometryFilter aNewPts[6] = pts[5]; aNewPts[7] = pts[17]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); @@ -773,7 +773,7 @@ VTKViewer_GeometryFilter aNewPts[6] = pts[6]; aNewPts[7] = pts[18]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); @@ -789,7 +789,7 @@ VTKViewer_GeometryFilter aNewPts[6] = pts[7]; aNewPts[7] = pts[19]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); @@ -805,7 +805,7 @@ VTKViewer_GeometryFilter aNewPts[6] = pts[3]; aNewPts[7] = pts[11]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); @@ -821,7 +821,7 @@ VTKViewer_GeometryFilter aNewPts[6] = pts[7]; aNewPts[7] = pts[15]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); + newCellId = output->InsertNextCell(aCellType,numFacePts,(vtkIdType*)aNewPts); if(myStoreMapping) myVTK2ObjIds.push_back(cellId); -- 2.39.2