Viewprovider/fr: Difference between revisions
(Created page with "== Icônes personnalisées ==") |
No edit summary |
||
(14 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 [[ |
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]]. |
||
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]]. |
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]]. |
||
<span id="Python_view_providers"></span> |
|||
== |
== Viewproviders de Python == |
||
Les classes viewproviders incluent généralement {{incode|ViewProvider}} dans leur nom. |
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 |
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. |
||
{{Code|code= |
{{Code|code= |
||
# views/view_custom.py |
# views/view_custom.py |
||
Line 68: | Line 69: | ||
}} |
}} |
||
<span id="Custom_icons"></span> |
|||
== Icônes personnalisées == |
== Icônes personnalisées == |
||
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: | ||
}} |
}} |
||
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: | ||
}} |
}} |
||
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
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.
- Scripts FreeCAD : Python, Introduction à Python, Tutoriel sur les scripts Python, Débuter avec les scripts
- Modules : Modules intégrés, Unités, Quantity
- Ateliers : Création d'atelier, Commands Gui, Les commandes, Installer des ateliers supplémentaires
- Maillages et objets Parts : Scripts Mesh, Script de données topologiques, Conversion objet Mesh en Part, PythonOCC
- Objets paramétriques : Objets créés par script, Viewproviders (Icône personnalisée dans l'arborescence)
- Scénographie : Graphe de scène Coin (Inventor), Pivy
- Interface graphique : Création d'interface, Création d'une boite de dialogue (1, 2, 3, 4, 5), PySide, Exemples PySide débutant, intermédiaire, expérimenté
- Macros : Macros, Comment installer des macros
- Intégration : Intégrer FreeCAD, Intégration de FreeCADGui
- Autre : Expressions, Extraits de codes, Fonction - tracer une ligne, Bibliothèque mathématique vectorielle de FreeCAD (déprécié)