wiki:objectManager

Module objectManager

But du module

Ce module rassemble les objets ayant une sémantique particulière, permet de les manipuler (eux ainsi que leurs attributs) et de les conserver pendant l'utilisation de Blender et dans ses sauvegardes.

Technologies utilisées

Organisation actuelle

Le module est décomposé en 2 classes :

  • SceneObjects? : représentant une scène (n'existant pas forcément dans le projet) composée d' Objects ayant une sémantique particulière.
  • Object : Représente un objet graphique (n'existant pas forcément dans le projet) et contient la sémantique de l'objet.

et de quelques fonctions ratachées au module (en particulier) :

  • getAllSceneName : qui renvoie la liste des scènes existant dans le registry.
  • saveAllScene : qui sauvegarde toutes les scènes existantes de telle sorte qu'elles soient comprises dans la sauvegarde .blend de Blender

Pour permettre au script de s'arrêter sans perdre les informations rentrées, les pointeurs des SceneObjects? sont placés dans les registry de Blender. La classe registryManager, qui est placée dans Tools, permet de faciliter les accès au registry.
Pour intégrer les sauvegardes du plugin dans celles de Blender (et permettre l'échange de fichier .blend) , nous utilisons le module Text de Blender dans lequel nous enregistrons nos instances python sous forme XML.

Les objets sémantiques sont différenciés par leur id (et non plus leur nom). Celle ci est dans la property 'semantic' de l'objet physique correspondant. Un attribut Blender.Object a été rajouté à l'objet sémantique. Ainsi l'objet sémantique garde un lien de son objet physique tout le temps. Le nom de l'objet sémantique est donc celui de de l'objet physique.
Ceci permet de pourvoir renommer l'objet physique directement avec les outils de Blender et de pouvoir retrouver la sémantique à partir des property.

De même l'attribut Blender.Scene de SceneObject? réalise le lien avec la scène qui peut donc être renomée.

Remarque : afin d'optimiser les recherches d'objets de la classe SceneObjects?, les Object sont indexés par leur id dans un dictionnaire python.

Idées abandonnées

Nous pensions garder les attributs des objets sous forme XML proche de celui d'import/export. Mais ce système s'est révélé être lourd d'utilisation et lent à l'exécution. De plus, le format était trop éloigné de celui de l'import/export pour être utilisable facilement. Les objets sont donc créés et conservés dans les registry sous forme de classe Python.

Diagrammes UML

Diagramme à jour (22/10/08)

Organisation du module

  • VEHA_IE
    • objectManager
      • _ _init_ _.py : contient le chargement initial, les fonctions globales de sauvegarde
      • sceneObjects : contient la classe SceneObjects?
      • object : contient la classe Object

ObjectManager? a pour dépendances :

  • VEHA_IE.Tools.registryManager
  • VEHA_IE.classManager

Tests possibles

Pour tester le module, charger le fichier test/testObjectManagerEtClass.blend avec blender et lancer le script. Ce dernier créer des objets sémantiques liés entre eux. Vous pouvez renommer le cube et la lampe (respectivement un Bench et un LaserER).
A la deuxième exécution, il supprime l'oscilloscope et tous ses objets liés. Il est possible de sauvegarder le .blend (Ne pas écraser le fichier sur svn ! ). En relançant le script, il recharge (de façon transparente) la sémantiques des objets et réaffiche tel que avant la fermeture de blender.

Avancement

10/10/2008 :
L'écriture globale est finie et testée. Il ne manque plus que les relations avec le système de classes.

22/10/2008 :
Les classes ont été en grande partie repensées et réécrite afin de permettre les modifications du cahier des charges :

  • possibilité de changer le nom d'un objet ou d'une scène sans se préoccuper du plugin
  • 2 scènes sémantiques doivent pouvoir partager un même objets sémantique (objet link dans Blender)
  • il doit être possible de retrouver la sémantique d'un objet copier via Blender de façon transparente pour l'utilisateur.

Attachments