Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2006:11_30



Commit 2006-11-30

Modifs

  • Nettoyage: (commité précédemment sans explication sur le site)
    • J'ai viré les macros OEMTK, OEMTK_USING, OEMTK_BEGIN, OEMTK_END. Pareil pour MTVIZ, MTFEM et MTGEO. Bref, au lieu d'utiliser OEMTK::Vect3, écrivez mtMath::Vect3 et au lieu de MTGEO_USING, écrivez using namespace mtGeo.
  • Migration Qt 4.2.1:
    • Vu que nous venons de prolonger la licence Qt, j'ai mis à jour les routines pour utiliser la dernière version. De plus, je viens de recevoir le bouquin de Blanchette sur Qt 4 ; j'ai donc tout en main pour y arriver.
    • Quelques notes sur Qt 4:
      • Interface unifiée et code plus propre.
      • Changement d'interface très important par rapport à Qt 3.
      • Bibliothèque divisée en plusieurs DLL (QtCore4, QtGui4, QtNetwork4, etc).
      • Versions release et debug disponibles.
      • Version GPL disponible.
      • QtDesigner complètement modifié au niveau de la philosophie de travail. En particulier, le QtDesigner ne crée plus des widgets mais des constructeurs de widgets.
      • Migration soi-disant simple et assistée de Qt 3 à Qt 4 (qt3to4.exe et une lib avec les anciens widgets nommée Qt3Support) - voir ci-dessous.
    • Etapes de migration (je les énumère ici pour me souvenir de cette galère qui devait ne durer qu'une demi-jounée au départ)
      • Installation de Qt (première merde: la version GPL ne compile pas avec .NET)
      • Migration automatique du code grâce à qt3toqt4. correction manuelle du résultat.
      • Surprise suivante: la conversion des fichiers du QtDesigner supprime tous les signaux/slots ⇒ utilisation de uic3 qui permet de faire cohabiter Qt 3 et Qt 4.
      • Bien sûr, la gestion des threads a été modifiée: il faut remplacer la communication par events par une communication par signaux/slots.
      • Tout compile et linke mais ça marche pas: les version Qt release et debug se mélangent grâce à VTK. En résumé, puisque VTK nomme ses DLL release et debug de la même manière, nous n'avons pas d'autre choix que de linker Metafor avec une seule version de VTK (la release p expl) mais, puisque celle-ci utilise Qt (release), on a un conflit quand on lance Metafor en debug. J'ai donc du ruser pour utiliser également une seule version de Qt pour les 2 versions de Metafor.
      • Content de ce résultat, je convertis les anciens ui de la version 3 à la version 4. Les signaux/slots peuvent être récupérés grâce à l'output d' uic3.
      • Naivement, je pense être arrivé à une version full Qt 4 et j'enlève la bibliothèque Q3Support. Erreur, il reste à modifier presque tous les appels de fonction un peu partout dans le code.
      • Je porte le résultat sous Unix après avoir recompilé VTK et Qt partout.
    • Ce qui ne fonctionne plus:
      • Les fenêtres VizWin ne sauvent plus leur taille dans la config
      • La version Unix fait parfois une “erreur de segmentation”. Pour la supprimer, virez le repertoire ~/.qt
      • La scalarbar n'est plus déplaçable à la souris.
      • Les polices de caractères de Qt 4 sont pourries sous X-Win32 ⇒ je vous conseille le serveur X de cygwin qui marche très bien à ce niveau.
      • Le drag & drop entre BWin et l'object browser provoque une petite erreur sur la console (mais ça marche).
      • Les polices utilisées sont trop petites sous Unix.
    • Ce qui a été corrigé:
      • Le Qt Designer 4 a une sorte de bug lorsqu'on met des QFrame dans un widget: le widget se resize mal (uniquement dans le designer). le problème vient de la propriété minimumSize qui est à [16,16] par défaut et qu'il faut mettre à [0,0].
      • Les settings Qt ne fonctionnaient plus sous Unix. Simplement parce que le .qt n'est plus utilisé dans Qt 4. Cet abruti voulait donc écrire les settings dans /etc/xdg/ (qui n'est en lecture seule pour l'utilisateur moyen). J'ai donc traduit les settings en Qt 4 pour avoir des settings locales à l'utilisateur. Sous Windows, elles sont stockées dans HKEY_LOCAL_USER/Software/LTAS-MCT et sous Unix, .conf/LTAS-MCT/Metafor.conf (fichier texte du genre .ini)

Projet

Windows

Installation de Qt 4.2.1

Le plus simple est d'installer les binaires de la version GPL que j'ai installé sur mon PC (sur mon serveur FTP - dark vador). Si vous voulez la recompiler vous même avec .NET, il faut la patcher. C'est expliqué ici.

N'oubliez pas de changer votre QTDIR dans les variables d'environement.

Recompilation VTK

Il faut recompiler votre VTK avec le widget QVTK en version 4. Ca peut se faire en relancant cmake et en modifiant la version de Qt dans les options. Si ça marchait pas, videz la cache.

Projet .NET

Le projet a été largement modifié mais les modifs ne sont pas difficiles à faire grâce à qmake. Une des conséquences directe du passage de Qt en version 4 a été l'obligation de faire de mtQt une DLL (au lieu d'une lib statique). Conceptuellement, c'est pas plus mal: mtQt est la couche Qt de l'interface graphique et mtViz est la couche VTK. De plus mtQt dépend de mtViz mais pas l'inverse.

  • Utilisez le nouveau fichier .pro pour générer un projet VC.NET avec qmake
  • Lancez le visual et éditez le projet à la main à 2 endroits:
    1. Dans Link/General : Ignore Import Library = No (ça permet de faire dépendre d'autres projets de mtQt).
    2. Dans Link/Input : Changer Qt3Supportd4.lib; QtGuid4.lib; QtCored4.lib en Qt3Support4.lib; QtGui4.lib; QtCore4.lib (utilisation de la version release uniquement!)

Pour le reste du projet:

  • ajouter à $(QTDIR)/include les rep suivants $(QTDIR)/include/QtCore, $(QTDIR)/include/QtGui, $(QTDIR)/include/Qt3Support
  • remplacer qt-mt3xx.lib par QtCore4.lib, QtGui4.lib, Qt3Support4.lib
  • définir les variables suivantes (je les ai mises dans mon meta_config.h)
#ifndef QT_DLL
  #define QT_LARGEFILE_SUPPORT
  #define QT_THREAD_SUPPORT
  #define QT_QT3SUPPORT_LIB
  #define QT3_SUPPORT
  #define QT_GUI_LIB
  #define QT_CORE_LIB
  #define QT_DLL
#endif

Unix

J'ai recompilé VTK et Qt sur toutes les machines Unix et les makefiles ont été adaptés.

Vu que Qt 4 ne compile pas sous Tru64, on perd la visu sur chinook. Par contre, j'ai réussi à la compiler sur calimero. On a donc la visu partout sauf sur chinook où il faut générer les makefiles sans l'option –with-gui.

Reste, de votre côté, à modifier vos profils (variables d'environement - pour ceux qui utilisent mes scripts, tout ça se trouve rangé dans ~/profile.d/).

gaston calimero spirou / tsuno / fantasio
QTDIR /opt/qt4.2.1 /opt/qt4.2.1 /usr/local/qt4.2.1
path VTK /opt/vtk5.0.2 /opt/vtk5.0.2 /usr/local/vtk5.0.2

Vérifiez bien que tout est ok avant de lancer une compilation en testant:

echo $QTDIR
moc -v

et vérifiez que votre LD_LIBRARY_PATH pointe bien vers le bon Qt (pour VTK, on utilise le rpath, donc c'est pas nécessaire).

Screenshots

Metafor / Qt 4 sous calimero !

Fichiers ajoutés/supprimés

A gen4gui/gen4gui.cpp
A gen4gui/gen4gui.h
R gen4gui/gen4gui.ui.h
A gen4gui/meshviewer.cpp
A gen4gui/meshviewer.h
R gen4gui/meshviewer.ui.h
A mtQt/AxesWidget.cpp
A mtQt/AxesWidget.h
R mtQt/AxesWidget.ui.h
A mtQt/BWinWidget.cpp
A mtQt/BWinWidget.h
R mtQt/BWinWidget.ui.h
A mtQt/CameraWidget.cpp
A mtQt/CameraWidget.h
R mtQt/CameraWidget.ui.h
A mtQt/CaptureWidget.cpp
A mtQt/CaptureWidget.h
R mtQt/CaptureWidget.ui.h
A mtQt/ColorsWidget.cpp
A mtQt/ColorsWidget.h
R mtQt/ColorsWidget.ui.h
A mtQt/Command.cpp
A mtQt/Command.h
A mtQt/CommandList.cpp
A mtQt/CommandList.h
A mtQt/CuttingWidget.cpp
A mtQt/CuttingWidget.h
R mtQt/CuttingWidget.ui.h
A mtQt/ExtrusionWidget.cpp
A mtQt/ExtrusionWidget.h
R mtQt/ExtrusionWidget.ui.h
A mtQt/GeneralWidget.cpp
A mtQt/GeneralWidget.h
R mtQt/GeneralWidget.ui.h
A mtQt/GUIPythonInterpreter.cpp
A mtQt/GUIPythonInterpreter.h
A mtQt/LightsWidget.cpp
A mtQt/LightsWidget.h
R mtQt/LightsWidget.ui.h
A mtQt/MetaforWidget.cpp
A mtQt/MetaforWidget.h
R mtQt/MetaforWidget.ui.h
A mtQt/mtQt.h
A mtQt/ObjectBrowser.cpp
A mtQt/ObjectBrowser.h
A mtQt/ObjectBrowserWidget.cpp
A mtQt/ObjectBrowserWidget.h
R mtQt/ObjectBrowserWidget.ui.h
A mtQt/OptionDialog.cpp
A mtQt/OptionDialog.h
R mtQt/OptionDialog.ui.h
A mtQt/PythonWindow.cpp
A mtQt/PythonWindow.h
R mtQt/PythonWindow.ui.h
A mtQt/ShowHideWidget.cpp
A mtQt/ShowHideWidget.h
R mtQt/ShowHideWidget.ui.h
A mtQt/SymmetryWidget.cpp
A mtQt/SymmetryWidget.h
R mtQt/SymmetryWidget.ui.h
A mtQt/TabBaseWidget.cpp
A mtQt/TabBaseWidget.h
R mtQt/TabBaseWidget.ui
R mtQt/TabBaseWidget.ui.h
A mtQt/ValuesWidget.cpp
A mtQt/ValuesWidget.h
R mtQt/ValuesWidget.ui.h
A mtQt/VizWin.cpp
A mtQt/VizWin.h
A mtQt/VizWinWidget.cpp
A mtQt/VizWinWidget.h
R mtQt/VizWinWidget.ui.h
A mtQt/WiresWidget.cpp
A mtQt/WiresWidget.h
R mtQt/WiresWidget.ui.h
A mtQt/XYPlotWidget.cpp
A mtQt/XYPlotWidget.h
R mtQt/XYPlotWidget.ui.h
R mtViz/Command.cpp
R mtViz/Command.h
R mtViz/CommandList.cpp
R mtViz/CommandList.h
R mtViz/GUIPythonInterpreter.cpp
R mtViz/GUIPythonInterpreter.h
R mtViz/ObjectBrowser.cpp
R mtViz/ObjectBrowser.h
R mtViz/VizWin.cpp
R mtViz/VizWin.h

Romain BOMAN 2006/11/30 08:50

commit/2006/11_30.txt · Last modified: 2016/03/30 15:23 (external edit)