Viewprovider/de: Difference between revisions

From FreeCAD Documentation
(Created page with "== Einleitung ==")
(Created page with "Siehe verschiedene Beispiele unter Individuelles Symbol in der Baumansicht.")
 
(16 intermediate revisions by the same user not shown)
Line 1: Line 1:
<languages/>
<languages/>


<span id="Introduction"></span>
== Einleitung ==
== Einleitung ==


[[Viewprovider|Viewproviders]] are classes that define the way objects will look like in the [[tree_view|tree view]] and the [[3D_view|3D view]], and how they will interact with certain graphical actions such as [[Selection_methods|selection]].
[[Viewprovider/de|Viewprovider]] sind Klassen, die festlegen, wie Objekte in der [[tree_view/de|Baumansicht]] und der [[3D_view/de|3D-Ansicht]] aussehen und wie sie mit bestimmten grafischen Aktionen, wie z.B [[Selection_methods/de|Auswahl]] zusammenarbeiten.


Sie ergänzen die [[scripted_objects/de|skriptgenerierten Objekte]]. Während die Basis-Klasse des skriptgenerierten Objekts seine {{Emphasis|Daten-}} [[property/de|Eigenschaften]] festlegt, definiert der Viewprovider seine {{Emphasis|Ansichts-}} [[property/de|Eigenschaften]]. Diese Ansichts-Eigenschaften stellen keine wesentlichen Informationen des Objekts dar, da sie nur Informationen zur Darstellung enthalten, wie Linienbreite, Linienfarbe, Flächenfarbe usw. Für eine reine Terminal-Sitzung wird der Viewprovider nicht geladen, da keine Schnittstelle zum Bearbeiten dieser sichtbaren Eigenschaften vorhanden ist.
They complement the [[scripted_objects|scripted objects]]. While the base class of the scripted object defines its {{Emphasis|data}} [[property|properties]], the viewprovider defines it {{Emphasis|view}} [[property|properties]]. These view properties are not essential information of the object, as they only indicate superficial information like line width, line color, face color, etc. In a terminal only session, the viewprovider is not loaded because there will be no interface to manipulate those visible properties.


Wie auch Daten-Eigenschaften sind die Ansichts-Eigenschaften durch den [[property_editor/de|Eigenschafteneditor]] erreichbar.
Like with data properties, view properties are accessible from the [[property_editor|property editor]].


<span id="Python_view_providers"></span>
== Python view providers ==
== Python-Viewprovider ==


The viewproviders classes usually include {{incode|ViewProvider}} in their name. They are assigned on the {{incode|ViewObject}} attribute of the base object.
Die Klassen der Viewprovider haben normalerweise {{incode|ViewProvider}} im Namen. Sie sind dem Attribut {{incode|ViewObject}} des Basisobjekts zugeordnet.


In diesem Beispiel werden zwei Eigenschaften für den Viewprovider festgelegt und ihnen Werte zugewiesen, wenn sie nicht schon existieren. Außerdem wird die Methode {{incode|onChanged}} erstellt, die jedesmal abläuft, wenn sich eine Eigenschaft ändert. Der Name der Eigenschaft muss überprüft werden und danach werden ein oder zwei Methoden aufgerufen, die die eigentliche Arbeit verrichten, das Aktualisieren der Muster oder die Aktualisierung seiner Größe.
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 55:
}}
}}


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.
Der übliche Arbeitsablauf ist, zuerst eine Proxy-Klasse wie z.B. {{incode|CustomObject}} hinzuzufügen und danach den Viewprovider z.B. {{incode|ViewProviderCustom}}. Der Viewprovider kann nur zugeordnet werden, wenn sichergestellt ist, dass die grafische Benutzerschnittstelle zur Verfügung steht, andernfalls wird es kein Attribut {{incode|ViewObject}} geben und es wäre ein Fehler dieses Element als Eingabe für diese Klasse zu verwenden.
{{Code|code=
{{Code|code=
import FreeCAD as App
import FreeCAD as App
Line 68: Line 70:
}}
}}


<span id="Custom_icons"></span>
== Custom icons ==
==Eigene Symbole==


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]].
Wird die Methode {{incode|getIcon}} angelegt, kann damit das Symbol festgelegt werden, das in der [[tree_view/de|Baumansicht]] im oberen Teil der [[combo_view/de|Combo-Ansicht]] angezeigt wird.


