16 novembre 2005 Présentation du projet final Développement d’un plugin pour l’importation de données 3D normalisées pour la plate-forme Gocad Dans le cadre du cours Application SIG SCG Par Etienne Desgagné 20 avril 2006 Présentation du projet final Développement d’un plugin pour l’importation de données 3D normalisées pour la plate-forme Gocad Dans le cadre du cours Application SIG SCG Par Etienne Desgagné 20 avril 2006
16 novembre 2005 Introduction –Mise en contexte –Définiton du projet Analyse et conception Réalisation Échéancier Démonstration Tests et résultats –Résultats, limites et travaux futurs Introduction –Mise en contexte –Définiton du projet Analyse et conception Réalisation Échéancier Démonstration Tests et résultats –Résultats, limites et travaux futurs Plan de la présentation
16 novembre 2005 Situé dans le cadre du projet de maîtrise: ÉLABORATION DE CONCEPTS NÉCESSAIRES À LA MISE EN PLACE D’UN SIG 3D Application XML en géologie Mettre en place un système permettant: –Le couplage d’un outil de modélisation 3D avec un SGBD –Le requêtage tridimensionnel d’objets géométriques adapté au contexte de modélisation géologique adapté au contexte de modélisation géologique Adopter une approche générique et normative visant l’interopérabilité Situé dans le cadre du projet de maîtrise: ÉLABORATION DE CONCEPTS NÉCESSAIRES À LA MISE EN PLACE D’UN SIG 3D Application XML en géologie Mettre en place un système permettant: –Le couplage d’un outil de modélisation 3D avec un SGBD –Le requêtage tridimensionnel d’objets géométriques adapté au contexte de modélisation géologique adapté au contexte de modélisation géologique Adopter une approche générique et normative visant l’interopérabilité IntroductionIntroduction Mise en contexte
16 novembre 2005 Utilité du 3D en géologie –Besoin de systèmes pour gérer la 3 e dimension Plusieurs CAD ont atteint une certaine maturité côté modélisation 3D (ex. gocad) –Mais capacités limitées pour le stockage des données descriptives et pour l’analyse 3D Les SIG et les Geo-SGBD offrent des fonctionnalités intéressantes pour la gestion de données spatiales –Mais ne permettent pas la gestion efficace des modèles volumétriques 2.5 D2.5 D analyse spatiale 2Danalyse spatiale 2D Utilité du 3D en géologie –Besoin de systèmes pour gérer la 3 e dimension Plusieurs CAD ont atteint une certaine maturité côté modélisation 3D (ex. gocad) –Mais capacités limitées pour le stockage des données descriptives et pour l’analyse 3D Les SIG et les Geo-SGBD offrent des fonctionnalités intéressantes pour la gestion de données spatiales –Mais ne permettent pas la gestion efficace des modèles volumétriques 2.5 D2.5 D analyse spatiale 2Danalyse spatiale 2D IntroductionIntroduction Mise en contexte
16 novembre 2005 IntroductionIntroduction Architecture global du système
16 novembre 2005 Développer une application permettant d’importer dans un outil de modélisation 3D (Gocad), des données géométriques 3D sous format standard disponible sur un serveur. –Obtenir les données à partir d’une URL –“Parser” les données –Convertir les données en objets géométriques Gocad –Afficher les objets à l’écran Composante d’une architecture multi-tiers Développer une application permettant d’importer dans un outil de modélisation 3D (Gocad), des données géométriques 3D sous format standard disponible sur un serveur. –Obtenir les données à partir d’une URL –“Parser” les données –Convertir les données en objets géométriques Gocad –Afficher les objets à l’écran Composante d’une architecture multi-tiers IntroductionIntroduction Définition et objectifs du projet
16 novembre 2005 Application-cliente : Gocad Serveur d’application : Apache Tomcat Langages de programmation : –Java –C++ Pont entre Java et C++ : JNI Format de stockage et d’échange : XML (GML) Parser SAX : JAXP et Apache Xerces Application-cliente : Gocad Serveur d’application : Apache Tomcat Langages de programmation : –Java –C++ Pont entre Java et C++ : JNI Format de stockage et d’échange : XML (GML) Parser SAX : JAXP et Apache Xerces Analyse et conception Choix des technologies
16 novembre 2005 Analyse et conception Justification des choix technologiques Gocad: Beaucoup utilisé en géologie et décision départementale Langage Java: –Portabilité, code indépendant des systèmes d’exploitation –Robustesse –Orienté-objets –Grande disponibilité de librairies et produits connexes (Eclipse, parser, serveur d’application, …) –Permet de développer gratuitement –Réutilisation du code au niveau du serveur d’application JNI : Permet le passage entre Java et code natif dans Gocad Tomcat: Développement en Java, gratuit, bonne réputation, performance similaire aux produits concurrents commerciaux GML 3 : Norme OGC pour représentation de données géométriques 3D Parser SAX : Plus rapide car ne nécessite pas la création d’un arbre représentant l’ensemble de notre fichier XML, seulement quelques balises représentant l’ensemble de notre fichier XML, seulement quelques balises bien-définies nous intéresse. Gocad: Beaucoup utilisé en géologie et décision départementale Langage Java: –Portabilité, code indépendant des systèmes d’exploitation –Robustesse –Orienté-objets –Grande disponibilité de librairies et produits connexes (Eclipse, parser, serveur d’application, …) –Permet de développer gratuitement –Réutilisation du code au niveau du serveur d’application JNI : Permet le passage entre Java et code natif dans Gocad Tomcat: Développement en Java, gratuit, bonne réputation, performance similaire aux produits concurrents commerciaux GML 3 : Norme OGC pour représentation de données géométriques 3D Parser SAX : Plus rapide car ne nécessite pas la création d’un arbre représentant l’ensemble de notre fichier XML, seulement quelques balises représentant l’ensemble de notre fichier XML, seulement quelques balises bien-définies nous intéresse.
16 novembre 2005 Analyse et conception Conception de l’application TOMCAT Fichiers GML Parser de données Conversion de GML vers format strGeom Application-cliente Création et affichage des objets géométriques avec l’API de Gocad PARSER SAX JAVA Ex: [(1 2 3,4 5 6,7 8 9 ),(4 6 3,8 9 4,7 2 3)] PLUGIN GOCAD C++ Serveur de données JNI solide_demo.xml ImportObjectsFromJava Passage de la géométrie entre Java et C++
16 novembre 2005 Analyse et conception Problématiques et contraintes (1/2) Essayer de rester générique (éviter de tout coder dans l’API propriétaire de Gocad ) –On parse le GML et on récupère les coordonnées d’un côté –On construit les objets propriétaires de l’autre Complexité du passage entre Java et C++ (JNI) –Essayer de garder le plus simple possible les échanges entre les deux (codification de la géométrie dans une string) Réaliser un “mapping” entre les objets Gocad et la représentation en GML –Analyse de la structure et du modèle de données de Gocad –Analyse de la norme GML Essayer de rester générique (éviter de tout coder dans l’API propriétaire de Gocad ) –On parse le GML et on récupère les coordonnées d’un côté –On construit les objets propriétaires de l’autre Complexité du passage entre Java et C++ (JNI) –Essayer de garder le plus simple possible les échanges entre les deux (codification de la géométrie dans une string) Réaliser un “mapping” entre les objets Gocad et la représentation en GML –Analyse de la structure et du modèle de données de Gocad –Analyse de la norme GML
16 novembre 2005 Analyse et conception Problématiques et contraintes (2/2) L’utilisation de l’API GOCAD requiert la création d’un Plugin –Création et développement dans une structure arborescente parallèle à celle de Gocad –Structure complexe, documentation incomplète et non à jour L’utilisation de l’API GOCAD requiert la création d’un Plugin –Création et développement dans une structure arborescente parallèle à celle de Gocad –Structure complexe, documentation incomplète et non à jour
16 novembre 2005 Analyse et conception Modèle de classe GobjCreator createTsurf(StrGeom,nom) void createGocadObjects init() : JNIEnv* create (env*,fichierGML,nom) void StrGeom StrGeom(string geom) getNbElement() : int getTypeGeom() : string getElement(int pos) : strGeom getPoint3d(int pos) : Point3D tokenize(str,vector,delimiters):void getNbOccurence(str,el) : int m_nbElement : int m_type : string m_strGeom : string SAXParser SAXParser(uri) getStrGeomFromGML(args):String setStrGeom(String strGeom): void m_strGeom : string SAX_contentHandler startDocument(…) void endDocument(…) void startElement(…) void endElement(…) void Characters(…) void CreateurDeGML Convertisseur de données Gocad ASCII -> GML
16 novembre 2005 Analyse et conception Structure de données géométriques :Surface Dans Gocad, les surfaces (TSurf) sont composées d’un ensemble de TFace qui sont représentées par un maillage de triangles interconnectés.
16 novembre 2005 Analyse et conception Structure de données géométriques :Solide Dans Gocad, les solides (TSolid) sont composées d’un ensemble de TVolume qui sont représentées par un maillage de tétraèdres interconnectés.
16 novembre 2005 Analyse et conception GMLGML Dans la norme GML 3.0, les objets 3D peuvent être représentées par des géométries composées (geometric composite) c’est-à-dire des objets composés d’une collection de primitives homogènes. On y retrouve: –Les compositeCurve –Les compositeSurface –Les compositeSolid Dans la norme GML 3.0, les objets 3D peuvent être représentées par des géométries composées (geometric composite) c’est-à-dire des objets composés d’une collection de primitives homogènes. On y retrouve: –Les compositeCurve –Les compositeSurface –Les compositeSolid
16 novembre 2005 Analyse et conception CompositeSurfaceCompositeSurface
16 novembre 2005 Analyse et conception CompositeSolidCompositeSolid
16 novembre 2005 RéalisationRéalisation Création des objets géométriques (API Gocad) strGeom en provenance de Java
16 novembre 2005 RéalisationRéalisation Implémentation du parser SAX On réagit aux événements: –startDocument –endDocument –startElement –endElement –characters… Si (nom balise == “CompositeSolid”) {…} Si (nom balise == “CompositeSurface”) {…} On réagit aux événements: –startDocument –endDocument –startElement –endElement –characters… Si (nom balise == “CompositeSolid”) {…} Si (nom balise == “CompositeSurface”) {…} startDocument(…) void endDocument(…) void startElement(…) void endElement(…) void Characters(…) void SAX_contentHandler
16 novembre 2005 RéalisationRéalisation Implémentation de JNI Dans une classe C++ –On créer une JVM init() –On récupère notre classe Java env->FindClass("SAXParser")env->FindClass("SAXParser") –On lance la méthode qui démarre le Parser env->CallStaticObjectMethod(classe,methodeID,args)env->CallStaticObjectMethod(classe,methodeID,args) –On récupère la strGeom –On lance la création de l’objet **Attention à ne pas créer plusieurs JVM!!! –Gestion des thread ( jvm->AttachCurrentThread((void**) &env, NULL);) Dans une classe C++ –On créer une JVM init() –On récupère notre classe Java env->FindClass("SAXParser")env->FindClass("SAXParser") –On lance la méthode qui démarre le Parser env->CallStaticObjectMethod(classe,methodeID,args)env->CallStaticObjectMethod(classe,methodeID,args) –On récupère la strGeom –On lance la création de l’objet **Attention à ne pas créer plusieurs JVM!!! –Gestion des thread ( jvm->AttachCurrentThread((void**) &env, NULL);) createGocadObjects init() : JNIEnv* create (env*,fichierGML,nom) void
16 novembre 2005 ÉchéancierÉchéancier Calendrier des activités Configuration de l’environnement de développement de Gocad (4 sem) –Récupération et installation des composantes (QT, Gogad Dev Kit, VS6) –Création d’un “frame” de Plugin –Des heures de plaisir sur les forums et mailing list Étude de l’API et création d’objets 3D par programmation (3 sem) Implémentation de JNI (2 sem) Étude de la norme et création de fichier GML (2 sem) Implémentation du Parser Sax (1 sem) Intégration et tests finaux (2 sem) **Beaucoup de temps perdu au départ pour des technicalités!!! –Bouchés-doubles à la fin Configuration de l’environnement de développement de Gocad (4 sem) –Récupération et installation des composantes (QT, Gogad Dev Kit, VS6) –Création d’un “frame” de Plugin –Des heures de plaisir sur les forums et mailing list Étude de l’API et création d’objets 3D par programmation (3 sem) Implémentation de JNI (2 sem) Étude de la norme et création de fichier GML (2 sem) Implémentation du Parser Sax (1 sem) Intégration et tests finaux (2 sem) **Beaucoup de temps perdu au départ pour des technicalités!!! –Bouchés-doubles à la fin
16 novembre 2005 Tests et résultats Réalisation des tests finaux Nécessite des fichiers GML pour tester… –Développement d’un convertisseur du format de fichier ASCII de Gocad vers GML 3 Le système fonctionne bien Performance acceptable pour la récupération de petits et moyens fichiers GML à partir du serveur Tomcat pour affichage dans Gocad (en local!) Perte de performance dans le cas de gros fichier contenant plusieurs milliers de triangles. Nécessite des fichiers GML pour tester… –Développement d’un convertisseur du format de fichier ASCII de Gocad vers GML 3 Le système fonctionne bien Performance acceptable pour la récupération de petits et moyens fichiers GML à partir du serveur Tomcat pour affichage dans Gocad (en local!) Perte de performance dans le cas de gros fichier contenant plusieurs milliers de triangles.
16 novembre 2005 Tests et résultats Limites et travaux futurs Seulement la gestion des surfaces et des solides à été implémentée comme “proof of concept” Le convertisseur de format ne créer que des surfaces Optimisation du système La gestion des propriétés associées à nos objets géologiques n’est pas encore traitée –Intégration de la structure SIGEOM et/ou NADM à notre structure GML –Ajout de fonctionnalité d’analyse spatiale tridimensionnelle Développement d’algorithmes sous TomcatDéveloppement d’algorithmes sous Tomcat Stockage natif XML dans Oracle Choix et implantation d’un langage de requête Seulement la gestion des surfaces et des solides à été implémentée comme “proof of concept” Le convertisseur de format ne créer que des surfaces Optimisation du système La gestion des propriétés associées à nos objets géologiques n’est pas encore traitée –Intégration de la structure SIGEOM et/ou NADM à notre structure GML –Ajout de fonctionnalité d’analyse spatiale tridimensionnelle Développement d’algorithmes sous TomcatDéveloppement d’algorithmes sous Tomcat Stockage natif XML dans Oracle Choix et implantation d’un langage de requête
16 novembre 2005 DémoDémo
DémoDémo
Merci!Merci!