Pivy/pl: Difference between revisions

From FreeCAD Documentation
(Created page with "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...")
No edit summary
 
(17 intermediate revisions by 2 users not shown)
Line 66: Line 66:
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 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 already mentioned, in an openInventor scenegraph the order is important. A node affects what comes next. For example, if we want to have the ability to move our cube we will need to add a {{incode|SoTranslation}} node {{Emphasis|before}} the cube:
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=
Line 93: Line 93:
}}
}}
{{Top}}
{{Top}}
==Informacje zwrotne==
==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.
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.


FreeCAD features an easy way to use such callbacks:
FreeCAD posiada łatwy sposób na wykorzystanie takich wywołań zwrotnych:


{{Code|code=
{{Code|code=
Line 116: 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}}
{{Top}}
==Documentation==
==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.
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.


In C++:
W C++


{{Code|code=
{{Code|code=
Line 129: Line 129:
}}
}}


In Pivy:
W Pivy:


{{Code|code=
{{Code|code=
Line 135: Line 135:
}}
}}


* [https://github.com/coin3d Coin3D] homepage.
* [https://github.com/coin3d Coin3D] strona domowa.
* [https://github.com/coin3d/pivy Pivy] homepage.
* [https://github.com/coin3d/pivy Pivy] strona domowa.
* [https://github.com/coin3d/coin/wiki Coin3D wiki], at GitHub.
* [https://github.com/coin3d/coin/wiki Coin3D wiki], na GitHubie.
* [https://github.com/coin3d/coin/wiki/Documentation Coin3D wiki documentation], at GitHub.
* [https://github.com/coin3d/coin/wiki/Documentation dokumentacja Wiki dla Coin3D], na GitHubie.
* [https://coin3d.github.io/Coin/html/ Coin3D Documentation], latest automatically generated Doxygen documentation.
* [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] - recommended.
* [https://webdocs.cs.ualberta.ca/~graphics/books/mentor.pdf (Open)Inventor Mentor] - zalecane.


=== Older ===
===Starsze===


These links provide reference documentation for Coin v3.x. The differences with v4.x are minimal, so they may still be useful.
Te linki dostarczają dokumentacji referencyjnej dla Coin v3.x. Różnice w stosunku do v4.x minimalne, więc nadal mogą one być przydatne.


* [https://coin3d.bitbucket.io/Coin/index.html Coin3D Documentation], at BitBucket.
* [https://coin3d.bitbucket.io/Coin/index.html dokumentacja Coin3D], na BitBucket.
* [https://grey.colorado.edu/coin3d/index.html Coin3D Documentation], at University of Colorado.
* [https://grey.colorado.edu/coin3d/index.html dokumentacja Coin3D], na University of Colorado.
* [https://mevislabdownloads.mevis.de/docs/current/MeVis/ThirdParty/Documentation/Publish/OpenInventorReference/index.html Open Inventor Reference Documentation], by MeVisLab.
* [https://mevislabdownloads.mevis.de/docs/current/MeVis/ThirdParty/Documentation/Publish/OpenInventorReference/index.html Open Inventor Reference Documentation], publikacja: MeVisLab.
{{Top}}
{{Top}}


{{Docnav
{{Docnav/pl
|[[Scenegraph|Scenegraph]]
|[[Scenegraph/pl|Scenogram]]
|[[PySide|PySide]]
|[[PySide/pl|PySide]]
}}
}}



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)

Przewiń na górę strony

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.

Przewiń na górę strony

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()

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.

Przewiń na górę strony