"Sans imagination il ne pourrait y avoir création."
Albert Jacquard.

"L'imagination est plus importante que le savoir."
Albert Einstein.

mardi 10 janvier 2012

IFC2PG 3D: Industry Foundation Classes vers PostGIS 3ème Partie

 

IFC2PG 3D: Industry Foundation Classes vers PostGIS 3ème Partie

 

Introduction

Ce billet est la suite de la seconde partie que vous trouverez ici  IFC vers PostGIS 2ème partie , prenez en connaissance avant de continuer votre lecture.

Pour cette troisième partie nous allons entrer dans le monde de la 3D grace à PostGIS 2.0, cette version nous ouvre les portes de la troisième dimension car elle permet le stockage de données géométries volumiques avec ces nouveaux types :

  • TIN( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )
  • POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0
    0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )

Cela ouvre beaucoup de perspectives, j’ai déjà d’autres idées pour de prochains billets, mais revenons à l’outil d’export IFC2PG qui va exporter les objets IFC en 3D, un champ geom3d de type geometry  devrait apparaitre dans les tables issues de l’opération d’export et ce uniquement si vous êtes sous PostGIS 2.0

 

Installation

Si vous n’avez pas installé PostGIS 2.0 , rendez-vous à ce lien http://www.postgis.org/download/windows/experimental.php

Et choisissez entre ces deux liens suivant la version de PostgreSQL 9 que vous utilisez :

http://www.postgis.org/download/windows/pg90/experimental/postgis/postgis-pg90-binaries-2.0.0svn.zip

http://www.postgis.org/download/windows/pg91/experimental/postgis/postgis-pg91-binaries-2.0.0svn.zip

Pour ma part j’ai une version 9.0 de PostgreSQL.

Ouvrez l’archive que vous avez téléchargée :

  • Copier le contenu de l’archive sous C:\Program Files\PostgreSQL\9.0\share
  • Lire les consignes des fichiers textes README
  • Éditer le fichier makepostgisdb.bat
  • set PGPORT=5432
    set PGHOST=localhost
    set PGUSER=postgres
    set PGPASSWORD=yourpasswordhere
    set THEDB=template_postgis20
    set PGBIN=C:\Program Files\PostgreSQL\9.0\bin\
    set PGLIB=C:\Program Files\PostgreSQL\9.0\lib\
    set POSTGISVER=2.0
    xcopy bin\*.* "%PGBIN%"
    xcopy /I /S bin\postgisgui\* "%PGBIN%\postgisgui"
    xcopy lib\*.* "%PGLIB%"
    "%PGBIN%\psql" -c "CREATE DATABASE %THEDB%"
    "%PGBIN%\psql" -d "%THEDB%" -c "CREATE LANGUAGE plpgsql"
    "%PGBIN%\psql" -d "%THEDB%" -f "share\contrib\postgis-%POSTGISVER%\postgis.sql"
    "%PGBIN%\psql" -d "%THEDB%" -f "share\contrib\postgis-%POSTGISVER%\spatial_ref_sys.sql"
    "%PGBIN%\psql" -d "%THEDB%" -f "share\contrib\postgis-%POSTGISVER%\postgis_comments.sql"

    REM installs raster support
    "%PGBIN%\psql" -d "%THEDB%" -f "share\contrib\postgis-%POSTGISVER%\rtpostgis.sql"
    "%PGBIN%\psql" -d "%THEDB%" -f "share\contrib\postgis-%POSTGISVER%\raster_comments.sql"

    REM installs topology support
    "%PGBIN%\psql" -d "%THEDB%" -f "share\contrib\postgis-%POSTGISVER%\topology\topology.sql"
    "%PGBIN%\psql" -d "%THEDB%" -f "share\contrib\postgis-%POSTGISVER%\topology\topology_comments.sql"

    REM Uncomment the below line if this is a template database
    REM "%PGBIN%\psql" -d "%THEDB%" -c "UPDATE pg_database SET datistemplate = true WHERE datname = '%THEDB%';GRANT ALL ON geometry_columns TO PUBLIC; GRANT ALL ON spatial_ref_sys TO PUBLIC"


    pause




  • Préciser le mot de passe de connexion en remplaçant yourpasswordhere par votre mot de passe,





  • Décommenter la ligne pour les templates, si nécessaire





  • Lancer makepostgisdb.bat





  • La base de données template_postgis20 est créée.





 



Puis sous PgAdmin III créez une base IFCBD (par exemple) à partir du template_postgis20.





Nouvelle version de l’outil IFC2PG



Cliquez sur le lien ifc2pg_3.rar pour télécharger le fichier rar, puis décompressez le sous C:\



 



Utilisation



