Skip to content

Version 8.7.0. QtVtkViewPointToolBar and QtVtkViewPointToolButton cla… #6

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmake/version.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#

set (QT_VTK_MAJOR_VERSION "8")
set (QT_VTK_MINOR_VERSION "6")
set (QT_VTK_MINOR_VERSION "7")
set (QT_VTK_RELEASE_VERSION "0")
set (QT_VTK_VERSION ${QT_VTK_MAJOR_VERSION}.${QT_VTK_MINOR_VERSION}.${QT_VTK_RELEASE_VERSION})

Expand Down
1 change: 1 addition & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
add_subdirectory (QtVtk)
add_subdirectory (viewpoint)


7 changes: 4 additions & 3 deletions src/QtVtk/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,21 @@ include (${GUIToolkitsVariables_CMAKE_DIR}/workarounds.cmake)

find_package (VtkContrib 5 REQUIRED)
include (${CMAKE_SOURCE_DIR}/cmake/qtvtk_common.cmake) # Après VtkContrib qui positionne les variables VTK_7, VTK_8 et VTK_9
find_package (QtUtil 6 REQUIRED)
find_package (PrefsQt 6 REQUIRED)
find_package(Qt${QT_MAJOR}Core NO_CMAKE_SYSTEM_PATH) # In order to enable moc ...
if (VTK_9)
find_package (VTK COMPONENTS GUISupportQt IOExportGL2PS FiltersExtraction)
endif (VTK_9)

