Viewprovider/fr: Difference between revisions
(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...") |
(Created page with "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.") |
||
Line 7: | Line 7: | ||
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. |
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. |
||
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]]. |
|||
== Python view providers == |
== Python view providers == |
Revision as of 12:43, 1 June 2020
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.
Python view providers
The viewproviders classes usually include ViewProvider
in their name. They are assigned on the ViewObject
attribute of the base object.
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 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.
# 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):
...
The normal workflow is to first add the object proxy class, for example, CustomObject
, and then the viewprovider, for example, ViewProviderCustom
. The viewprovider can only be assigned when we have verified that the graphical interface is available, as otherwise the ViewObject
attribute doesn't exist, and it will be an error to use this element as input for our class.
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)
Custom icons
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.
- 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é)