Viewprovider/pl: Difference between revisions

From FreeCAD Documentation
(Created page with "==Wprowadzenie==")
(Created page with "Podobnie jak w przypadku właściwości danych, właściwości widoku są dostępne z poziomu edytora własciwości.")
 
(12 intermediate revisions by the same user not shown)
Line 4: Line 4:
==Wprowadzenie==
==Wprowadzenie==


[[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]].
Dostawcy widoku to klasy, które definiują sposób, w jaki obiekty będą wyglądać w oknie [[Tree_view/pl|widoku drzewa]] i [[3D_view/pl|widoku 3D]], oraz jak będą współdziałać z niektórymi akcjami graficznymi, takimi jak [[Selection_methods/pl|zaznaczanie]] obiektów.


Uzupełniają one [[Scripted_objects/pl|obiekty tworzone skryptami]]. Podczas gdy klasa bazowa obiektu skryptowego definiuje jego [[Property/pl|właściwości]] {{Emphasis|dane}}, viewprovider definiuje jego [[Property/pl|właściwości]] {{Emphasis|widok}}. Te właściwości widoku nie są istotnymi informacjami o obiekcie, ponieważ wskazują tylko powierzchowne informacje, takie jak szerokość linii, kolor linii, kolor powierzchni itp. W sesji terminalowej dostawca widoku nie jest ładowany, ponieważ nie będzie interfejsu do manipulowania tymi widocznymi właściwościami.
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.


Podobnie jak w przypadku właściwości danych, właściwości widoku są dostępne z poziomu [[Property_editor/pl|edytora własciwości]].
Like with data properties, view properties are accessible from the [[property_editor|property editor]].


<span id="Python_view_providers"></span>
== Python view providers ==
==Dostawcy widoków Python==


The viewproviders classes usually include {{incode|ViewProvider}} in their name. They are assigned on the {{incode|ViewObject}} attribute of the base object.
Klasy viewprovider zazwyczaj zawierają w nazwie ciąg {{incode|ViewProvider}}. one przypisywane do atrybutu {{incode|ViewObject}} obiektu bazowego.


W tym przykładzie definiujemy dwie właściwości dla Dostawcy widoku, tylko jeśli właściwości jeszcze nie istnieją, i przypisujemy im wartości domyślne. Definiujemy również metodę {{incode|onChanged}}, która jest uruchamiana za każdym razem, gdy zmienia się właściwość. Musimy przetestować właściwość według nazwy, a następnie wywołamy jedną z dwóch metod, które wykonają rzeczywistą pracę polegającą na aktualizacji wzorca lub ustawieniu jego rozmiaru.
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 54: 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.
Normalnym przepływem pracy jest dodanie najpierw klasy proxy obiektu, na przykład {{incode|CustomObject}}, a następnie dostawcy widoku, na przykład {{incode|ViewProviderCustom}}. Viewprovider może być przypisany tylko wtedy, gdy zweryfikowaliśmy, że interfejs graficzny jest dostępny, ponieważ w przeciwnym razie atrybut {{incode|ViewObject}} nie istnieje, a użycie tego elementu jako danych wejściowych dla naszej klasy będzie błędem.
{{Code|code=
{{Code|code=
import FreeCAD as App
import FreeCAD as App
Line 69: Line 70:
}}
}}


<span id="Custom_icons"></span>
== Custom icons ==
==Ikonki użytkownika==


Implementując metodę {{incode|getIcon}}, można zdefiniować ikonkę, która będzie wyświetlana w [[Tree_view/pl|widok drzewa]] w górnej części [[Combo_view/pl|widoku połączonego]].
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]].


Wartością zwrotną może być pełna ścieżka do ikony.
The return value can be the full path to an icon.
{{Code|code=
{{Code|code=
import os
import os
Line 85: Line 87:
}}
}}