file (GLOB HEADERS public/${CURRENT_PACKAGE_NAME}/*.h)
file (GLOB CPP_SOURCES *.cpp)
file (GLOB CPP_SOURCES *.cpp *.qrc)

# On ajoute les en-têtes aux sources. C'est utile pour cmake dans certains cas,
# par exemple lorsqu'ils doivent être pré-processés (moc, ...).
add_library (QtVtk ${CPP_SOURCES} ${HEADERS})
set (ALL_TARGETS QtVtk)
set_property (TARGET QtVtk PROPERTY AUTOMOC ON)
set_property (TARGET QtVtk PROPERTY AUTORCC ON)
set_property (TARGET QtVtk PROPERTY VERSION ${QT_VTK_VERSION})
set_property (TARGET QtVtk PROPERTY SOVERSION ${QT_VTK_MAJOR_VERSION})
# Rem : en Qt v 4.* on utilise -DUSE_QT_WEBKIT
Expand Down Expand Up @@ -51,7 +52,7 @@ endif(VTK_9)
target_compile_definitions (QtVtk PUBLIC ${QT_VTK_PUBLIC_FLAGS})
target_compile_definitions (QtVtk PRIVATE ${QT_VTK_PRIVATE_FLAGS} ${QT_VTK_PRIVATE_HELP_FLAGS})
target_compile_options (QtVtk PRIVATE ${SHARED_CFLAGS}) # Requested by Qt ...
target_link_libraries (QtVtk PUBLIC QtUtil::QtUtil VtkContrib::VtkContrib)
target_link_libraries (QtVtk PUBLIC PrefsQt::PrefsQt VtkContrib::VtkContrib)

# Etre capable une fois installée de retrouver vtk*, ... :
# (Rem : en son absence on a Set runtime path of "/tmp/pignerol/install/lib/libQtVtk.so.5.0.0" to "") ...
Expand Down
47 changes: 3 additions & 44 deletions src/QtVtk/QtVTKPrintHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include <TkUtil/MachineData.h>
#include <TkUtil/PrintCommand.h>
#include <QtUtil/QtAutoWaitingCursor.h>
#include <QtUtil/QtFileDialogUtilities.h>
#include <QtUtil/QtUnicodeHelper.h>

#include <vtkWindowToImageFilter.h>
Expand Down Expand Up @@ -142,47 +143,6 @@ QtVTKPrintHelper::PrinterStatus QtVTKPrintHelper::print (vtkRenderWindow& window
} // QtVTKPrintHelper::print


/**
* @return La première extension du filtre Qt reçu en argument (format <I>NOM (*.ext1 *.ext2 ... *.extn)</I>.
*/
static string getFirstExtension (const string& filter) // v 7.4.0
{
UTF8String prepared (filter);
prepared.replace (string ("("), string (" "), true); // => nom *.ext1)
prepared.replace (string ("*"), string (""), true); // => nom .ext1)
prepared.replace (string (")"), string (""), true); // => nom *.ext1
istringstream stream (prepared.utf8 ( ));
string name, ext;
stream >> name >> ext;


if ((false == stream.fail ( )) && (false == stream.bad ( )))
return ext;

return string ( );
} // getFirstExtension


/**
* @param Nom de fichier proposé
* @param Filtre Qt utilisé lors du choix du fichier
* @return Le nom de fichier avec extension. Si le nom proposé n'en n'a pas alors la première du filtre est ajoutée.
*/
static string completeFileName (const string& path, const string& filter) // v 7.4.0
{
File file (path);
if (0 != file.getExtension ( ).length ( ))
return path;

// Le fichier n'a pas d'extension, on rajoute la première du filtre
const string ext = getFirstExtension (filter);
UTF8String newPath (charset);
newPath << path << ext;

return newPath.utf8 ( );
} // completeFileName


QtVTKPrintHelper::PrinterStatus QtVTKPrintHelper::printToFile (vtkRenderWindow& window, QWidget* top)
{
QPrinter printer;
Expand Down Expand Up @@ -219,8 +179,7 @@ QtVTKPrintHelper::PrinterStatus QtVTKPrintHelper::printToFile (vtkRenderWindow&
if (1 != fileList.size ( ))
throw Exception ("Erreur, la liste de fichiers d'impression ne contient pas qu'un fichier.");

// string fileName (fileList [0].toStdString ( ));
string fileName (completeFileName (fileList [0].toStdString ( ), dialog.selectedNameFilter ( ).toStdString ( ))); // v 7.4.0
string fileName (QtFileDialogUtilities::completeFileName (fileList [0].toStdString ( ), dialog.selectedNameFilter ( ).toStdString ( ))); // v 7.4.0
File file (fileName);

if (false == file.isWritable ( ))
Expand Down Expand Up @@ -277,7 +236,7 @@ QtVTKPrintHelper::PrinterStatus QtVTKPrintHelper::printTo4kFile (vtkRenderWindow
if (1 != fileList.size ( ))
throw Exception ("Erreur, la liste de fichiers d'impression ne contient pas qu'un fichier.");

const string fileName (completeFileName (fileList [0].toStdString ( ), dialog.selectedNameFilter ( ).toStdString ( )));
const string fileName (QtFileDialogUtilities::completeFileName (fileList [0].toStdString ( ), dialog.selectedNameFilter ( ).toStdString ( )));
File file (fileName);
if (false == file.isWritable ( ))
{
Expand Down
29 changes: 29 additions & 0 deletions src/QtVtk/QtVtk.qrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>images/add_viewpoint.png</file>
<file>images/remove_viewpoint.png</file>
<file>images/remove_viewpoints.png</file>
<file>images/export_viewpoints.png</file>
<file>images/import_viewpoints.png</file>
<file>images/viewpoint_01.png</file>
<file>images/viewpoint_02.png</file>
<file>images/viewpoint_03.png</file>
<file>images/viewpoint_04.png</file>
<file>images/viewpoint_05.png</file>
<file>images/viewpoint_06.png</file>
<file>images/viewpoint_07.png</file>
<file>images/viewpoint_08.png</file>
<file>images/viewpoint_09.png</file>
<file>images/viewpoint_10.png</file>
<file>images/viewpoint_11.png</file>
<file>images/viewpoint_12.png</file>
<file>images/viewpoint_13.png</file>
<file>images/viewpoint_14.png</file>
<file>images/viewpoint_15.png</file>
<file>images/viewpoint_16.png</file>
<file>images/viewpoint_17.png</file>
<file>images/viewpoint_18.png</file>
<file>images/viewpoint_19.png</file>
<file>images/viewpoint_20.png</file>
</qresource>
</RCC>
179 changes: 179 additions & 0 deletions src/QtVtk/QtVtkViewDefinitionDialog.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
#include "QtVtk/QtVtkViewDefinitionDialog.h"
#include <QtUtil/QtGroupBox.h>
#include <QtUtil/QtConfiguration.h>
#include <QtUtil/QtUnicodeHelper.h>

#include <TkUtil/Exception.h>

#include <assert.h>

#include <QLayout>
#include <QLabel>


USING_STD
USING_UTIL

static const Charset charset ("àéèùô");
USE_ENCODING_AUTODETECTION

/**
* Aide pour positionner un widget au centre de "son parent".
* Utile depuis le passage à Qt 5 : une boite de dialogue modale ayant un parent est positionnée au centre du parent, ce qui est très bien, mais si on la
* déplace le parent suit le mouvement ... Donc pas moyen de voir ce qu'il y a dessous la boite de dialogue.
* => créer la boite de dialogue sans parent, et utiliser cette macro juste au moment de l'afficher.
*/
#ifndef QTVTK_CENTER_DIALOG
#define LEM_CENTER_DIALOG(dlg,parent) \
if ((0 != dlg) && (0 != parent)) \
{ \
QRect pfg = parent->frameGeometry ( ); \
QSize sz = dlg->size ( ); \
dlg->move (pfg.x ( ) + (pfg.width ( ) - sz.width ( )) / 2, \
pfg.y ( ) + (pfg.height ( ) - sz.height ( )) / 2); \
}
#endif // LEM_CENTER_DIALOG


QtVtkViewDefinitionDialog::QtVtkViewDefinitionDialog (
QWidget* parent, const string& title, bool modal, const UTF8String& name, const UTF8String& comment,
double position [3], double focal [3], double viewUp [3], double roll,
vtkRenderer* renderer, const string& helpURL, const string& helpTag)
: QDialog (0, true == modal ? (Qt::WindowFlags)(QtConfiguration::modalDialogWFlags | Qt::WindowStaysOnTopHint) : (Qt::WindowFlags)(QtConfiguration::amodalDialogWFlags | Qt::WindowStaysOnTopHint)), _viewDefinitionPanel (0), _closurePanel (0)
{
setModal (modal);
setWindowTitle (QSTR (title));

// Creation de l'ihm :
QVBoxLayout* layout = new QVBoxLayout (this);
layout->setMargin (QtConfiguration::margin);
layout->setSizeConstraint (QLayout::SetMinimumSize);
QtGroupBox* frame = new QtGroupBox (QSTR ("Paramètres de la vue"), this, "frame");
QVBoxLayout* frameLayout = new QVBoxLayout (frame);
layout->addWidget (frame);
frame->setLayout (frameLayout);
frame->setMargin (QtConfiguration::margin);
frame->setSpacing (QtConfiguration::spacing);
_viewDefinitionPanel = new QtVtkViewDefinitionPanel (frame, title, name, comment, position, focal, viewUp, roll, renderer);
_viewDefinitionPanel->adjustSize ( );
frameLayout->addWidget (_viewDefinitionPanel);

layout->addWidget (new QLabel (" ", this));
_closurePanel = new QtDlgClosurePanel (this, true, "Appliquer", "Fermer", "Annuler",helpURL, helpTag);
layout->addWidget (_closurePanel);
_closurePanel->setMinimumSize (_closurePanel->sizeHint ( ));

// Par defaut le bouton OK est artificellement clique par QDialog quand l'utilisateur fait return dans un champ de texte => on inhibe ce comportement par defaut :
_closurePanel->getApplyButton ( )->setAutoDefault (false);
_closurePanel->getApplyButton ( )->setDefault (false);
_closurePanel->getCloseButton ( )->setAutoDefault (false);
_closurePanel->getCloseButton ( )->setDefault (false);
_closurePanel->getCancelButton ( )->setAutoDefault (false);
_closurePanel->getCancelButton ( )->setDefault (false);
connect (_closurePanel->getApplyButton ( ), SIGNAL(clicked ( )), this, SLOT(apply ( )));
connect (_closurePanel->getCloseButton ( ), SIGNAL(clicked ( )), this, SLOT(close ( )));
connect (_closurePanel->getCancelButton ( ), SIGNAL(clicked ( )), this, SLOT(reject ( )));

layout->activate ( );
setMinimumSize (layout->sizeHint ( ));
LEM_CENTER_DIALOG (this, parent)
} // QtVtkViewDefinitionDialog::QtVtkViewDefinitionDialog


QtVtkViewDefinitionDialog::QtVtkViewDefinitionDialog (const QtVtkViewDefinitionDialog&)
{
assert (0 && "QtVtkViewDefinitionDialog copy constructor is forbidden.");
} // QtVtkViewDefinitionDialog::QtVtkViewDefinitionDialog (const QtVtkViewDefinitionDialog&)


QtVtkViewDefinitionDialog& QtVtkViewDefinitionDialog::operator = (const QtVtkViewDefinitionDialog&)
{
assert (0 && "QtVtkViewDefinitionDialog assignment operator is forbidden.");
return *this;
} // QtVtkViewDefinitionDialog::operator =


QtVtkViewDefinitionDialog::~QtVtkViewDefinitionDialog ( )
{
} // QtVtkViewDefinitionDialog::~QtVtkViewDefinitionDialog


UTF8String QtVtkViewDefinitionDialog::getName ( ) const
{
assert ((0 != _viewDefinitionPanel) && "QtVtkViewDefinitionDialog::getName : null view definition panel.");
return _viewDefinitionPanel->getName ( );
} // QtVtkViewDefinitionDialog::getName


UTF8String QtVtkViewDefinitionDialog::getComment ( ) const
{
assert ((0 != _viewDefinitionPanel) && "QtVtkViewDefinitionDialog::getComment : null view definition panel.");
return _viewDefinitionPanel->getComment ( );
} // QtVtkViewDefinitionDialog::getComment


void QtVtkViewDefinitionDialog::getPosition (double coords [3]) const
{
assert ((0 != _viewDefinitionPanel) && "QtVtkViewDefinitionDialog::getPosition : null view definition panel.");
_viewDefinitionPanel->getPosition (coords);
} // QtVtkViewDefinitionDialog::getPosition


void QtVtkViewDefinitionDialog::getFocalPoint (double coords [3]) const
{
assert ((0 != _viewDefinitionPanel) && "QtVtkViewDefinitionDialog::getFocalPoint : null view definition panel.");
_viewDefinitionPanel->getFocalPoint (coords);
} // QtVtkViewDefinitionDialog::getFocalPoint


void QtVtkViewDefinitionDialog::getViewUp (double direction [3]) const
{
assert ((0 != _viewDefinitionPanel) && "QtVtkViewDefinitionDialog::getViewUp : null view definition panel.");
_viewDefinitionPanel->getViewUp (direction);
} // QtVtkViewDefinitionDialog::getViewUp


double QtVtkViewDefinitionDialog::getRoll ( ) const
{
assert ((0 != _viewDefinitionPanel) && "QtVtkViewDefinitionDialog::getRoll : null view definition panel.");
return _viewDefinitionPanel->getRoll ( );
} // QtVtkViewDefinitionDialog::getRoll


QPushButton* QtVtkViewDefinitionDialog::getApplyButton ( ) const
{
assert ((0 != _closurePanel) && "QtVtkViewDefinitionDialog::getApplyButton : null closure panel.");
return _closurePanel->getApplyButton ( );
} // QtVtkViewDefinitionDialog::getApplyButton


QPushButton* QtVtkViewDefinitionDialog::getCancelButton ( ) const
{
assert ((0 != _closurePanel) && "QtVtkViewDefinitionDialog::getCancelButton : null closure panel.");
return _closurePanel->getCancelButton ( );
} // QtVtkViewDefinitionDialog::getCancelButton


void QtVtkViewDefinitionDialog::apply ( )
{
assert ((0 != _viewDefinitionPanel) && "QtVtkViewDefinitionDialog::apply : null view definition panel.");
_viewDefinitionPanel->apply ( );
} // QtVtkViewDefinitionDialog::apply


void QtVtkViewDefinitionDialog::close ( )
{
QDialog::accept ( );
emit applied (this);
} // QtVtkViewDefinitionDialog::close


void QtVtkViewDefinitionDialog::reject ( )
{
assert ((0 != _viewDefinitionPanel) && "QtVtkViewDefinitionDialog::reject : null view definition panel.");
_viewDefinitionPanel->reset ( );
QDialog::reject ( );
emit canceled (this);
} // QtVtkViewDefinitionDialog::reject


Loading