Scripted objects saving attributes/fr

Introduction
Les Objets créés par script sont reconstruits à chaque fois qu'un document au format FCStd est ouvert. Pour ce faire, le document conserve une référence au module et à la classe Python qui ont été utilisés pour créer l'objet, ainsi que ses propriétés.

Les attributs de la classe utilisée pour créer l'objet peuvent également être enregistrés, c'est-à-dire "sérialisés". Ceci peut être contrôlé par les méthodes et  de la classe.

Sauvegarde de tous les attributs
Par défaut, les attributs enregistrés dans une classe d'objets sont ceux du dictionnaire de la classe.

Un objet peut être créé à l'aide de cette classe et il peut être enregistré dans. Si aucun viewprovider particulier n'est attribué au nouvel objet, sa classe proxy est simplement définie sur une valeur différente de, dans ce cas, sur.

Lorsque nous rouvrons le fichier, nous pouvons inspecter le dictionnaire de la classe de l'objet.

Nous voyons que tous les attributs qui commencent par dans la classe ont été sauvegardés. Ceux-ci peuvent être de différents types, notamment chaîne de caractères, liste, flottant et dictionnaire. Le tuple original pour a été converti en liste, mais sinon tous les attributs ont été chargés de la même manière.

Sauvegarde d'attributs spécifiques
Nous pouvons définir une classe similaire à la première, qui implémente des attributs spécifiques à sauvegarder.

La valeur de retour de est l'objet qui sera sérialisé. Il peut s'agir d'une valeur unique ou d'un tuple de valeurs. Lorsque l'objet est restauré, la classe appelle la méthode, en passant la variable avec le contenu sérialisé. Dans ce cas, est un tuple qui est décomposé dans les variables respectives pour reconstruire l'"état" qui existait à l'origine.

Nous pouvons créer un objet avec cette classe et enregistrer le document, comme dans l'exemple précédent. Lorsque nous rouvrons le fichier, nous pouvons inspecter le dictionnaire de la classe de l'objet.

Le tuple original de a été converti en liste, mais les autres informations ont été récupérées sans problème. Au lieu de restaurer tous les attributs comme dans le cas précédent, seuls les attributs que nous avons spécifiés dans et  ont été restaurés.

Identifier le type
Normalement, les objets créés par script devraient utiliser des propriétés pour stocker des informations, car celles-ci sont automatiquement restaurées à l'ouverture du document.

Cependant, il arrive que la classe restitue des informations internes qui ne sont pas destinées à être modifiées, mais qu'il est utile d'inspecter.

Par exemple, la plupart des objets de l'atelier Draft configurent un attribut qui peut être utilisé pour déterminer le type d'objet utilisé.

Tous les objets ont une propriété, mais pour les objets créés par script, cette propriété n'est pas utile car elle fait toujours référence à la classe C++ parente, par exemple, Part_Part2DObject/fr ou Part_Feature/fr. Par conséquent, le fait d'avoir cet attribut supplémentaire dans la classe est utile pour traiter chaque objet d'une manière particulière.

Migration de l'objet
Les informations de version peuvent être stockées à l'intérieur de la classe afin de vérifier l'origine d'un objet.

Si la structure de la classe change, c'est-à-dire si ses propriétés ou méthodes changent, sont renommées ou supprimées, nous pourrions tester l'attribut version afin de faire migrer l'ancien objet vers un nouvel ensemble de propriétés ou vers une nouvelle classe. Ceci peut être fait en implémentant la méthode, comme expliqué dans Migration d'objets créés par script.

Liens

 * Objets créés par script
 * Migration d'objets créés par script
 * Discussion sur le forum FreeCAD : Sérialisation des objets scripts : json ou pickle ?


 * obj.Proxy.Type est un dict, pas une chaîne de caractères, explication de et  dans le forum.
 * Le module Pickle dans la documentation Python.