Viewprovider/fr: Difference between revisions

From FreeCAD Documentation
(Created page with "Ils complètent les Objets définis par script. Alors que la classe de base de l'objet scripté définit ses propriétés des {{Emphas...")
No edit summary
 
(20 intermediate revisions by 3 users not shown)
Line 3: Line 3:
== Introduction ==
== Introduction ==


[[Viewprovider/fr|Viewproviders]] sont des classes qui définissent l'apparence des objets dans la [[tree_view/fr|vue en arborescence]] et la [[3D_view/fr|vue 3D]] et comment ils interagiront avec certaines actions graphiques telles que la [[selection/fr|sélection]].
Les [[Viewprovider/fr|Viewproviders]] sont des classes qui définissent l'apparence des objets dans la [[Tree_view/fr|vue en arborescence]] et la [[3D_view/fr|vue 3D]] et comment ces derniers interagiront avec certaines actions graphiques telles qu'une [[Selection_methods/fr|sélection]].


Ils complètent les [[scripted_objects/fr|Objets définis par script]]. Alors que la classe de base de l'objet scripté définit ses [[property/fr|propriétés]] des {{Emphasis|data}}, le viewprovider le définit les [[property/fr|propriétés]] de {{Emphasis|view}}. Ces propriétés de vue ne sont pas des informations essentielles de l'objet car elles n'indiquent que des informations superficielles telles que la largeur de ligne, la couleur de ligne, la couleur du visage, etc... Dans un terminal uniquement, le fournisseur de vue (viewprovider) n'est pas chargé car il n'y aura pas d'interface pour manipuler ces propriétés visibles.
Elles complètent les [[scripted_objects/fr|Objets définis par script]]. Alors que la classe de base de l'objet scripté définit les [[property/fr|propriétés]] de ses {{Emphasis|data}}, le viewprovider définit les [[property/fr|propriétés]] de {{Emphasis|view}}. Ces propriétés de vue ne sont pas des informations essentielles de l'objet car elles n'indiquent que des informations superficielles telles que la largeur de ligne, la couleur de ligne, la couleur du visage, etc... Dans un terminal uniquement, le fournisseur de vue (viewprovider) n'est pas chargé car il n'y aura pas d'interface pour manipuler ces propriétés visibles.


Comme pour les propriétés de données, les propriétés de vue sont accessibles à partir de l'[[Property_editor/fr|Éditeur de propriétés]].
Like with data properties, view properties are accessible from the [[property_editor|property editor]].


<span id="Python_view_providers"></span>
== Python view providers ==
== Viewproviders de Python ==


The viewproviders classes usually include {{incode|ViewProvider}} in their name. They are assigned on the {{incode|ViewObject}} attribute of the base object.
Les classes viewproviders incluent généralement {{incode|ViewProvider}} dans leur nom. Elles sont attribuées à l'attribut {{incode|ViewObject}} de l'objet de base.


Dans cet exemple, nous définissons deux propriétés pour le fournisseur de vues, uniquement si les propriétés n'existent pas déjà et attribuons leurs valeurs par défaut. Nous définissons également la méthode {{incode|onChanged}} qui s'exécute chaque fois qu'une propriété change. Nous devrons tester la propriété par son nom puis nous appellerons l'une des deux méthodes qui effectueront le travail réel de mise à jour du modèle ou de définition de sa taille.
In this example, we define two properties for the viewprovider, only if the properties don't already exist, and assign their default values. We also define the {{incode|onChanged}} method that runs every time a property changes. We need to test the property by name, and then we will call one of two methods that will do the actual work of updating the pattern or setting its size.
{{Code|code=
{{Code|code=
# views/view_custom.py
# views/view_custom.py
Line 53: Line 54:
}}
}}


The normal workflow is to first add the object proxy class, for example, {{incode|CustomObject}}, and then the viewprovider, for example, {{incode|ViewProviderCustom}}. The viewprovider can only be assigned when we have verified that the graphical interface is available, as otherwise the {{incode|ViewObject}} attribute doesn't exist, and it will be an error to use this element as input for our class.
Le flux de travail normal consiste à ajouter d'abord la classe proxy de l'objet, par exemple {{incode|CustomObject}}, puis le viewprovider, par exemple, {{incode|ViewProviderCustom}}. Le viewprovider ne peut être attribué que lorsque nous avons vérifié que l'interface graphique est disponible, sinon l'attribut {{incode|ViewObject}} n'existe pas et ce sera une erreur d'utiliser cet élément comme entrée pour notre classe.
{{Code|code=
{{Code|code=
import FreeCAD as App
import FreeCAD as App
Line 68: Line 69:
}}
}}


<span id="Custom_icons"></span>
== Custom icons ==
== Icônes personnalisées ==


By implementing the {{incode|getIcon}} method, you can specify the icon that will be shown in the [[tree_view|tree view]] in the upper part of the [[combo_view|combo view]].
En implémentant la méthode {{incode|getIcon}}, vous pouvez spécifier l'icône qui sera affichée dans la [[tree_view/fr|vue en arborescence]] dans la partie supérieure de la [[Combo_view/fr|Vue Combinée]].


La valeur de retour peut être le chemin d'accès complet à une icône.
The return value can be the full path to an icon.
{{Code|code=
{{Code|code=
import os
import os
Line 84: Line 86:
}}
}}


Le chemin relatif à une icône à l'intérieur d'un fichier de ressources compilé.
The relative path to an icon inside a compiled resource file.
{{Code|code=
{{Code|code=
import MyModule_rc.py
import MyModule_rc.py
Line 95: Line 97:
}}
}}


