Viewprovider/fr: Difference between revisions

From FreeCAD Documentation
(Created page with "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|ViewProvider...")
(Created page with "== Icônes personnalisées ==")
Line 68: Line 68:
}}
}}


== 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]].
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]].

Revision as of 12:46, 1 June 2020

Other languages:

Introduction

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

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 data, le viewprovider le 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.

Fournisseurs de vues Python

Les classes viewproviders incluent généralement ViewProvider dans leur nom. Ils sont attribués à 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 devons 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

By implementing the getIcon method, you can specify the icon that will be shown in the tree view in the upper part of the combo view.

The return value can be the full path to an icon.

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

class ViewProviderCustom:
    ...

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

The relative path to an icon inside a compiled resource file.

import MyModule_rc.py

class ViewProviderCustom:
    ...

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

A raw XPM icon, which is essentially ASCII art.

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 */
               "                ",
               "  +          +  ",
               " +.+        +.+ ",
               "  +.+      +.+  ",
               "   +        +   ",
               "      ++++      ",
               "     +....+     ",
               "     +...++     ",
               "     +..+++     ",
               "     +.++.+     ",
               "      ++++      ",
               "   +        +   ",
               "  +.+      +.+  ",
               " +.+        +.+ ",
               "  +          +  ",
               "                "
               };
               """

See various examples in Custom icon in tree view.