Pivy/pl: Difference between revisions
(Updating to match new version of source page) |
No edit summary |
||
(36 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
<languages/> |
<languages/> |
||
{{Docnav |
{{Docnav/pl |
||
|[[Scenegraph| |
|[[Scenegraph/pl|Scenogram]] |
||
|[[PySide|PySide]] |
|[[PySide/pl|PySide]] |
||
}} |
}} |
||
{{TOCright}} |
{{TOCright}} |
||
== |
==Wprowadzenie== |
||
[[Pivy|Pivy]] |
[[Pivy/pl|Pivy]] jest biblioteką wiążącą [[Python/pl|Python]] do [https://github.com/coin3d Coin], biblioteką renderowania 3D używaną w FreeCAD do wyświetlania obiektów w oknie [[3D_view/pl|widoku 3D]]. Coin jest otwartą implementacją specyfikacji "Open Inventor" do obsługi grafiki. Dlatego w środowisku FreeCAD terminy ''Pivy'', ''Coin'' lub ''Open Inventor'' odnoszą się zasadniczo do tego samego. |
||
Po zaimportowaniu do działającego interpretera Python, Pivy pozwala nam na bezpośrednią komunikację z dowolnym działającym [[Scenegraph/pl|scenegrafem]] Coin, takim jak [[3D_view/pl|widok 3D]], a nawet na tworzenie nowych. Pivy nie jest wymagany do kompilacji FreeCAD, ale jest wymagany podczas uruchamiania opartych na Pythonie środowisk pracy, które tworzą kształty na ekranie, takich jak [[Draft_Workbench/pl|Rysunek Roboczy]] i [[Arch_Workbench/pl|Architektura]]. Z tego powodu, Pivy jest zwykle instalowany podczas instalacji programu FreeCAD. |
|||
Biblioteka Coin jest podzielona na kilka części, sam Coin do manipulowania scenegrafami oraz wiązania dla kilku systemów GUI, takich jak Windows i Qt. Jeśli są obecne w systemie, moduły te są również dostępne dla Pivy. Moduł Coin jest zawsze obecny i to właśnie z niego będziemy korzystać, ponieważ nie będziemy musieli dbać o zakotwiczenie naszego wyświetlacza 3D w jakimkolwiek interfejsie, to już robi FreeCAD. Jedyne co musimy zrobić to: |
|||
The Coin library is divided into several pieces, Coin itself for manipulating scenegraphs, and bindings for several GUI systems, such as Windows and Qt. If present on the system, those modules are available to Pivy as well. The Coin module is always present, and it is what we will use anyway, since we won't need to care about anchoring our 3D display in any interface, that is already done by FreeCAD. All we need to do is this: |
|||
{{Code|code= |
{{Code|code= |
||
Line 20: | Line 20: | ||
}} |
}} |
||
== |
==Scenograf== |
||
Na stronie [[Scenegraph/pl|Scenogram]] zobaczyliśmy, jak zorganizowana jest typowa scena Coin. Wszystko, co pojawia się w oknie [[3D_view/pl|widoku 3D]] jest scenegrafem Coin, zorganizowanym w ten sam sposób. Mamy jeden węzeł główny, a wszystkie obiekty na ekranie są jego produktami pochodnymi. |
|||
FreeCAD posiada łatwy sposób dostępu do węzła głównego scenegrafu widoku 3D: |
|||
FreeCAD has an easy way to access the root node of a 3D view scenegraph: |
|||
{{Code|code= |
{{Code|code= |
||
Line 31: | Line 31: | ||
}} |
}} |
||
Spowoduje to zwrócenie węzła głównego: |
|||
This will return the root node: |
|||
{{Code|code= |
{{Code|code= |
||
Line 37: | Line 37: | ||
}} |
}} |
||
Możemy skontrolować bezpośrednie obiekty pochodne naszej sceny: |
|||
We can inspect the immediate children of our scene: |
|||
{{Code|code= |
{{Code|code= |
||
Line 44: | Line 44: | ||
}} |
}} |
||
Niektóre z tych węzłów, takie jak {{incode|SoSeparator}} czy {{incode|SoGroup}}, mogą mieć same elementy pochodne. Pełną listę dostępnych obiektów Coin można znaleźć w oficjalnej dokumentacji Coin. |
|||
Spróbujmy teraz dodać coś do naszego scenegrafu. Dodamy ładny czerwony sześcian: |
|||
Let's try to add something to our scenegraph now. We'll add a nice red cube: |
|||
{{Code|code= |
{{Code|code= |
||
Line 58: | Line 58: | ||
}} |
}} |
||
A teraz spróbujmy tego: |
|||
Now, let's try this: |
|||
{{Code|code= |
{{Code|code= |
||
Line 64: | Line 64: | ||
}} |
}} |
||
Jak widać wszystko jest nadal dostępne i modyfikowalne w locie. Nie trzeba niczego rekompilować ani przerysowywać, Coin zajmuje się wszystkim. Możesz dodawać obiekty do swojego scenegrafu, zmieniać właściwości, ukrywać je, pokazywać obiekty tymczasowe, cokolwiek zechcesz. Oczywiście, dotyczy to tylko wyświetlania w widoku 3D. Ten widok jest ponownie obliczany przez FreeCAD przy otwieraniu pliku, oraz gdy obiekt wymaga ponownego obliczenia. Tak więc, jeśli zmienisz aspekt istniejącego obiektu FreeCAD, zmiany te zostaną utracone, gdy obiekt zostanie ponownie obliczony lub gdy ponownie otworzysz plik. |
|||
As you can see everything is still accessible and modifiable on-the-fly. No need to recompute or redraw anything, Coin takes care of everything. You can add stuff to your scenegraph, change properties, hide stuff, show temporary objects, anything. Of course, this only concerns the display in the 3D view. That display gets recomputed by FreeCAD on file open, and when an object needs recomputing. So, if you change the aspect of an existing FreeCAD object, those changes will be lost if the object gets recomputed or when you reopen the file. |
|||
Jak już wspomniano, w scenegrafie OpenInventor kolejność jest ważna. Węzeł wpływa na to, co będzie następne. Przykładowo, jeśli chcemy mieć możliwość przesuwania naszego sześcianu, będziemy musieli dodać węzeł {{incode|SoTranslation}} {{Emphasis|przed}} sześcianem: |
|||
{{Code|code= |
{{Code|code= |
||
Line 81: | Line 81: | ||
}} |
}} |
||
Aby przesunąć nasz sześcian możemy teraz zrobić: |
|||
To move our cube we can now do: |
|||
{{Code|code= |
{{Code|code= |
||
Line 87: | Line 87: | ||
}} |
}} |
||
Wreszcie usunięcie czegoś jest załatwione: |
|||
Finally, removing something is done with: |
|||
{{Code|code= |
{{Code|code= |
||
sg.removeChild(myCustomNode) |
sg.removeChild(myCustomNode) |
||
}} |
}} |
||
⚫ | |||
==Informacje zwrotne== |
|||
Mechanizm [http://en.wikipedia.org/wiki/Callback_%28computer_science%29 callback] to system, który pozwala bibliotece, takiej jak nasza biblioteka Coin, na odpowiadanie, czyli wywoływanie określonej funkcji z aktualnie uruchomionego obiektu Python. W ten sposób Coin może powiadomić Cię, że w scenie wystąpiło jakieś konkretne zdarzenie. Coin może obserwować bardzo różne rzeczy, takie jak pozycja myszy, kliknięcia przycisków myszy, wciśnięte klawisze klawiatury i wiele innych. |
|||
[[#top|top]] |
|||
FreeCAD posiada łatwy sposób na wykorzystanie takich wywołań zwrotnych: |
|||
==Callbacks== |
|||
A [http://en.wikipedia.org/wiki/Callback_%28computer_science%29 callback mechanism] is a system that permits a library, such as our Coin library, to call you back, that is, to call a certain function from your currently running Python object. That way Coin can notify you that some specific event occurred in the scene. Coin can watch very different things, such as mouse position, mouse button clicks, keyboard keys being pressed, and many more. |
|||
FreeCAD features an easy way to use such callbacks: |
|||
{{Code|code= |
{{Code|code= |
||
Line 118: | Line 116: | ||
}} |
}} |
||
Wywołanie zwrotne musi być zainicjowane z obiektu, ponieważ ten obiekt musi być nadal uruchomiony, gdy nastąpi wywołanie zwrotne. |
|||
The callback has to be initiated from an object, because that object must still be running when the callback occurs. |
|||
Zobacz także [[Code_snippets/pl#Obserwowanie_zdarze.C5.84_myszy_w_przegl.C4.85darce_3D_za_pomoc.C4.85_.C5.9Brodowiska_Python|kompletną listę]] możliwych zdarzeń i ich parametrów, lub oficjalną dokumentację Coin. |
|||
See also a [[Code_snippets#Observing_mouse_events_in_the_3D_viewer_via_Python|complete list]] of possible events and their parameters, or the official Coin documentation. |
|||
{{Top}} |
|||
==Dokumentacja== |
|||
Niestety, Pivy nie ma własnej dokumentacji. Ponieważ jednak jest to dokładny wrapper biblioteki Coin, możesz przeczytać referencję C ++ w celu uzyskania informacji. W tym przypadku musisz przetłumaczyć styl nazewnictwa klas C ++ na styl Pythona. |
|||
[[#top|top]] |
|||
⚫ | |||
==Documentation== |
|||
Unfortunately, Pivy doesn't have its own documentation. However, since it is an accurate wrapper of the Coin library, you can read the C++ reference for information. In this case, you need to translate the C++ class naming style to Python style. |
|||
⚫ | |||
{{Code|code= |
{{Code|code= |
||
Line 133: | Line 129: | ||
}} |
}} |
||
W Pivy: |
|||
{{Code|code= |
{{Code|code= |
||
Line 139: | Line 135: | ||
}} |
}} |
||
* [https://github.com/coin3d Coin3D] |
* [https://github.com/coin3d Coin3D] strona domowa. |
||
* [https://github.com/coin3d/pivy Pivy] |
* [https://github.com/coin3d/pivy Pivy] strona domowa. |
||
* [https:// |
* [https://github.com/coin3d/coin/wiki Coin3D wiki], na GitHubie. |
||
* [https://github.com/coin3d/coin/wiki/Documentation dokumentacja Wiki dla Coin3D], na GitHubie. |
|||
⚫ | |||
* [https://coin3d.github.io/Coin/html/ Coin3D Documentation], najnowsza, automatycznie generowana dokumentacja Doxygen. |
|||
⚫ | |||
* [https://webdocs.cs.ualberta.ca/~graphics/books/mentor.pdf (Open)Inventor Mentor] - zalecane. |
|||
===Starsze=== |
|||
Te linki dostarczają dokumentacji referencyjnej dla Coin v3.x. Różnice w stosunku do v4.x są minimalne, więc nadal mogą one być przydatne. |
|||
⚫ | |||
[[#top|top]] |
|||
* [https://grey.colorado.edu/coin3d/index.html dokumentacja Coin3D], na University of Colorado. |
|||
⚫ | |||
{{Top}} |
|||
{{Docnav |
{{Docnav/pl |
||
|[[Scenegraph| |
|[[Scenegraph/pl|Scenogram]] |
||
|[[PySide|PySide]] |
|[[PySide/pl|PySide]] |
||
}} |
}} |
||
Line 155: | Line 159: | ||
[[Category:Developer Documentation{{#translation:}}]] |
[[Category:Developer Documentation{{#translation:}}]] |
||
[[Category:Python Code{{#translation:}}]] |
[[Category:Python Code{{#translation:}}]] |
||
⚫ |
Latest revision as of 17:41, 30 December 2022
Wprowadzenie
Pivy jest biblioteką wiążącą Python do Coin, biblioteką renderowania 3D używaną w FreeCAD do wyświetlania obiektów w oknie widoku 3D. Coin jest otwartą implementacją specyfikacji "Open Inventor" do obsługi grafiki. Dlatego w środowisku FreeCAD terminy Pivy, Coin lub Open Inventor odnoszą się zasadniczo do tego samego.
Po zaimportowaniu do działającego interpretera Python, Pivy pozwala nam na bezpośrednią komunikację z dowolnym działającym scenegrafem Coin, takim jak widok 3D, a nawet na tworzenie nowych. Pivy nie jest wymagany do kompilacji FreeCAD, ale jest wymagany podczas uruchamiania opartych na Pythonie środowisk pracy, które tworzą kształty na ekranie, takich jak Rysunek Roboczy i Architektura. Z tego powodu, Pivy jest zwykle instalowany podczas instalacji programu FreeCAD.
Biblioteka Coin jest podzielona na kilka części, sam Coin do manipulowania scenegrafami oraz wiązania dla kilku systemów GUI, takich jak Windows i Qt. Jeśli są obecne w systemie, moduły te są również dostępne dla Pivy. Moduł Coin jest zawsze obecny i to właśnie z niego będziemy korzystać, ponieważ nie będziemy musieli dbać o zakotwiczenie naszego wyświetlacza 3D w jakimkolwiek interfejsie, to już robi FreeCAD. Jedyne co musimy zrobić to:
from pivy import coin
Scenograf
Na stronie Scenogram zobaczyliśmy, jak zorganizowana jest typowa scena Coin. Wszystko, co pojawia się w oknie widoku 3D jest scenegrafem Coin, zorganizowanym w ten sam sposób. Mamy jeden węzeł główny, a wszystkie obiekty na ekranie są jego produktami pochodnymi.
FreeCAD posiada łatwy sposób dostępu do węzła głównego scenegrafu widoku 3D:
sg = FreeCADGui.ActiveDocument.ActiveView.getSceneGraph()
print(sg)
Spowoduje to zwrócenie węzła głównego:
<pivy.coin.SoSelection; proxy of <Swig Object of type 'SoSelection *' at 0x360cb60> >
Możemy skontrolować bezpośrednie obiekty pochodne naszej sceny:
for node in sg.getChildren():
print(node)
Niektóre z tych węzłów, takie jak SoSeparator
czy SoGroup
, mogą mieć same elementy pochodne. Pełną listę dostępnych obiektów Coin można znaleźć w oficjalnej dokumentacji Coin.
Spróbujmy teraz dodać coś do naszego scenegrafu. Dodamy ładny czerwony sześcian:
col = coin.SoBaseColor()
col.rgb = (1, 0, 0)
cub = coin.SoCube()
myCustomNode = coin.SoSeparator()
myCustomNode.addChild(col)
myCustomNode.addChild(cub)
sg.addChild(myCustomNode)
A teraz spróbujmy tego:
col.rgb = (1, 1, 0)
Jak widać wszystko jest nadal dostępne i modyfikowalne w locie. Nie trzeba niczego rekompilować ani przerysowywać, Coin zajmuje się wszystkim. Możesz dodawać obiekty do swojego scenegrafu, zmieniać właściwości, ukrywać je, pokazywać obiekty tymczasowe, cokolwiek zechcesz. Oczywiście, dotyczy to tylko wyświetlania w widoku 3D. Ten widok jest ponownie obliczany przez FreeCAD przy otwieraniu pliku, oraz gdy obiekt wymaga ponownego obliczenia. Tak więc, jeśli zmienisz aspekt istniejącego obiektu FreeCAD, zmiany te zostaną utracone, gdy obiekt zostanie ponownie obliczony lub gdy ponownie otworzysz plik.
Jak już wspomniano, w scenegrafie OpenInventor kolejność jest ważna. Węzeł wpływa na to, co będzie następne. Przykładowo, jeśli chcemy mieć możliwość przesuwania naszego sześcianu, będziemy musieli dodać węzeł SoTranslation
przed sześcianem:
col = coin.SoBaseColor()
col.rgb = (1, 0, 0)
trans = coin.SoTranslation()
trans.translation.setValue([0, 0, 0])
cub = coin.SoCube()
myCustomNode = coin.SoSeparator()
myCustomNode.addChild(col)
myCustomNode.addChild(trans)
myCustomNode.addChild(cub)
sg.addChild(myCustomNode)
Aby przesunąć nasz sześcian możemy teraz zrobić:
trans.translation.setValue([2, 0, 0])
Wreszcie usunięcie czegoś jest załatwione:
sg.removeChild(myCustomNode)
Informacje zwrotne
Mechanizm callback to system, który pozwala bibliotece, takiej jak nasza biblioteka Coin, na odpowiadanie, czyli wywoływanie określonej funkcji z aktualnie uruchomionego obiektu Python. W ten sposób Coin może powiadomić Cię, że w scenie wystąpiło jakieś konkretne zdarzenie. Coin może obserwować bardzo różne rzeczy, takie jak pozycja myszy, kliknięcia przycisków myszy, wciśnięte klawisze klawiatury i wiele innych.
FreeCAD posiada łatwy sposób na wykorzystanie takich wywołań zwrotnych:
from pivy import coin
class ButtonTest:
def __init__(self):
self.view = FreeCADGui.ActiveDocument.ActiveView
self.callback = self.view.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(), self.getMouseClick)
def getMouseClick(self, event_cb):
event = event_cb.getEvent()
if event.getState() == coin.SoMouseButtonEvent.DOWN:
print("Alert!!! A mouse button has been improperly clicked!!!")
self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(), self.callback)
ButtonTest()
Wywołanie zwrotne musi być zainicjowane z obiektu, ponieważ ten obiekt musi być nadal uruchomiony, gdy nastąpi wywołanie zwrotne. Zobacz także kompletną listę możliwych zdarzeń i ich parametrów, lub oficjalną dokumentację Coin.
Dokumentacja
Niestety, Pivy nie ma własnej dokumentacji. Ponieważ jednak jest to dokładny wrapper biblioteki Coin, możesz przeczytać referencję C ++ w celu uzyskania informacji. W tym przypadku musisz przetłumaczyć styl nazewnictwa klas C ++ na styl Pythona.
W C++
SoFile::getClassTypeId()
W Pivy:
SoFile.getClassId()
- Coin3D strona domowa.
- Pivy strona domowa.
- Coin3D wiki, na GitHubie.
- dokumentacja Wiki dla Coin3D, na GitHubie.
- Coin3D Documentation, najnowsza, automatycznie generowana dokumentacja Doxygen.
- (Open)Inventor Mentor - zalecane.
Starsze
Te linki dostarczają dokumentacji referencyjnej dla Coin v3.x. Różnice w stosunku do v4.x są minimalne, więc nadal mogą one być przydatne.
- dokumentacja Coin3D, na BitBucket.
- dokumentacja Coin3D, na University of Colorado.
- Open Inventor Reference Documentation, publikacja: MeVisLab.
- 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