A raw [https://en.wikipedia.org/wiki/X_PixMap XPM icon], which is essentially ASCII art.
Une image brute [https://en.wikipedia.org/wiki/X_PixMap XPM icon], essentiellement de l'art ASCII.
{{Code|code=
{{Code|code=
import MyModule_rc.py
import MyModule_rc.py
Line 132: Line 134:
}}
}}


See various examples in [[Custom_icon_in_tree_view|Custom icon in tree view]].
Voir divers exemples dans [[Custom_icon_in_tree_view/fr|Icône personnalisée dans l'arborescence]].


{{Powerdocnavi{{#translation:}}}}
{{Powerdocnavi{{#translation:}}}}
[[Category:Developer Documentation{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]
{{clear}}
{{clear}}

Latest revision as of 21:41, 16 March 2023

Other languages:

Introduction

Les Viewproviders sont des classes qui définissent l'apparence des objets dans la vue en arborescence et la vue 3D et comment ces derniers interagiront avec certaines actions graphiques telles qu'une sélection.

Elles complètent les Objets définis par script. Alors que la classe de base de l'objet scripté définit les propriétés de ses data, le viewprovider définit les propriétés de view. Ces propriétés de vue ne sont pas des informations essentielles de l'objet car elles n'indiquent que des informations superficielles telles que la largeur de ligne, la couleur de ligne, la couleur du visage, etc... Dans un terminal uniquement, le fournisseur de vue (viewprovider) n'est pas chargé car il n'y aura pas d'interface pour manipuler ces propriétés visibles.

Comme pour les propriétés de données, les propriétés de vue sont accessibles à partir de l'Éditeur de propriétés.

Viewproviders de Python

Les classes viewproviders incluent généralement ViewProvider dans leur nom. Elles sont attribuées à l'attribut ViewObject de l'objet de base.

Dans cet exemple, nous définissons deux propriétés pour le fournisseur de vues, uniquement si les propriétés n'existent pas déjà et attribuons leurs valeurs par défaut. Nous définissons également la méthode onChanged qui s'exécute chaque fois qu'une propriété change. Nous devrons tester la propriété par son nom puis nous appellerons l'une des deux méthodes qui effectueront le travail réel de mise à jour du modèle ou de définition de sa taille.

# views/view_custom.py
class ViewProviderCustom:
    """Viewprovider of the custom object."""

    def __init__(self, vobj):
        self.Object = vobj.Object

        self._set_properties(vobj)
        vobj.Proxy = self

    def _set_properties(self, vobj):
        if not hasattr(vobj, "Pattern"):
            vobj.addProperty("App::PropertyEnumeration",
                             "Pattern",
                             "Custom",
                             "Defines a hatch pattern for this object.")
            vobj.Pattern = ["None", "diagonals", "cross", "brick"]

        if not hasattr(vobj, "PatternSize"):
            vobj.addProperty("App::PropertyFloat",
                             "PatternSize",
                             "Custom",
                             "Defines the size of the hatch pattern.")
            vobj.PatternSize = 1

    def onChanged(self, vobj, prop):
        if prop in "Pattern":
            self._set_pattern(vobj.Pattern)
        if prop in "PatternSize":
            self._set_size(vobj.PatternSize)

    def _set_pattern(self, pattern):
        ...

    def _set_size(self, size):
        ...

Le flux de travail normal consiste à ajouter d'abord la classe proxy de l'objet, par exemple CustomObject, puis le viewprovider, par exemple, ViewProviderCustom. Le viewprovider ne peut être attribué que lorsque nous avons vérifié que l'interface graphique est disponible, sinon l'attribut ViewObject n'existe pas et ce sera une erreur d'utiliser cet élément comme entrée pour notre classe.

import FreeCAD as App
import objects.custom as custom
import views.view_custom as view_custom

doc = App.newDocument()
obj = doc.addObject("Part::FeaturePython", "Custom")

custom.CustomObject(obj)

if App.GuiUp:
    view_custom.ViewProviderCustom(obj.ViewObject)

Icônes personnalisées

En implémentant la méthode getIcon, vous pouvez spécifier l'icône qui sera affichée dans la vue en arborescence dans la partie supérieure de la Vue Combinée.

La valeur de retour peut être le chemin d'accès complet à une icône.

import os
some_path = "/home/user/.FreeCAD/custom_icons"

class ViewProviderCustom:
    ...

    def getIcon(self):
        return os.path.join(some_path, "my_icon.svg")

Le chemin relatif à une icône à l'intérieur d'un fichier de ressources compilé.

import MyModule_rc.py

class ViewProviderCustom:
    ...

    def getIcon(self):
        return ":/icons/my_icon.svg"

Une image brute XPM icon, essentiellement de l'art ASCII.

import MyModule_rc.py

class ViewProviderCustom:
    ...

    def getIcon(self):
        return """
               /* XPM */
               static char *Some_icon_xpm[] = {
               /* columns rows colors chars-per-pixel */
               "16 16 3 1 ",
               "  c None",
               ". c #D71414",
               "+ c #AA1919",
               /* pixels */
               "                ",
               "  +          +  ",
               " +.+        +.+ ",
               "  +.+      +.+  ",
               "   +        +   ",
               "      ++++      ",
               "     +....+     ",
               "     +...++     ",
               "     +..+++     ",
               "     +.++.+     ",
               "      ++++      ",
               "   +        +   ",
               "  +.+      +.+  ",
               " +.+        +.+ ",
               "  +          +  ",
               "                "
               };
               """

Voir divers exemples dans Icône personnalisée dans l'arborescence.