Der Rückgabewert kann der komplette Pfad zu einem Symbol sein.
The return value can be the full path to an icon.
{{Code|code=
{{Code|code=
import os
import os
Line 84: Line 87:
}}
}}


The relative path to an icon inside a compiled resource file.
Der relative Pfad zu einem Symbol innerhalb einer kompilierten Quelldatei.
{{Code|code=
{{Code|code=
import MyModule_rc.py
import MyModule_rc.py
Line 95: Line 98:
}}
}}


A raw [https://en.wikipedia.org/wiki/X_PixMap XPM icon], which is essentially ASCII art.
Ein [https://de.wikipedia.org/wiki/X_PixMap XPM-Symbol], das im Grunde ASCII-Kunst ist.
{{Code|code=
{{Code|code=
import MyModule_rc.py
import MyModule_rc.py
Line 132: Line 135:
}}
}}


See various examples in [[Custom_icon_in_tree_view|Custom icon in tree view]].
Siehe verschiedene Beispiele unter [[Custom_icon_in_tree_view/de|Individuelles Symbol in der Baumansicht]].


{{Powerdocnavi{{#translation:}}}}
{{Powerdocnavi{{#translation:}}}}

Latest revision as of 13:09, 16 February 2023

Einleitung

Viewprovider sind Klassen, die festlegen, wie Objekte in der Baumansicht und der 3D-Ansicht aussehen und wie sie mit bestimmten grafischen Aktionen, wie z.B Auswahl zusammenarbeiten.

Sie ergänzen die skriptgenerierten Objekte. Während die Basis-Klasse des skriptgenerierten Objekts seine Daten- Eigenschaften festlegt, definiert der Viewprovider seine Ansichts- Eigenschaften. Diese Ansichts-Eigenschaften stellen keine wesentlichen Informationen des Objekts dar, da sie nur Informationen zur Darstellung enthalten, wie Linienbreite, Linienfarbe, Flächenfarbe usw. Für eine reine Terminal-Sitzung wird der Viewprovider nicht geladen, da keine Schnittstelle zum Bearbeiten dieser sichtbaren Eigenschaften vorhanden ist.

Wie auch Daten-Eigenschaften sind die Ansichts-Eigenschaften durch den Eigenschafteneditor erreichbar.

Python-Viewprovider

Die Klassen der Viewprovider haben normalerweise ViewProvider im Namen. Sie sind dem Attribut ViewObject des Basisobjekts zugeordnet.

In diesem Beispiel werden zwei Eigenschaften für den Viewprovider festgelegt und ihnen Werte zugewiesen, wenn sie nicht schon existieren. Außerdem wird die Methode onChanged erstellt, die jedesmal abläuft, wenn sich eine Eigenschaft ändert. Der Name der Eigenschaft muss überprüft werden und danach werden ein oder zwei Methoden aufgerufen, die die eigentliche Arbeit verrichten, das Aktualisieren der Muster oder die Aktualisierung seiner Größe.

# 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):
        ...

Der übliche Arbeitsablauf ist, zuerst eine Proxy-Klasse wie z.B. CustomObject hinzuzufügen und danach den Viewprovider z.B. ViewProviderCustom. Der Viewprovider kann nur zugeordnet werden, wenn sichergestellt ist, dass die grafische Benutzerschnittstelle zur Verfügung steht, andernfalls wird es kein Attribut ViewObject geben und es wäre ein Fehler dieses Element als Eingabe für diese Klasse zu verwenden.

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)

Eigene Symbole

Wird die Methode getIcon angelegt, kann damit das Symbol festgelegt werden, das in der Baumansicht im oberen Teil der Combo-Ansicht angezeigt wird.

Der Rückgabewert kann der komplette Pfad zu einem Symbol sein.

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

class ViewProviderCustom:
    ...

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

Der relative Pfad zu einem Symbol innerhalb einer kompilierten Quelldatei.

import MyModule_rc.py

class ViewProviderCustom:
    ...

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

Ein XPM-Symbol, das im Grunde ASCII-Kunst ist.

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

Siehe verschiedene Beispiele unter Individuelles Symbol in der Baumansicht.