← retour à la page principale du projet

Tutorial 1: afficher le cône jaune sous Windows (jeudi 7 juillet 2005)


Prérequis à télécharger:
/!\
: Il est conseillé de se créer un dossier C:\ProjetCosme\ & de mettre dedans l'intégralité des dossiers téléchargés (à l'exception bien sûr de Visual Studio); j'ai eu de très nombreux problèmes à cause des espaces, inutile de jouer au héros, ne pas en mettre semble de loin la meilleure des solutions.
Un Visual Studio récent correctement configuré (il est possible de demander la version 2005 Bêta 2 qui vous est envoyée gratuitement directement chez vous par Microsoft).
Qt3 Open Source pour Windows: site officiel, explications du rapatriement par CVS & installation ici (Tortoise n'aime pas trop ce CVS, il est conseillé d'utiliser plutôt l'invite de commande Linux), à installer par exemple dans C:\ProjetCosme\qt-3\.
Binaires précompilés de SoQt: lien direct de téléchargement, à installer par exemple dans C:\ProjetCosme\SoQt\.
Binaires précompilés de Coin: lien direct de téléchargement, à installer par exemple dans C:\ProjetCosme\Coin\.

Installation:
Installez dans l'ordre que vous souhaitez
Jettez quelques fois un coup d'oeil aux variables d'environnement (notamment PATH, COINDIR, COIN3DDIR, QTDIR, ...). On va même se la jouer grand seigneur, & créer une variable d'environnement nous-même en mettant SOQTDIR = C:\ProjetCosme\SoQt\ par exemple. Normalement, nous n'allons pas utiliser COIN3DDIR. Rappel: il faut relancer Visual Studio après chaque modification des variables d'environnement.
N'oubliez pas de compiler Qt3 (c'est long, très long, 1 heure 15 sur un P4 2,6 GHz).

Création du projet:
On va chercher à refaire cette application toute simple: http://doc.coin3d.org/SoQt/
Ouvrez Visual Studio, File->New->Project... (vous pourrez traduire facilement en français si vous avez une version française!), Visual C++->Win32->Win32 Console Application.
Nommez-là ConeJaune, mettez-là dans un dossier judicieusement choisi, & c'est parti! Dès qu'une fenêtre s'ouvre, cliquez sur Finish (on est pressés).
On va remplacer le fichier ConeJaune.cpp courant:
// ConeJaune.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
par ce fichier là:
// ConeJaune.cpp : Defines the entry point for the console application.
//

// imposé par le mode Win32 Console Application de Windows/Visual Studio
#include "stdafx.h"
// include de SoQt
#include <Inventor/Qt/SoQt.h>
#include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
#include <Inventor/nodes/SoBaseColor.h>
#include <Inventor/nodes/SoCone.h>
#include <Inventor/nodes/SoSeparator.h>

int _tmain(int argc, _TCHAR* argv[])
{
    // Initializes SoQt library (and implicitly also the Coin and Qt
    // libraries). Returns a top-level / shell Qt window to use.
    char ** argvBis = (char**) argv;
    QWidget * mainwin = SoQt::init(argc, argvBis, argvBis[0]);

    // Make a dead simple scene graph by using the Coin library, only
    // containing a single yellow cone under the scenegraph root.
    SoSeparator * root = new SoSeparator;
    root->ref();

    SoBaseColor * col = new SoBaseColor;
    col->rgb = SbColor(1, 1, 0);
    root->addChild(col);

    root->addChild(new SoCone);

    // Use one of the convenient SoQt viewer classes.
    SoQtExaminerViewer * eviewer = new SoQtExaminerViewer(mainwin);
    eviewer->setSceneGraph(root);
    eviewer->show();

    // Pop up the main window.
    SoQt::show(mainwin);
    // Loop until exit.
    SoQt::mainLoop();

    // Clean up resources.
    delete eviewer;
    root->unref();

    return 0;
}
Il est possible que cela marche en mode Debug, mais on va se limiter au mode Release (pose moins de problèmes), donc mettez-vous en mode Release.
OK, maintenant, il faut modifier largement les propriétés du projet. Les manipulations qui suivent doivent être adaptées & complétées en fonction de votre configuration:
Allez sur l'icône du projet ConeJaune (à droite, dans le Solution Explorer), faites un clic droit puis Properties.
Configuration Properties, C/C++, Additionnal Include Directories, General, mettre "$(SOQTDIR)\include";"$(QTDIR)\include";"$(COINDIR)\include"
Configuration Properties, C/C++, Preprocessor, Preprocessor Definitions, mettre WIN32;NDEBUG;_CONSOLE;SOQT_DLL;COIN_DLL
Configuration Properties, Linker, General, Additional Library Directories, mettre "$(SOQTDIR)\lib";"$(COINDIR)\lib"
Configuration Properties, Linker, Input, Additional Dependencies, soqt1.lib coin2.lib (ces fichiers sont censés être dans les dossiers spécifiés ci-dessus).
Validez, & faites un Build. Vous devriez avoir les 5 warnings suivants:
$(QTDIR)\include\qcstring.h(61) : warning C4996: 'strcpy' was declared deprecated  C:\Program Files\Microsoft Visual Studio 8\VC\include\string.h(56) : see declaration of 'strcpy'
$(QTDIR)\include\qcstring.h(86) : warning C4996: 'strcpy' was declared deprecated  C:\Program Files\Microsoft Visual Studio 8\VC\include\string.h(56) : see declaration of 'strcpy'
$(COINDIR)\include\Inventor/lists/SbIntList.h(35) : warning C4312: 'type cast' : conversion from 'unsigned long' to 'void *' of greater size
$(COINDIR)\include\Inventor/lists/SbIntList.h(38) : warning C4312: 'type cast' : conversion from 'unsigned long' to 'void *' of greater size
$(COINDIR)\include\Inventor/lists/SbIntList.h(41) : warning C4312: 'type cast' : conversion from 'unsigned long' to 'void *' of greater size
Bon.
Maintenant, au lancement, si ça marche, bravo. Sinon, va falloir chercher les DLL demandées dans l'ordinateur, & soit les copier dans un répertoire sans espace que vous mettrez dans le PATH (genre C:\ProjetCosme\Bin\), soit mettre le répertoire où ces DLL se situent dans le PATH (n'essayez pas de mettre un "répertoire avec des espaces entre guillemets", ça ne marche pas). La DLL qt-mt301.dll n'existe pas dans notre répertoire $(QTDIR)\bin, copiez la dll qt-mt3.dll & nommez sa copie qt-mt301.dll.
Voilà, si la force est avez vous (on ne peut faire de tutorial sans blague de geek), voici le résultat:
Bravo!
Si problème, envoyez-moi un mail...
Valid XHTML 1.0 Transitional