Viewprovider/pl: Difference between revisions
(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== |
||
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== |
|||
Klasy viewprovider zazwyczaj zawierają w nazwie ciąg {{incode|ViewProvider}}. Są 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: | ||
}} |
}} |
||
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: | ||
}} |
}} |
||
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: | ||
}} |
}} |
||
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.
- Tworzenie skryptów FreeCAD: Python, Wprowadzenie do środowiska Python, Poradnik: Tworzenie skryptów Python, Podstawy tworzenia skryptów FreeCAD
- Moduły: Moduły wbudowane, Jednostki miar, Ilość
- Środowiska pracy: Tworzenie Środowiska pracy, Polecenia Gui, Polecenia, Instalacja większej liczby Środowisk pracy
- Siatki i elementy: Skrytpy w Środowisku Siatek, v, Konwerska Mesh na Part, PythonOCC
- Obiekty parametryczne: Obiekty tworzone skryptami, Obsługa obrazu (Ikonka niestandardowa w widoku drzewa)
- Scenegraph: Coin (Inventor) scenegraph, Pivy
- Interfejs graficzny: Stworzenie interfejsu, Kompletne stworzenie interfejsu w środowisku Python (1, 2, 3, 4, 5), PySide, PySide examples początkujący, średniozaawansowany, zaawansowany
- Makrodefinicje: Makrodefinicje, Instalacja makrodefinicji
- Osadzanie programu: Osadzanie programu FreeCAD, Osadzanie GUI FreeCAD
- Pozostałe: Wyrażenia, Wycinki kodu, Funkcja kreślenia linii, Biblioteka matematyczna FreeCAD dla wektorów (deprecated)
- Węzły użytkowników: Centrum użytkownika, Centrum Power użytkowników, Centrum programisty