Lancez l’application par un double-clic sur le raccourci.








  1. Arborescence du fichier IFC,


  2. Zone d’affichage 3D du fichier IFC (IFCEngine OCX) ,


  3. Gestion des niveaux (DoSpatial),


  4. Zone d’affichage 2D des objets exportés (DotSpatial)



Cet icône permet d’ouvrir un fichier IFC.



Cet icône permet de se connecter à une base de données PostgreSQL/PostGIS.



Ouvrez le fichier qui se trouve dans le répertoire IFC







    Export des données



    Pour que les objets soient transférés dans PostGIS, il faut se connecter à une base de données:






    1. Cliquez sur le bouton OK,


    2. Sélectionnez un objet IfcBuildingStorey,


    3. faites un clic droit, puis choisissez Export de tous les murs dans le menu contextuel,



     



    Visualisation des données



    Ouvrez PgAdmin, ouvrez le requêteur et exécutez la requête suivante :  SELECT * FROM ifcwallstandardcase;





    Vous pouvez voir qu’il y a un champ géométrique supplémentaire dans la table ifcwallstandardcase, le champ geom3 qui contient des géométries de type TIN. Nous allons utiliser une nouvelle fonction de PostGIS 2.0 ST_AsX3D pour créer un document X3D qui sera visualisable dans tous les outils permettant d’afficher un document X3D.



    Voici des liens pour plus d’information sur le format X3D :




    http://web3d.org/about/overview/





    http://www.web3d.org/x3d/wiki/index.php/Main_Page



    http://fr.wikipedia.org/wiki/Extensible_3D



     




    Création du fichier X3D



    Dans un éditeur de texte, insérez le texte suivant :



    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.2//EN" "http://www.web3d.org/specifications/x3d-3.2.dtd">
    <X3D profile='Immersive' version='3.2' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-3.2.xsd'>
    <Scene>




    Dans le requêteur de PgAdmin :




    • tapez la requête suivante :




    SELECT '<Viewpoint position='||quote_literal(((st_xmin(St_3DExtent(geom3d))+st_xmax(St_3DExtent(geom3d)))/2)::text||' '||

    ((st_ymin(St_3DExtent(geom3d))+st_ymax(St_3DExtent(geom3d)))/2)::text||' '||


    (st_zmax(St_3DExtent(geom3d))+10)::text)||'/>'


    FROM ifcwallstandardcase;







    • Sélectionnez le résultat, puis copiez le.


    • collez le résultat dans l’éditeur de texte, sélectionnez ce bloc et remplacez le caractère “ par un espace.



     




    • tapez la requête suivante :




    SELECT '<Shape>

    <Appearance>


    <Material emissiveColor=''0 0 1''/>


    </Appearance>


    ' || ST_AsX3d(geom3d) ||


    '


    </Shape>


    ' as x3dgeom


    FROM ifcwallstandardcase;





    • Sélectionnez le résultat, puis copiez le.






    • collez le résultat dans l’éditeur de texte, sélectionnez ce bloc et remplacez le caractère “ par un espace.


    • rendez vous à la fin à la dernière ligne et insérez le texte suivant :

        </Scene>
        </X3D>





    • puis enregistrez le avec l’extension x3d




    Voici le lien pour télécharger le fichier x3d correspondant à cet exemple : fichier X3D



    Afficher le fichier X3D avec MeshLab



    Pour visualiser le fichier X3D vous pouvez utiliser



    MeshLab



    téléchargeable à cette adresse : http://meshlab.sourceforge.net/



     









     



    Afficher le fichier X3D sous Mozilla Firefox ou Google Chrome



    Vous pouvez également afficher le fichier X3D sous un explorateur internet comme Google Chrome ou Mozilla Firefox, ce sont les deux browser sur lesquels j’ai testé l’affichage d’un fichier X3D. Pour cela vous installer un plugin compatible avec le format X3D, j’ai installé BS Contact de la société Bitmanagement. Pour le télécharger, rendez vous à ce lien : http://www.bitmanagement.de/en/products/interactive-3d-clients/bs-contact puis cliquez sur download, vous devrez remplir un mini formulaire pour pouvoir lancer le téléchargement :





    Après le téléchargement, lancer l’installation.



    Cliquez sur ce lien http://ifcx3d.netau.net/testx3d3.html pour vérifier le bon fonctionnement du plugin, vous devriez voir ceci :





    vous pouvez cliquer dans la vue, puis zoomez avec la molette de la souris. Un clic droit fait apparaitre un menu contextuel. Pour plus d’informations, consulter le guide de l’utilisateur de BS Contact à cette adresse : http://www.bitmanagement.com/developer/contact/userguide/6.1-fr/index.html



    Voici un extrait du guide utilisateur :




     





    BS Contact - Guide de l'utilisateur


    Pour bien débuter









    Ce document traite de la Navigation. La navigation est l'action de se déplacer dans un environnement virtuel ou de voir un object depuis différentes vues.



    Pour savoir ce qu'est un environnement virtuel - ou scène VR -, réferrez-vouz à la page Vue d'ensemble.











    Général



    Ceci est l'aperçu principal de la façon dont BS Contact opère:













    BS Contact se conduit principalement avec la souris. Vous pouvez:




    • bouton gauche: se déplace dans la scène VR.


    • bouton droit: ouvre le menu de BS Contact.



    La molette a des fonctionnalités additionnelles:




    • tournée: ajuste votre point de vue.


    • pressée: ouvre le menu de navigation.



    Il existe des fonctionnalités pour les utilisateurs expérimentés, qui sont discutées plus loin.

















    Se déplacer avec la souris:



    Se déplacer avec la souris dans une scène VR sera appelé naviguer. Celà marche comme ci-dessous:



    D'abord, vous cliquez dans la scène et gardez le bouton appuyé. Puis, vous déplacez la souris depuis le point où vous avec cliqué. La distance dont la souris a bougé détermine votre vitesse en 3D. Déplacez la souris...




























      ...vers le haut

    pour avancer.
     
    ...vers la gauche

    pour tourner à gauche.
    déplacez

    la souris...
    ...vers la droite

    pour tourner à droite.
      ...vers le bas

    pour reculer.
     





    De plus, la molette de la souris vous permet d'ajuster votre direction de regard verticalement:
















    ...en avant

    pour lever le regard.
    déplacez la molette...
    ...en arrière

    pour baisser le regard.


















    Essayer:






    Vous pouvez essayer tout ceci dans cet exemple: cyberhood.











    ...La suite:



    Parfois, le curseur prend la forme d'une main, celà signifie alors qu'il est au-dessus d'un object interactif. Pour naviguer, déplacez le curseur vers un endroit où il redevient une croix.

    Plus d'informations sur l'interactivité...
















    Astuce:






    Perdu ? Pressez la touche ECHAP.


    (Dans Netscape: bouton droit de la souris → 'Vues' → 'Réinitialisation')
















    Astuce:






    Les touches PagePrecedente et PageSuivante vous transportent à des positions predéfinies par l'auteur.


    Plus d'informations à propos des vues...















    Examiner un Objet:



    Les explications ci-dessus se réferraient à un mode de navigation appelé MARCHE (WALK). Un autre mode important est EXAMINER, qui est décrit ici. Pour en apprendre plus sur les autres modes, réferrez-vous à la section Modes de Navigation.



    Le mode EXAMINER fonctionne de façon similaire au mode MARCHE: vous cliquez un object et déplacez la souris en maintenant le bouton de la souris pressé. Les mouvements de la souris sont intimement liés aux mouvements de l'object: il tourne uniquement lorsque vous déplacez la souris.



    Fonctions additionnelles:







    • Pour déplacer un objet sur l'écran, pressez la touche CTRL, cliquez sur l'objet en la maintenant appuyée, et déplacez la souris.


    • Pour se rapprocher ou s'éloigner, utilisez la molette de la souris.


















    Essayer:






    Essayez avec le configurateur de voiture.
















    Astuce:






    BS Contact vous aide en alignant l'objet en douceur pendant que vous le tournez. Si vous souhaitez aligner parfaitement un objet, déplacez la souris de droite à gauche ou de haut en bas quelques fois.
















    Astuce:






    Les touches PagePrecedente et PageSuivante, ainsi que ECHAP vous aident dans la presque totalité des scènes.















    Modes de Navigation



    Il y a différentes manières de modifier votre point de vue dans la scène lorsque vous déplacez la souris. Ces manières sont appelées modes de navigation et remplissent les besoins de différents types d'applications VR. Une application peut préselectionner un mode et l'utilisateur en choisir un autre.









    Pour sélectionner un mode de navigation:




    • cliquez sur le bouton central, ou


    • cliquez sur le bouton droit et sélectionnez Déplacement.





    Voici les modes de navigation disponibles dans BS Contact:



































    MARCHE (WALK):

    Le mode MARCHE est actif dans la plupart des scènes. Il vous permet de vous déplacer de la façon dont vous le faites dans le monde réel.


































      avancer  
    tourner à gauche souris tourner à droite
      reculer  














    baisser le regard
    molette
    lever le regard


    VOL (FLY):

    Le mode VOL se comporte comme le mode MARCHE, à celà près qu'il ne vous garde pas au sol, d'où la possibilité de voler. Utilisez la molette pour monter ou descendre, ou utilisez la touche CTRL pour vous déplacer directement en haut ou en bas avec la souris.


































      avancer  
    tourner à gauche souris tourner à droite
      reculer  














    baisser le regard
    molette
    lever le regard


    EXAMINER (EXAMINE):

    Le mode EXAMINER vous permet de faire tourner un objet et de l'examiner de différentes positions. Il est activé par défaut si l'on regarde un objet seul.


































      tourner vers le haut  
    tourner vers la gauche souris tourner vers la droite
      tourner vers le bas  














    se rapprocher
    molette
    s'éloigner



    Les modes de navigation suivants sont des extensions de BS Contact, en plus de ceux de la norme VRML.

























    PANORAMIQUE (PAN):

    Dans le mode PANORAMIQUE, l'utilisateur peut facilement regarder autour de soi. Se déplacer est également possible, mais requiert de presser la touche CTRL en même temps que déplacer la souris.


































      lever le regard  
    tourner à gauche souris tourner à droite
      baisser le regard  














    avancer
    molette
    reculer


    DECALER (SLIDE):

    Ce mode vous permet de vous déplacer en translation, sans changer votre direction de regard.


































      monter  
    allez à gauche sourise aller à droite
      descendre  














    avancer
    molette
    reculer


    JEU VIDEO (GAME):

    Le mode JEU VIDEO est une alternative au mode MARCHE. Vous pouvez controller les mouvements comme dans un jeu:




    • changer votre direction de regard via la souris sans la presser,


    • et vous déplacer avec l'autre main sur le clavier.



    Plus d'informations sur le mode JEU...


































      lever les yeux  
    regarder à gauche souris regarder à droite
      baisser les yeux  














    accelérer
    molette
    ralentir


    SAUTER (JUMP):

    C'est un mode spécial qui vous permet de cliquer sur un objet, vous transportant alors à cet endroit automatiquement.



    Néanmoins vous pouvez vous déplacer en navigation similaire à MARCHE ou PANORAMIQUE. Selon lequel de ces deux sous-modes est actif dépend la présence ou non de la gravité.



    SIMILI-PANORAMIQUE (sans gravité):


































      lever les yeux  
    regarder à gauche souris regarder à droite
      baisser les yeux  














    avancer
    molette
    reculer



    SIMILI-MARCHE (avec gravité):


































      lever les yeux  
    regarder à gauche souris regarder à droite
      baisser les yeux  














    avancer
    molette
    reculer


















    Cette section montre les options pour les utilisateurs plus expérimentés :









    Contrôles de navigation avancés:




    • touche MAJ: augment la vitesse tant qu'elle est pressée


    • menu 'Vitesse': contrôle la vitesse de déplacement


    • touche CTRL: mode de déplacement alternatif selon le mode






















    Le fichier testx3d3.html



    Ci dessous le contenu du fichier testx3d3.html qui est l’adaptation d’un exemple trouvé sur internet :



    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>
    <head>

    </head>
    <body>

    <h1> ifcwallstandardcase X3D </h1>

    <!-- TODO: * authors need to replace the X3D filename (along with relative or online location) in the next two lines * -->
    <object data="test2.x3d" type="model/x3d+xml" height="600" width="600">
    <param name="src" value="test2.x3d"/>

    <!-- the remaining HTML that follows should not need further modification -->
    <param name="DASHBOARD" value="FALSE"/>

    <param name="SPLASHSCREEN" value="FALSE"/>
    <!-- the following anchor-link text is only shown if no X3D plugin is already installed -->
    <div class="noX3dPluginInstalled">
    <a href="http://www.web3d.org/x3d/content/examples/X3dResources.html#Applications" target="helpPage">Select an X3D plugin to see this example...</a>
    <!-- alternate url: http://www.web3d.org/tools/viewers_and_browsers -->
    </div>
    </object>


    </body>
    </html>



     



     



    Conclusion



    Ce billet nous a permis de mettre un pied dans le monde de la 3D sous PostGIS en intégrant des données issues d’un fichier IFC. Il reste bien sur à enrichir les tables de champs porteur d’informations supplémentaires, rajouter des fonctionnalités pour faciliter l’import des objets dans PostGIS, finaliser le traitement des objets non encore traités.



    Mais le plus passionnant reste à faire, mettre en place un nouvel outil pour l’exploitation des objets stockés dans la base de données, une interface développée en HTML utilisant le plugin BS Contact pour l’affichage des données au format X3D. Je vais réfléchir à cette interface et je vous la présenterait dans un prochain billet.



    Les domaines d’applications sont vastes, jusqu’a présent les SIG,base de données spatiales nous amenait aux portes des batiments via une adresse ou une requête spatiale et ne permettait pas d’entrer directement dans ce bâtiment ou alors cela nécessitait une extension, aujourd’hui il devient possible grâce à PostGIS 2.0 de pénétrer dans ce bâtiment, puis de vous promener à l’intérieur de celui-ci étage par étage, pièce par pièce. Vous avez sans doute des idées sur ce sujet, n’hésitez pas à m’en faire part.