-// Copyright (C) 2007-2008 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
+// 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.
+// 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.
+// 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
+// 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
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
+
// SALOME VTKViewer : build VTK viewer into Salome desktop
// File :
// Author :
-// Module : SALOME
-// $Header$
-//
+
#include "SVTK_SetRotationPointDlg.h"
#include "SVTK_ViewWindow.h"
#include "SVTK_RenderWindowInteractor.h"
#include <QGroupBox>
#include <QLabel>
#include <QPushButton>
+#include <QMenu>
#include <QGridLayout>
#include <QDoubleValidator>
#include <QCheckBox>
#include <vtkCallbackCommand.h>
-
-using namespace std;
+#include <vtkInteractorStyle.h>
/*!
Constructor
*/
SVTK_SetRotationPointDlg
::SVTK_SetRotationPointDlg(QtxAction* theAction,
- SVTK_ViewWindow* theParent,
- const char* theName):
- SVTK_DialogBase(theAction,
- theParent,
- theName),
+ SVTK_ViewWindow* theParent,
+ const char* theName):
+ ViewerTools_DialogBase(theAction,
+ theParent,
+ theName),
myMainWindow(theParent),
myPriority(0.0),
myEventCallbackCommand(vtkCallbackCommand::New()),
myRWInteractor(theParent->GetInteractor())
{
setWindowTitle(tr("DLG_TITLE"));
- setSizeGripEnabled(TRUE);
+ setSizeGripEnabled(true);
// Create layout for this dialog
QGridLayout* layoutDlg = new QGridLayout (this);
vbox->addWidget(myToOrigin);
connect(myToOrigin, SIGNAL(clicked()), this, SLOT(onToOrigin()));
- // Create "Select Point from View" button
- mySelectPoint = new QPushButton(myGroupBoxSel);
- mySelectPoint->setText(tr("LBL_SELECTPOINT"));
+ // Create "Gravity Center of Select Object" button
+ mySelectPoint = new QPushButton(tr("LBL_SELECTPOINT"));
mySelectPoint->setCheckable(true);
+
+ QMenu* menuType = new QMenu( this );
+ mySelectActions[ menuType->addAction( tr("LBL_POINT") ) ] = NodeSelection;
+ mySelectActions[ menuType->addAction( tr("LBL_EDGE") ) ] = EdgeSelection;
+ mySelectActions[ menuType->addAction( tr("LBL_FACE") ) ] = FaceSelection;
+ mySelectActions[ menuType->addAction( tr("LBL_VOLUME") ) ] = VolumeSelection;
+ connect( menuType, SIGNAL( triggered( QAction* ) ), this, SLOT( onSelectMenu( QAction* ) ) );
+
+ mySelectPoint->setMenu( menuType );
vbox->addWidget(mySelectPoint);
- connect(mySelectPoint, SIGNAL(clicked()), this, SLOT(onSelectPoint()));
// Create croup box with grid layout
myGroupBoxCoord = new QGroupBox(this);
QPushButton* m_bClose = new QPushButton(tr("&Close"), aGroupBox );
m_bClose->setObjectName("m_bClose");
- m_bClose->setAutoDefault(TRUE);
+ m_bClose->setAutoDefault(true);
m_bClose->setFixedSize(m_bClose->sizeHint());
connect(m_bClose, SIGNAL(clicked()), this, SLOT(onClickClose()));
myEventCallbackCommand->Delete();
myEventCallbackCommand->SetClientData(this);
myEventCallbackCommand->SetCallback(SVTK_SetRotationPointDlg::ProcessEvents);
- myIsObserverAdded = false;
}
/*
SVTK_SetRotationPointDlg
::addObserver()
{
- if ( !myIsObserverAdded ) {
- vtkInteractorStyle* aIStyle = myRWInteractor->GetInteractorStyle();
+ vtkInteractorStyle* aIStyle = myRWInteractor->GetInteractorStyle();
+ if( !IsObserverAdded( aIStyle ) ) {
aIStyle->AddObserver(SVTK::BBCenterChanged, myEventCallbackCommand.GetPointer(), myPriority);
aIStyle->AddObserver(SVTK::RotationPointChanged, myEventCallbackCommand.GetPointer(), myPriority);
- myIsObserverAdded = true;
}
}
void
SVTK_SetRotationPointDlg
::ProcessEvents(vtkObject* vtkNotUsed(theObject),
- unsigned long theEvent,
- void* theClientData,
- void* theCallData)
+ unsigned long theEvent,
+ void* theClientData,
+ void* theCallData)
{
SVTK_SetRotationPointDlg* self = reinterpret_cast<SVTK_SetRotationPointDlg*>(theClientData);
- vtkFloatingPointType* aCoord = (vtkFloatingPointType*)theCallData;
+ double* aCoord = (double*)theCallData;
switch ( theEvent ) {
case SVTK::BBCenterChanged:
if ( self->myIsBBCenter->isChecked()
- ||
- IsBBEmpty(self->myMainWindow->getRenderer()) )
+ ||
+ IsBBEmpty(self->myMainWindow->getRenderer()) )
{
if ( aCoord )
{
- self->myX->setText( QString::number(aCoord[0]) );
- self->myY->setText( QString::number(aCoord[1]) );
- self->myZ->setText( QString::number(aCoord[2]) );
+ self->myX->setText( QString::number(aCoord[0]) );
+ self->myY->setText( QString::number(aCoord[1]) );
+ self->myZ->setText( QString::number(aCoord[2]) );
}
}
break;
}
}
+bool
+SVTK_SetRotationPointDlg
+::IsObserverAdded( vtkInteractorStyle* theInteractorStyle )
+{
+ bool isAdded = false;
+ for( int i = 0; i < myInteractorStyleList.count(); i++ )
+ if( myInteractorStyleList.at(i) == theInteractorStyle )
+ isAdded = true;
+
+ if( !isAdded )
+ myInteractorStyleList.append( theInteractorStyle );
+
+ return isAdded;
+}
+
void
SVTK_SetRotationPointDlg
::setEnabled(QGroupBox* theGrp, const bool theState)
SVTK_SetRotationPointDlg
::onToOrigin()
{
- if ( mySelectPoint->isChecked() )
- mySelectPoint->toggle();
+ mySelectPoint->setChecked( false );
myX->setText(QString::number(0.0));
myY->setText(QString::number(0.0));
myZ->setText(QString::number(0.0));
void
SVTK_SetRotationPointDlg
-::onSelectPoint()
+::onSelectMenu( QAction* theAction )
{
- if ( mySelectPoint->isChecked() )
- myMainWindow->activateStartPointSelection();
- else
- mySelectPoint->toggle();
+ mySelectPoint->setChecked( true );
+ myMainWindow->activateStartPointSelection( mySelectActions[theAction] );
}
void
{
if ( !myIsBBCenter->isChecked() ) {
if ( mySelectPoint->isChecked()
- &&
- ( myX->hasFocus() || myY->hasFocus() || myZ->hasFocus() ) )
+ &&
+ ( myX->hasFocus() || myY->hasFocus() || myZ->hasFocus() ) )
mySelectPoint->toggle();
- vtkFloatingPointType aCenter[3] = {myX->text().toDouble(),
- myY->text().toDouble(),
- myZ->text().toDouble()};
+ double aCenter[3] = {myX->text().toDouble(),
+ myY->text().toDouble(),
+ myZ->text().toDouble()};
myMainWindow->activateSetRotationSelected((void*)aCenter);
}
else