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

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.

    jeudi 29 décembre 2011

    Export IFC vers PostGIS 2ème Partie

    IFC2PG : Industry Foundation Classes vers PostGIS 2ème Partie

     

    Introduction

    Ce billet est la suite de la première partie que vous trouverez ici IFC vers PostGIS 1ère partie, prenez en connaissance avant de poursuivre votre lecture.

    Le développement de l’outil est réalise dorénavant sous Visual Studio 2010 en VB.Net.

    Nouveau composant

    J’ai ajouté un nouveau composant DotSpatial qui permet de visualiser l’export 2D des objets du fichier IFC.

    DotSpatial est développé par les membres de l'équipe open source SIG de MapWindow, et la communauté de développeurs d'OSGeo .NET

    Evolution

    J’ai rajouté les objets suivants dans l’export :

    • IfcSpace
    • IfcSlab
    • IfcColumn
    • IfcDoor
    • IfcWindow

    Ces objets sont exportés sous forme de géométrie de type polygon.

    J’ai modifié l’export de l’objet IfcWall qui maintenant donne une géométrie de type polygon.

    L’interface s’est enrichi d’une vue 2D permettant de visualiser le résultat des exports.

    Installation

    Téléchargez l’outil IFC2PG : ifc2pg.rar

    Décompressez l’archive sous c:\

    Créez un raccourci sur le bureau.

     

    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 réaliser l’export des données, sélectionner un objet IfcBuildingStorey puis faites un clic droit pour faire apparaitre un menu contextuel.

    Ce menu permet de réaliser un export par type d’objet (IfcWallStandardCase, IfcSpace, IfcSlab, IfcColumn, IfcDoor, IfcWindow) en sélectionnant la ligne correspondante dans le menu, ou bien un export par IfcBuildindStorey, tous les objets seront alors exportés.

    Ce menu permet également de gérer l’affichage des objets dans la vue 3D par type d’objet ou pour tous les objets contenus par l’objet IfcBuildingStorey.

    Choisissez Export de tous les Objets dans le menu, vous devriez obtenir ceci :

    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 Objets dans le menu,

    Il ne vous reste plus qu’a allez visualiser le contenu tables avec par exemple OpenJump.

    Important

    Je ne vide pas les tables avant export, donc pensez à les vider pour ne pas vous retrouvez avec des doublons, je vais réfléchir à comment gérer ce risque de doublons.

    Conclusion

    Nous voila à la fin de cette seconde partie, je vais continuer à améliorer l’interface de l’outil, ajouter de nouveaux objets… Rendez-vous prochainement dans une troisième partie.

    Je vais également réfléchir à un export 3D sous PostGIS 2.0 Sourire

    jeudi 1 décembre 2011

    Export IFC vers PostGIS 1ere Partie

     

    IFC2PG : Industry Foundation Classes vers PostGIS 1ere Partie

     

    Introduction

    Je vais vous présenter l’outil de conversion de fichier IFC vers PostGIS que je suis en train de réaliser, outil développé sous en VB.Net  2008 avec :

    • le composant IFCsvr ActiveX de SECOM Co. Ltd.,
    • la librairie IFC Engine DLL de TNO Building Research .

    Cet outil doit permettre d’exporter les données d’un fichier IFC vers une base de données PostGIS, ce billet s’enrichira au fur et à mesure de l’évolution du développement de l’outil.

    IFCsvr ActiveX

    Le composant ActiveX IFCsvr est un composant ActiveX pour le traitement de données IFC(Industry Foundation Classes) . Ce composant fournit un environnement de programmation compatible IFC avec Microsoft Visual Basic, Visual Basic pour Application, VC + +, C #, Visual Basic.Net, ...

    Ce composant est gratuit pour un usage non commercial.

    Voici le lien pour le groupe ifcsvr-users : ifcsvr-users · IFCsvr ActiveX Component

    Il vous faudra vous référencer sur le groupe pour pouvoir télécharger le composant (IFCsvrR300) et autres documents.

    IFC Engine DLL

    Voici les lien pour la librairie IFC Engine : IFCEngine ou IFCdll

    Cette librairie est gratuite pour un usage non commercial.

     

     

    Industry Foundation Classes

     

     

    Ci-dessous des extraits de l’article Wikipédia sur le format IFC :

    Source : Article Industry Foundation Classes de Wikipédia en français (http://fr.wikipedia.org/wiki/Industry_Foundation_Classes).

    Début citation.

    Le format IFC (Industry Foundation Classes) est un format de fichier orienté objet utilisé par l'industrie du bâtiment pour échanger et partager des informations entre logiciels.

    Origine des IFC

    Ce standard est né de l'initiative de l'IAI (International Alliance for Interoperability), associant des entreprises du secteur de la construction et des éditeurs de logiciels. Cette organisation est divisée en chapitres nationaux dont BuildingSmart est le représentant français. Elle a pour objectif principal de favoriser l'interopérabilité des logiciels dans le secteur de la Construction.

    Building Information Modeling

    IFC est le format usé communément par le BIM (Building Information Modeling)

    Dans l'acceptation du BIM, le format IFC, standard ouvert compréhensible de tous les acteurs de la construction, organise les objets de l'industrie de la construction, les familles, autour d'un modèle informatique 3D, le BIM . Ces objets supportent le cycle de vie complet d'un bâtiment incluant les débuts-la conception, la documentation et la construction-, l'exploitation des bâtiments, la gestion des installations (facility management) et, enfin, la démolition et l'élimination2.

    Spécification des IFC

    Le modèle de données IFC est spécifié en langage EXPRESS, conforme à la norme ISO 10303-11 (STEP part 11). C'est un modèle orienté objet qui définit des classes associées à tous les objets de construction. Un modèle d'ouvrage est donc un ensemble hiérarchisé d'instances de classes du modèle IFC. Les échanges s'effectuent par l'intermédiaire de fichiers STEP-21 (ISO 10303-21) ou de fichiers XML (ifcXML).

    Par exemple, la hiérarchisation d'un bâtiment s'effectue ainsi :

    • une zone contient plusieurs bâtiments.
    • un bâtiment contient plusieurs étages
    • un étage contient plusieurs salles etc.

    Formats

    Formats IFC4
    Format Définition
    .ifc Fichier IFC utilisant la structure STEP conformément à ISO10303-21. Structuration des données selon les spécifications Express. C'est le format d'échange par défaut
    .ifcXML Fichier IFC utilisant la structure XML. Le format .ifcXML peut être généré directement par l'application ou à partir d'un fichier .ifc, conformément à ISO10303-28, la représentation XML des schémas et données Express.

    Le format .ifcXML est normalement 300-400% plus gros que le fichier .ifc

    .ifcZIP Fichier IFC utilisant l'algorithm de compression PKzip 2.04g

    Lien externe

    • Site du Projet Expert En france, le projet Expert rassemble les principaux acteurs du monde de la construction et du Bâtiment, il vise à promouvoir l'utilisation des IFC et de la BIM dans ce secteur. Il est soutenu par l'État (ministère chargé de la construction).

    Fin citation.

     

    Installation

    Téléchargez l’outil IFC2PG : ifcpg.rar

    Décompressez l’archive sous c:\

    Créez un raccourci sur le bureau.

     

    Utilisation

     

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

     

    L’interface s’enrichira au fur a mesure du développement, la barre d’outil principal ne comporte que deux icônes :

    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

      1. Arborescence du fichier IFC, les icônes avec une ampoule peuvent être éteints (dé affichage de tous les objets enfants) ou allumés (affichage de tous les objets enfants)
      2. Zone d’affichage du fichier IFC (IFCEngine OCX)
      3. Barre d’outils pour interagir avec l’affichage :

                    

          1. Rotation 3D
          2. Zoom
          3. Déplacement
          4. Vue de Face
          5. Vue de Coté

    Dé afficher les deux derniers IfcBuildingStorey

    Connecter vous à une base PostGIS

    Export des données vers PostGIS

    A ce stade du développement, pour réaliser un export il faut faire un clic droit sur un objet pour ouvrir un menu qui contiendra l’ordre d’export. Seul les objets IfcWallStandardCase (Mur) peuvent être exportés, un par un en sélectionnant chaque IfcWallStandardCase  ou bien en sélectionnant l’objet IfcBuildingStorey (Etage) pour exporter tous les objets IfcWallStandarCase.

    Lorsque vous cliquez sur un objet appartenant à un objet IfcBuildingStorey, celui-ci passe en surbrillance.

    Sélectionnez le 4eme objet IfcBuildingStorey, faites un clic droit et sélectionnez “Export de tous les murs” dans le menu.

    La fonction va créer la table IfcWallStandardCase si elle n’existe pas, dans la base de données PostGIS à laquelle vous êtes connecté, il n’y a pas encore de gestion de doublons. La structure de la table pourra changer avec les prochaines version de l’outil. Faites moi savoir si vous avez des suggestions quand à son contenu.

     

    Il ne vous reste plus qu’a allez visualiser le contenu de la table avec par exemple OpenJump.

    Le champ géométrique de la table contient les axes des murs, un second champ géométrique pourrait contenir le contour, a voir.

    Conclusion

    Nous voila à la fin de cette première partie, l’outil réalise l’export des axes des murs (IfcWallstandardCase), je vais rajouter petit à petit l’export des autres objets.

    J’attends vos remarques, suggestions ce premier jet d’un outil permettant d’exporter les objets d’un fichier IFC vers une bas de données PostGIS.

    jeudi 10 mars 2011

    AutoHotKey, OpenJump, PgAdmin3,PostGIS et Google Earth…

    Présentation


    clip_image001[7]
    AutoHotKeyest un utilitaire open-source pour Windows. Avec lequel, vous pouvez :
    • Automatiser presque n'importe quelle tâche en envoyant des frappes clavier et des clics souris. Vous pouvez écrire des macros à la main ou utiliser l’enregistreur de macro.
    • Créez des raccourcis pour le clavier et la souris. Pratiquement n'importe quelle touche, bouton, ou combinaison peuvent devenir une touche directe.
    • Réaliser des substitutions de chaînes de caractères, par exemple en tapant «cad» vous pouvez automatiquement obtenir « c’est à dire».
    • Créer des formes de saisie de données, des interfaces utilisateurs et des barres de menu faites sur commande.
    • Remappage des touches et des boutons sur votre clavier, et souris.
    • Convertir n’importe quelle macro en un exécutable pouvant fonctionner sur un ordinateur ne possédant pas AutoHotKey.
    Vous trouverez plus d’informations sur le site AutoHotKey au lien suivant :
    http://www.autohotkey.com

    Installation

    Téléchargez la version 1.0.48.05 de AutoHotKey à l’adresse suivante : http://www.autohotkey.com/download/AutoHotkeyInstall.exe
    Téléchargez SciTE4autoHotKey Version 3 ; l’editeur gratuit de script AutoHotKey à l’adresse suivante :
    http://www.autohotkey.net/~fincs/SciTE4AutoHotkey_3/BetaInstall_v3_beta4.exe

    Introduction

    Voici les version des outils que nous utiliserons dans ce tutorial :
    • AutoHotKey 1.0.48.05 ,
    • SciTE4AutoHotKey Version 3 ,
    • OpenJump 1.4.0.3,
    • PgAdmin III 1.12.1 ,
    • PostgreSQL 9.0.1,
    • PostGIS 1.5.2
    Je vais vous présenter des scripts dont vous pourrez tirer profit dans l’utilisation quotidienne de vos bases de données PostGIS.

    Script 1 : Lancer OpenJump, PgAdmin III par une combinaison de touches


    Ce premier script une fois compilé permettra de lancer :
    • OpenJump 1.4.0.3avec la combinaison de touche suivantes :
    image
    +
    image
    • PgAdmin III avec la combinaison de touches suivantes :
    image
    +
    image
    Ouvrir SciTE4AutoHotkey (C:\Program Files\AutoHotkey\SciTE_beta4\scite.exe), copier le texte ci dessous dans l’éditeur.
    #NoEnv          ; Recommended for performance and compatibility with future AutoHotkey releases.
    #Persistent
    #SingleInstance
    SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
    ;--- touche Windows+o  : lance OpenJump ----
    #o::
    run C:\Program Files\OpenJUMP1.4.0.3\bin\bin\OpenJUMP.exe
    return
    ;--- touche Windows+p  : lance PgAdmin III ---
    #p::
    run,C:\Program Files\PostgreSQL\9.0\bin\pgAdmin3.exe
    return
    Sauvegarder le fichier sous AH_ToolsExec.ahk, puis appuyer sur la touche F5 pour lancer l’exécution.
    lien pour télécharger AH_ToolsExec.ahk
    script1_b

    Vous devriez voir apparaitre un icône en forme de H dans la barre de tâches.
    script1_c
    L’appui des séquences de touches définis dans le script lancera son programme associé.
    Pour arrêter le script, faites un clic droit sur l’icône, puis choisissez exit dans le menu.
    script1_d
    Nous avons vu comment lancer l’exécution de programmes à partir de combinaisons de touches, vous pouvez enrichir ce script en rajoutant d’autres programmes.

    Script 2 : Piloter OpenJump



    Nous allons créer le script AH_OpenJump.ahk qui va permettre de piloter OpenJump par le biais de combinaison de touches, mais c’est un des intérêts de ce script, qui ne seront  actives que si la présence d’OpenJump est détecté.

    Touche Windows + Touche F1

    image
    +
    image
    Cette combinaison de touche va permettre d’ouvrir la boite “Exécuter une requête SQL” et définir une Connexion, il ne vous restera plus qu’a taper une requête puis l’exécuter.
    La première chose à vérifier, est que vous disposez d’une connexion. Pour cela sous OpenJump, allez dans le menu Couche, puis Exécuter une requête SQL, puis cliquez sur l’icône Gestionnaire de connexion.
    ExecQuerySql_2
    Le gestionnaire de connexion s’affiche, si la liste est vide, cliquez sur le bouton Ajouter.
    ExecQuerySql_3
    ExecQuerySql_4
    Créez alors une connexion en remplissant tous les champs, puis cliquez sur le bouton OK. Le nom que vous allez choisir sera utilisé dans le script, il est peut être différent du champ Database. Vous pouvez créer autant de connexion que vous avez de bases de données.
    ExecQuerySql_5
    Cliquez sur le bouton OK dans le Gestionnaire de connexion, puis fermez “Exécuter une requête SQL”
    Ouvrir SciTE4AutoHotkey (C:\Program Files\AutoHotkey\SciTE_beta4\scite.exe), copier le texte ci dessous dans l’éditeur.
    #NoEnv          ; Recommended for performance and compatibility with future AutoHotkey releases.
    #Persistent
    #SingleInstance
    SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
    SetTitleMatchMode,1
    DetectHiddenWindows,on
    SetTimer, checkOpenJump, 250
    return
    checkOpenJump:
    OpenJumpID := WinExist("OpenJUMP")
    If OpenJumpID > 0
    {
       ;----------------------------------------------------------------------------
        ;--- ces combinaisons de touche ne fonctionne que si OpenJump est ouvert  ---
        ;----------------------------------------------------------------------------
       
       
    ;--- touche Windows+F1 : Ouvre la Fenêtre "Exécuter une requête SQL"      ---
        #F1::
            IfWinNotActive, OpenJUMP, , WinActivate, OpenJUMP,
            WinWaitActive, OpenJUMP,
            ;WinActivate, ahk_id %OpenJumpID%
            ;Sleep 100
           
            WinGetPos, X, Y, Width, Height
            ToolTip, Ouverture de la fenêtre "Exécuter une requête SQL",(%X%+%Width%)/2,(%Y%+%Heigth%)/2
            SetTimer, RemoveToolTip, 5000
           
            ;--- menu Couche ---
            send !c       
            sleep 30
           
           ;--- Exécuter une requête SQL... ---
            send {Down}
            send e     
            ;--- attente ouverture fenêtre ---
            WinWaitActive,Exécuter une requête SQL
           
           ;--- Connexion ---
            MouseClick, left, 528, 39
            sleep 30
            send {Esc}
            sleep 30
            send MYBD ;--- Le nom que vous avez saisi dans ajouter une connexion
            sleep 30
           
            ;--- Requête ---
            MouseClick, left, 201, 122
            sleep 30
            WinGetPos, X, Y, Width, Height
            ToolTip, Tapez votre requête,(%X%+%Width%)/2,(%Y%+%Heigth%)/2
            SetTimer, RemoveToolTip, 5000
        return
       ;--- insérer ci-dessous la suite du script ---
    }
    return
    RemoveToolTip:
    SetTimer, RemoveToolTip, Off
    ToolTip
    return
    Sauvegarder le fichier sous AH_OpenJump.ahk, puis appuyer sur la touche F5 pour lancer l’exécution, puis appuyez simultanément sur la touche Windows et la touche F1, cela doit déclencher l’ouverture de la boite de dialogue “Exécuter une requête SQL”

    Touche Windows + Touche F2

    image
    +
    image
    Cette combinaison de touche va permettre d’ouvrir la boite “Exécuter une requête SQL” ,définir une Connexion, puis exécuter toutes les requêtes contenues. Le fichier de requêtes (requetes_OpenJump.txt )doit se trouver dans le même répertoire que le script.
    Insérer la suite du script dans le fichier AH_OpenJump.ahk.
        ;--- touche Windows+F2 : Ouvre la Fenêtre "Exécuter une requête SQL"                              ---
        ;                                     Exécute chaque requête contenue dans le fichier requetes.txt,     ---
        ;                                     chaque requête doit être séparée par ";"
        #F2::
           ;--- vide le presse papier --
            clipboard =
           
           ;--- lit le fichier requête ---
            ligne=
            tabRequetes=
            sep:=";" ;--- séparateur de requêtes
           
            Loop, Read, requetes_OpenJump.txt ;--- le fichier de requêtes
            {
                ligne = %A_LoopReadLine%
                tabRequetes = %tabRequetes%%ligne% `n
                Sleep,100
                IfInString, tabRequetes, %sep%
                {
                    clipboard = %clipboard%%tabRequetes% `n
                    ClipWait
                    Sleep,500
                                   
                   ;------------------
                    WinActivate, ahk_id %OpenJumpID%
                    Sleep 100
                   
                    ;--- menu Couche ---
                    send !c       
                    sleep 30
                   
                    ;--- Exécuter une requête SQL... ---
                    send {Down}
                    send e     
                   ;--- attente ouverture fenêtre ---
                    WinWaitActive,Exécuter une requête SQL
                   
                    ;--- Connexion ---
                    MouseClick, left, 528, 39
                    sleep 30
                    send {Esc}
                    sleep 30
                    send MYBD;--- Le nom que vous avez saisi dans ajouter une connexion
                    sleep 30
                   
                    ;--- Requête ---
                    MouseClick, left, 201, 122
                    sleep 30               
                   
                   ;--- si l'éditeur de requêtes est présent ---
                    queryID := WinExist("Exécuter une requête SQL")
                    if queryID > 0
                    {
                        WinActivate
                       ;--- colle le contenu du presse papier dans le requêteur ---
                        send ^a
                        sleep 100
                        send ^v
                        Sleep,100
                       
                        ;--- bouton OK ---
                        send !o
                        sleep 100
                    }
                    clipboard =
                    tabRequetes=
                    ligne=
                    sleep 100
                }
            }
           
           
        return
    Créez le fichier requetes_OpenJump.txt, avec une ou plusieurs requêtes, ci-dessous un exemple. Il y a deux contraintes, utiliser la fonction ST_Asbinary pour les géométries et séparer chaque requête par un point virgule.
    SELECT st_asbinary(wkb_geometry) as geom,ogc_fid,nom
    FROM commune;
    SELECT st_asbinary(wkb_geometry) as geom,ogc_fid
    FROM batiment;
    Sauvegarder le fichier sous AH_OpenJump.ahk, puis appuyer sur la touche F5 pour lancer l’exécution, puis appuyez simultanément sur la touche Windows et la touche F2, cela doit déclencher l’ouverture de la boite de dialogue “Exécuter une requête SQL”, choisir une connexion, puis exécuter les requêtes que vous aurez écrites.
    result_ F2

    voici le lien pour télécharger AH_OpenJump.ahk

    Script 3 : Exporter le résultat d’une requête dans un fichier KML et l’ouvrir sous Google Earth

    Nous allons créer le script AH_PG2GE.ahk qui va permettre d’exécuter une requête contenue dans un fichier, exporter le résultat de la requête dans un fichier KML et l’ouvrir sous Google Earth.
    Pour pouvoir utiliser ce script, vous devez avoir un pilote ODBC pour PostgreSQL d’installé, si ce n’est pas le cas, voici un lien pour le télécharger :
    psqlodbc_09_00_0200

    Touche Windows + Touche g

    image
    +
    image
    Ouvrir SciTE4AutoHotkey (C:\Program Files\AutoHotkey\SciTE_beta4\scite.exe), copier le texte ci dessous dans l’éditeur.
    #NoEnv          ; Recommended for performance and compatibility with future AutoHotkey releases.
    #Persistent
    #SingleInstance
    #Include Com.ahk
    SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
       
    ;--- touche Windows+g :
    ;--- execute le contenu du fichier exportkml.txt , cree le fichier kml et l'ouvre dans googleearth
    #g::   
        COM_init()
        sQuery =
        ;--- lit le fichier de requêtes ---
        Loop, Read, exportkml.txt
        {
            ligne = %A_LoopReadLine%
            sQuery = %sQuery%%ligne%`n
        }   
        if strlen(sQuery)>0
        {
            ;--- Chaine de connection ---
            sConnect := "Driver={PostgreSQL ANSI};Server=localhost;Port=5432;Database=MYBD;Uid=postgres;Pwd=****;"
            sConnect.=  "cache Size=100, Max Varchar=254, Max LongVarChar=-4;Extended Properties=""MaxVarcharSize=1000000;MaxLongVarcharSize=300000"""
           
            ;---- cree un objet recordset que va remplir la requête ---
            prs := COM_CreateObject("ADODB.Recordset")
            COM_Invoke(prs, "Open", sQuery, sConnect)
           
           ;--- suppression fichier ---
            FileDelete,result.kml
            ;--- ouverture fichier kml ---
            FileAppend, <?xml version="1.0" encoding="utf-8" ?>`n, result.kml
            FileAppend, <kml xmlns="http://earth.google.com/kml/2.1">`n, result.kml
            FileAppend, <Document><Folder><name>result</name>`n, result.kml
           
           ;--- lecture recordset ---
            Loop
            {
                sData =
                isData:=0
               If   COM_Invoke(prs, "EOF")
                  Break
                 
                FileAppend, <Placemark>`n, result.kml
                FileAppend, <description><![CDATA[`n, result.kml

               ;--- lecture des champs de l'enregistrement courant ---
                pFields := COM_Invoke(prs, "Fields")
                nNumFields := COM_Invoke(pFields, "Count")
                Loop, % nNumFields
                {
                    pField := COM_Invoke(pFields, "Item", A_Index-1)
                    sName := COM_Invoke(pField, "Name")
                    sName = %sName%
                    sData := COM_Invoke(pField, "Value")
                    sData = %sData%
                   
                    IfInString,sData, <coordinates>
                    {
                        if isData = 1
                            FileAppend, ]]></description>`n, result.kml
                        FileAppend, %sData%`n, result.kml
                    }
                    else
                    {
                        FileAppend,<b> %sName% :</b> <i> %sData%</i><br />`n, result.kml
                        isData:=1
                    }
                    COM_Release(pField)
                }
                COM_Release(pFields)
               
                FileAppend, </Placemark>`n, result.kml       
               
                ;--- on passe a l'enregistrement suivant ---
                COM_Invoke(prs, "MoveNext")             
            }
            ;--- fermeture recordset ---
            COM_Invoke(prs, "Close")
            COM_Release(prs)
            ;--- fermeture fichier kml ---
            FileAppend, </Folder></Document></kml>`n, result.kml
           
            ;--- ouverture dans Google Earth ---
            run,result.kml       
        }
        COM_Term()
    return
    Créez le fichier exportkml.txt, avec une requête, ci-dessous un exemple :
    SELECT nom,ST_Askml(2,wkb_geometry,6)
    FROM commune;
    Sauvegarder le fichier sous AH_PG2GE.ahk, puis appuyer sur la touche F5 pour lancer l’exécution, puis appuyez simultanément sur la touche Windows et la touche g.
    Vous devriez voir apparaitre le résultat sous Google Earth, le fichier kml est créé dans le répertoire du script.

    Conclusion

    Voilà, j’espère que ces quelques scripts vous auront donné envie d’aller plus loin, allez sur le site d’AutoHotKey, consultez le forum, épluchez la documentation, créez vos propres scripts.
    Et pourquoi ne pas lancer un concours de scripts, ici ou ailleurs, j’attend vos propositions.
    a vos claviers, prêt, partez….Sourire