Względna ścieżka do ikony w skompilowanym pliku zasobów.
The relative path to an icon inside a compiled resource file.
{{Code|code=
{{Code|code=
import MyModule_rc.py
import MyModule_rc.py
Line 96: Line 98:
}}
}}


A raw [https://en.wikipedia.org/wiki/X_PixMap XPM icon], which is essentially ASCII art.
Nieobrobiona [https://en.wikipedia.org/wiki/X_PixMap Ikona XPM], która jest zasadniczo grafiką ASCII.
{{Code|code=
{{Code|code=
import MyModule_rc.py
import MyModule_rc.py
Line 133: Line 135:
}}
}}


See various examples in [[Custom_icon_in_tree_view|Custom icon in tree view]].
Zobacz różne przykłady na stronie [[Custom_icon_in_tree_view/pl|Własna ikona w widoku drzewa]].


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

Latest revision as of 13:50, 25 January 2024

Wprowadzenie

Dostawcy widoku to klasy, które definiują sposób, w jaki obiekty będą wyglądać w oknie widoku drzewa i widoku 3D, oraz jak będą współdziałać z niektórymi akcjami graficznymi, takimi jak zaznaczanie obiektów.

Uzupełniają one obiekty tworzone skryptami. Podczas gdy klasa bazowa obiektu skryptowego definiuje jego właściwości dane, viewprovider definiuje jego właściwości widok. Te właściwości widoku nie są istotnymi informacjami o obiekcie, ponieważ wskazują tylko powierzchowne informacje, takie jak szerokość linii, kolor linii, kolor powierzchni itp. W sesji terminalowej dostawca widoku nie jest ładowany, ponieważ nie będzie interfejsu do manipulowania tymi widocznymi właściwościami.

Podobnie jak w przypadku właściwości danych, właściwości widoku są dostępne z poziomu edytora własciwości.

Dostawcy widoków Python

Klasy viewprovider zazwyczaj zawierają w nazwie ciąg ViewProvider. Są one przypisywane do atrybutu ViewObject obiektu bazowego.

W tym przykładzie definiujemy dwie właściwości dla Dostawcy widoku, tylko jeśli właściwości jeszcze nie istnieją, i przypisujemy im wartości domyślne. Definiujemy również metodę onChanged, która jest uruchamiana za każdym razem, gdy zmienia się właściwość. Musimy przetestować właściwość według nazwy, a następnie wywołamy jedną z dwóch metod, które wykonają rzeczywistą pracę polegającą na aktualizacji wzorca lub ustawieniu jego rozmiaru.

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

Normalnym przepływem pracy jest dodanie najpierw klasy proxy obiektu, na przykład CustomObject, a następnie dostawcy widoku, na przykład ViewProviderCustom. Viewprovider może być przypisany tylko wtedy, gdy zweryfikowaliśmy, że interfejs graficzny jest dostępny, ponieważ w przeciwnym razie atrybut ViewObject nie istnieje, a użycie tego elementu jako danych wejściowych dla naszej klasy będzie błędem.

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)

Ikonki użytkownika

Implementując metodę getIcon, można zdefiniować ikonkę, która będzie wyświetlana w widok drzewa w górnej części widoku połączonego.

Wartością zwrotną może być pełna ścieżka do ikony.

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

class ViewProviderCustom:
    ...

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

Względna ścieżka do ikony w skompilowanym pliku zasobów.

import MyModule_rc.py

class ViewProviderCustom:
    ...

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

Nieobrobiona Ikona XPM, która jest zasadniczo grafiką 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 */
               "                ",
               "  +          +  ",
               " +.+        +.+ ",
               "  +.+      +.+  ",
               "   +        +   ",
               "      ++++      ",
               "     +....+     ",
               "     +...++     ",
               "     +..+++     ",
               "     +.++.+     ",
               "      ++++      ",
               "   +        +   ",
               "  +.+      +.+  ",
               " +.+        +.+ ",
               "  +          +  ",
               "                "
               };
               """

Zobacz różne przykłady na stronie Własna ikona w widoku drzewa.