Pivy/de: Difference between revisions
No edit summary |
(Updating to match new version of source page) |
||
(25 intermediate revisions by 3 users not shown) | |||
Line 8: | Line 8: | ||
{{TOCright}} |
{{TOCright}} |
||
== |
==Einführung== |
||
[[Pivy/de|Pivy]] ist eine [[Python/de|Python]] Bindungsbibliothek für [https://github.com/coin3d Coin], die 3D Rendering Bibliothek, die in FreeCAD verwendet wird, um Dinge in einer [[3D_view/de|3D Ansicht]] anzuzeigen. Coin ist eine quelloffene Implementierung der "Open Inventor" Spezifikation zur Handhabung von Grafiken. Daher beziehen sich in FreeCAD die Begriffe "Pivy", "Coin" oder "Open Inventor" im Wesentlichen auf die gleiche Sache. |
|||
<div class="mw-translate-fuzzy"> |
<div class="mw-translate-fuzzy"> |
||
Wenn in einen laufenden Python Interpreter importiert wird, erlaubt Pivy direkt mit jeder laufenden Coin zu kommunizieren [[Scenegraph/de|Szenengraph]], wie z.B. der [[3D_view/de|3D Ansicht]], oder sogar neue zu erstellen. Pivy ist nicht erforderlich, um FreeCAD zu kompilieren, aber es wird zur Laufzeit benötigt, wenn Python basierte Arbeitsbereiche ausgeführt werden, die Formen auf dem Bildschirm erstellen, wie [[Draft_Workbench/de|Entwurf Arbeitsbereich]] und [[Arch_Workbench/de|Architektur]]. Aus diesem Grund wird Pivy normalerweise installiert, wenn eine Distribution von FreeCAD installiert wird. |
|||
[https://bitbucket.org/Coin3D/pivy/src/default/ Pivy] ist eine Python Bindungsbibliothek für [https://bitbucket.org/Coin3D/coin/wiki/Home Coin3d], die in FreeCAD verwendete 3D Rendering Bibliothek. Beim Import in einen laufenden Python-Interpreter ist es möglich, direkt mit allen laufenden Coin3d [[Scenegraph/de|Szenegraphen]], wie beispielsweise den FreeCAD 3D Ansichten, in den Dialog zutreten oder sogar neue zu erstellen. Pivy ist in der Standard FreeCAD Installation enthalten. |
|||
</div> |
</div> |
||
Die Coin Bibliothek ist in mehrere Teile unterteilt, Coin selbst zur Manipulation von Szenegraphen und Bindungen für verschiedene GUI Systeme wie Windows und Qt. Falls auf dem System vorhanden, sind diese Module auch für Pivy verfügbar. Das Coin Modul ist immer vorhanden, und wir werden es sowieso verwenden, da wir uns nicht darum kümmern müssen, unsere 3D Darstellung in irgendeiner Schnittstelle zu verankern, was bereits von FreeCAD getan wird. Alles, was wir tun müssen, ist dies: |
|||
When imported in a running Python interpreter, Pivy allows us to communicate directly with any running Coin [[Scenegraph|scenegraph]], such as the [[3D_view|3D view]], or even to create new ones. Pivy is not required to compile FreeCAD, but it is required at runtime when running Python-based workbenches that create shapes on screen, like [[Draft_Module|Draft]] and [[Arch_Module|Arch]]. Because of this, Pivy is normally installed when installing a distribution of FreeCAD. |
|||
⚫ | |||
Die Coin3d-Bibliothek ist in mehrere Teile geteilt, Coin selbst, für die Manipulation von Szenengraphen und Bindungen für mehrere GUI-Systeme, wie z.B. Windows, oder, wie in unserem Fall, qt. Diese Module stehen auch in pivy zur Verfügung, abhängig davon, ob sie auf dem System vorhanden sind. |
|||
Das Coin Modul ist immer vorhanden, und es ist das, was wir ohnehin verwenden werden, somit brauchen wir uns nicht mehr um unsere Verankerung des 3D Display in jeder Oberfläche zu kümmern, dies wird bereits durch FreeCAD selbst getan. Alles, was wir tun müssen, ist dies: |
|||
⚫ | |||
{{Code|code= |
{{Code|code= |
||
Line 25: | Line 22: | ||
}} |
}} |
||
==Szenengraph== |
|||
<div class="mw-translate-fuzzy"> |
|||
==Zugreifen auf und Ändern im Szenengraph== |
|||
</div> |
|||
⚫ | Wir haben auf der [[Scenegraph/de|Szenengraph]] Seite gesehen, wie eine typische Coin szene organisiert ist. Alles, was in einer [[3D_view/de|3D Ansicht]] erscheint, ist ein Coin Szenegraph, der auf die gleiche Weise organisiert ist. Wir haben einen Wurzelknoten, und alle Objekte auf dem Bildschirm sind seine Kinder. |
||
<div class="mw-translate-fuzzy"> |
|||
⚫ | |||
</div> |
|||
FreeCAD hat eine einfache Möglichkeit, auf den Root-Knoten eines 3D-Ansicht Szenengraph zugreifen: |
FreeCAD hat eine einfache Möglichkeit, auf den Root-Knoten eines 3D-Ansicht Szenengraph zugreifen: |
||
Line 53: | Line 46: | ||
}} |
}} |
||
⚫ | |||
<div class="mw-translate-fuzzy"> |
|||
⚫ | |||
</div> |
|||
Lasst uns versuchen, jetzt etwas zu unserem Szenengraph hinzuzufügen. Wir fügen einen schönen roten Würfel ein: |
Lasst uns versuchen, jetzt etwas zu unserem Szenengraph hinzuzufügen. Wir fügen einen schönen roten Würfel ein: |
||
Line 69: | Line 60: | ||
}} |
}} |
||
Versuchen wir Folgendes: |
|||
<div class="mw-translate-fuzzy"> |
|||
und da ist unser (schöner) roter Würfel. Jetzt wollen wir dies hier versuchen: |
|||
</div> |
|||
{{Code|code= |
{{Code|code= |
||
Line 77: | Line 66: | ||
}} |
}} |
||
⚫ | Wie du siehst, ist alles nach wie vor zugänglich und gleichzeitig veränderbar. Du musst nichts neu berechnen oder neu zeichnen, Coin kümmert sich um alles. Du kannst deinem Szenegraphen Sachen hinzufügen, Eigenschaften ändern, Sachen ausblenden, temporäre Objekte anzeigen, alles. Dies betrifft natürlich nur die Darstellung in der 3D Ansicht. Diese Anzeige wird von FreeCAD bei geöffneter Datei neu berechnet, und wenn ein Objekt neu berechnet werden muss. Wenn du also den Aspekt eines bestehenden FreeCAD Objekts änderst, gehen diese Änderungen verloren, wenn das Objekt neu berechnet wird oder wenn du die Datei erneut öffnest. |
||
<div class="mw-translate-fuzzy"> |
|||
⚫ | |||
Also, diese Änderungen gehen verloren, wenn Sie den Aspekt eines vorhandenen FreeCAD-Objekts ändern, wenn das Objekt neu berechnet wird oder wenn Sie die Datei wiederer öffnen. |
|||
</div> |
|||
Wie bereits erwähnt, ist in einer openInventor Szenografie die Reihenfolge wichtig. Ein Knoten beeinflusst, was als nächstes kommt. Wenn wir zum Beispiel die Möglichkeit haben wollen, unseren Würfel zu bewegen, müssen wir einen {{incode|SoTranslation}} Knoten {{Emphasis|before}} dem Würfel hinzufügen |
|||
<div class="mw-translate-fuzzy"> |
|||
Ein Schlüssel zum Bearbeiten des Szenengraphen mit Ihren Skripten ist, in der Lage zu sein, auf bestimmte Eigenschaften der Knoten die Sie hinzugefügten, bei Bedarf zugreifen zu können. Zum Beispiel, wenn wir unseren Würfel bewegen wollten, hätten wir einen SoTranslation-Knoten zu unserem benutzerdefinierten Knoten hinzugefügt, und es hätte dann so ausgesehen: |
|||
</div> |
|||
{{Code|code= |
{{Code|code= |
||
Line 99: | Line 83: | ||
}} |
}} |
||
Um unseren Würfel zu bewegen, können wir jetzt folgendes tun: |
|||
<div class="mw-translate-fuzzy"> |
|||
Denken Sie daran, dass in einem OpenInventor-Szenengraph, die Reihenfolge wichtig ist. Ein Knoten beeinflusst das, was als nächstes kommt, so können Sie etwas sagen wie: Farbe rot, Würfel, Farbe gelb, Kugel, und Sie werden einen roten Würfel und eine gelbe Kugel bekommen. Wenn wir das Verschieben jetzt zu unserem vorhandenen benutzerdefinierten Knoten hinzufügen würden, würde es nach dem Würfel kommen, und diesen nicht betreffen. Wenn wir es bei der Erstellung eingefügt hätten, wie hier oben, könnten wir jetzt folgendes tun: |
|||
</div> |
|||
{{Code|code= |
{{Code|code= |
||
Line 107: | Line 89: | ||
}} |
}} |
||
Zum Schluß etwas entfernen wird ausgeführt mit: |
|||
<div class="mw-translate-fuzzy"> |
|||
Und unser Würfel würde damit 2 Einheiten nach rechts springen. |
|||
Schließlich wird das Entfernen von etwas, wie folgt erledigt: |
|||
</div> |
|||
{{Code|code= |
{{Code|code= |
||
sg.removeChild(myCustomNode) |
sg.removeChild(myCustomNode) |
||
}} |
}} |
||
⚫ | |||
==Rückrufe== |
|||
⚫ | Ein [http://en.wikipedia.org/wiki/Callback_%28computer_science%29 callback mechanism] ist ein System, das es einer Bibliothek, wie z.B. unserer Coin Bibliothek, erlaubt, Sie zurückzurufen, d.h. eine bestimmte Funktion von deinem aktuell laufenden Python Objekt aus aufzurufen. Auf diese Weise kann Coin dich darüber informieren, dass ein bestimmtes Ereignis in der Szene aufgetreten ist. Coin kann sehr unterschiedliche Dinge beobachten, wie z.B. Mausposition, Mausklicks, das Drücken von Tasten auf der Tastatur und vieles mehr. |
||
[[#top|top]] |
|||
<div class="mw-translate-fuzzy"> |
|||
==Verwenden von Rückrufmechanismen== |
|||
</div> |
|||
<div class="mw-translate-fuzzy"> |
|||
⚫ | Ein [http://en.wikipedia.org/wiki/Callback_%28computer_science%29 |
||
</div> |
|||
FreeCAD bietet eine einfache Möglichkeit, solche Rückrufe zu verwenden: |
FreeCAD bietet eine einfache Möglichkeit, solche Rückrufe zu verwenden: |
||
Line 145: | Line 118: | ||
}} |
}} |
||
⚫ | |||
<div class="mw-translate-fuzzy"> |
|||
⚫ | |||
⚫ | |||
{{Top}} |
|||
⚫ | |||
⚫ | |||
</div> |
|||
Leider verfügt Pivy nicht über eine eigene Dokumentation. Da es sich jedoch um einen genauen Wrapper der Coin Bibliothek handelt, kannst du zur Information die C++ Referenz lesen. In diesem Fall musst du den C++ Klassennamensstil in Python Stil übersetzen. |
|||
[[#top|top]] |
|||
<div class="mw-translate-fuzzy"> |
|||
⚫ | |||
</div> |
|||
<div class="mw-translate-fuzzy"> |
|||
Leider hat pivy selbst noch keine richtige Dokumentation, aber da es eine genaue Übersetzung von Coin gibt, können Sie problemlos die Coin-Dokumentation als Referenz nutzen, und Python-Stil verwenden, anstatt C++-Stil (z. B. SoFile::getClassTypeId() würde in pivy zu dem werden: SoFile.getClassId()) |
|||
</div> |
|||
In C++: |
In C++: |
||
Line 172: | Line 137: | ||
}} |
}} |
||
⚫ | |||
* [https://github.com/coin3d Coin3D] homepage. |
|||
* [https://github.com/coin3d |
* [https://github.com/coin3d Coin3D] Startseite. |
||
* [https:// |
* [https://github.com/coin3d/pivy Pivy] Startseite. |
||
* [https://grey.colorado.edu/coin3d/index.html Coin3D Dokumentation], der Universität von Colorado. |
|||
* [https://coin3d.bitbucket.io/Coin/index.html Coin3D Dokumentation], auf BitBucket. |
|||
* [https://mevislabdownloads.mevis.de/docs/current/MeVis/ThirdParty/Documentation/Publish/OpenInventorReference/index.html Open Inventor Referenz Dokumentation], von MeVisLab. |
|||
⚫ | |||
=== Older === |
|||
These links provide reference documentation for Coin v3.x. The differences with v4.x are minimal, so they may still be useful. |
|||
* [https://coin3d.bitbucket.io/Coin/index.html Coin3D Documentation], at BitBucket. |
* [https://coin3d.bitbucket.io/Coin/index.html Coin3D Documentation], at BitBucket. |
||
* [https://grey.colorado.edu/coin3d/index.html Coin3D Documentation], at 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], by MeVisLab. |
||
{{Top}} |
|||
{{Docnav/de |
|||
[[#top|top]] |
|||
|[[Scenegraph/de|Szenengraph]] |
|||
|[[PySide/de|PySide]] |
|||
<div class="mw-translate-fuzzy"> |
|||
}} |
|||
{{docnav/de|[[Scenegraph/de|Scenegraph]]|[[PySide/de|PySide]]}} |
|||
</div> |
|||
{{Powerdocnavi{{#translation:}}}} |
{{Powerdocnavi{{#translation:}}}} |
||
[[Category:Developer Documentation{{#translation:}}]] |
[[Category:Developer Documentation{{#translation:}}]] |
||
[[Category:Python Code{{#translation:}}]] |
[[Category:Python Code{{#translation:}}]] |
||
⚫ |
Revision as of 13:52, 22 October 2021
Einführung
Pivy ist eine Python Bindungsbibliothek für Coin, die 3D Rendering Bibliothek, die in FreeCAD verwendet wird, um Dinge in einer 3D Ansicht anzuzeigen. Coin ist eine quelloffene Implementierung der "Open Inventor" Spezifikation zur Handhabung von Grafiken. Daher beziehen sich in FreeCAD die Begriffe "Pivy", "Coin" oder "Open Inventor" im Wesentlichen auf die gleiche Sache.
Wenn in einen laufenden Python Interpreter importiert wird, erlaubt Pivy direkt mit jeder laufenden Coin zu kommunizieren Szenengraph, wie z.B. der 3D Ansicht, oder sogar neue zu erstellen. Pivy ist nicht erforderlich, um FreeCAD zu kompilieren, aber es wird zur Laufzeit benötigt, wenn Python basierte Arbeitsbereiche ausgeführt werden, die Formen auf dem Bildschirm erstellen, wie Entwurf Arbeitsbereich und Architektur. Aus diesem Grund wird Pivy normalerweise installiert, wenn eine Distribution von FreeCAD installiert wird.
Die Coin Bibliothek ist in mehrere Teile unterteilt, Coin selbst zur Manipulation von Szenegraphen und Bindungen für verschiedene GUI Systeme wie Windows und Qt. Falls auf dem System vorhanden, sind diese Module auch für Pivy verfügbar. Das Coin Modul ist immer vorhanden, und wir werden es sowieso verwenden, da wir uns nicht darum kümmern müssen, unsere 3D Darstellung in irgendeiner Schnittstelle zu verankern, was bereits von FreeCAD getan wird. Alles, was wir tun müssen, ist dies:
from pivy import coin
Szenengraph
Wir haben auf der Szenengraph Seite gesehen, wie eine typische Coin szene organisiert ist. Alles, was in einer 3D Ansicht erscheint, ist ein Coin Szenegraph, der auf die gleiche Weise organisiert ist. Wir haben einen Wurzelknoten, und alle Objekte auf dem Bildschirm sind seine Kinder.
FreeCAD hat eine einfache Möglichkeit, auf den Root-Knoten eines 3D-Ansicht Szenengraph zugreifen:
sg = FreeCADGui.ActiveDocument.ActiveView.getSceneGraph()
print(sg)
Dies gibt den Root-Knoten aus:
<pivy.coin.SoSelection; proxy of <Swig Object of type 'SoSelection *' at 0x360cb60> >
Wir können die unmittelbaren Kinder unserer Szene untersuchen:
for node in sg.getChildren():
print(node)
Einige dieser Knoten, wie SoSeparator
oder SoGroup
, können selbst Kinder haben. Die vollständige Liste der verfügbaren Coin Objekte findest du in der offiziellen Coin Dokumentation.
Lasst uns versuchen, jetzt etwas zu unserem Szenengraph hinzuzufügen. Wir fügen einen schönen roten Würfel ein:
col = coin.SoBaseColor()
col.rgb = (1, 0, 0)
cub = coin.SoCube()
myCustomNode = coin.SoSeparator()
myCustomNode.addChild(col)
myCustomNode.addChild(cub)
sg.addChild(myCustomNode)
Versuchen wir Folgendes:
col.rgb = (1, 1, 0)
Wie du siehst, ist alles nach wie vor zugänglich und gleichzeitig veränderbar. Du musst nichts neu berechnen oder neu zeichnen, Coin kümmert sich um alles. Du kannst deinem Szenegraphen Sachen hinzufügen, Eigenschaften ändern, Sachen ausblenden, temporäre Objekte anzeigen, alles. Dies betrifft natürlich nur die Darstellung in der 3D Ansicht. Diese Anzeige wird von FreeCAD bei geöffneter Datei neu berechnet, und wenn ein Objekt neu berechnet werden muss. Wenn du also den Aspekt eines bestehenden FreeCAD Objekts änderst, gehen diese Änderungen verloren, wenn das Objekt neu berechnet wird oder wenn du die Datei erneut öffnest.
Wie bereits erwähnt, ist in einer openInventor Szenografie die Reihenfolge wichtig. Ein Knoten beeinflusst, was als nächstes kommt. Wenn wir zum Beispiel die Möglichkeit haben wollen, unseren Würfel zu bewegen, müssen wir einen SoTranslation
Knoten before dem Würfel hinzufügen
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)
Um unseren Würfel zu bewegen, können wir jetzt folgendes tun:
trans.translation.setValue([2, 0, 0])
Zum Schluß etwas entfernen wird ausgeführt mit:
sg.removeChild(myCustomNode)
Rückrufe
Ein callback mechanism ist ein System, das es einer Bibliothek, wie z.B. unserer Coin Bibliothek, erlaubt, Sie zurückzurufen, d.h. eine bestimmte Funktion von deinem aktuell laufenden Python Objekt aus aufzurufen. Auf diese Weise kann Coin dich darüber informieren, dass ein bestimmtes Ereignis in der Szene aufgetreten ist. Coin kann sehr unterschiedliche Dinge beobachten, wie z.B. Mausposition, Mausklicks, das Drücken von Tasten auf der Tastatur und vieles mehr.
FreeCAD bietet eine einfache Möglichkeit, solche Rückrufe zu verwenden:
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()
Der Rückruf muss von einem Objekt initiiert werden, da dieses Objekt zum Zeitpunkt des Rückrufs noch laufen muss. Siehe auch eine complete list von möglichen Ereignissen und deren Parameter, oder die offizielle Coin Dokumentation.
Dokumentation
Leider verfügt Pivy nicht über eine eigene Dokumentation. Da es sich jedoch um einen genauen Wrapper der Coin Bibliothek handelt, kannst du zur Information die C++ Referenz lesen. In diesem Fall musst du den C++ Klassennamensstil in Python Stil übersetzen.
In C++:
SoFile::getClassTypeId()
In Pivy:
SoFile.getClassId()
- Coin3D Startseite.
- Pivy Startseite.
- Coin3D Dokumentation, der Universität von Colorado.
- Coin3D Dokumentation, auf BitBucket.
- Open Inventor Referenz Dokumentation, von MeVisLab.
Older
These links provide reference documentation for Coin v3.x. The differences with v4.x are minimal, so they may still be useful.
- Coin3D Documentation, at BitBucket.
- Coin3D Documentation, at University of Colorado.
- Open Inventor Reference Documentation, by MeVisLab.
- FreeCAD scripting: Python, Introduction to Python, Python scripting tutorial, FreeCAD Scripting Basics
- Modules: Builtin modules, Units, Quantity
- Workbenches: Workbench creation, Gui Commands, Commands, Installing more workbenches
- Meshes and Parts: Mesh Scripting, Topological data scripting, Mesh to Part, PythonOCC
- Parametric objects: Scripted objects, Viewproviders (Custom icon in tree view)
- Scenegraph: Coin (Inventor) scenegraph, Pivy
- Graphical interface: Interface creation, Interface creation completely in Python (1, 2, 3, 4, 5), PySide, PySide examples beginner, intermediate, advanced
- Macros: Macros, How to install macros
- Embedding: Embedding FreeCAD, Embedding FreeCADGui
- Other: Expressions, Code snippets, Line drawing function, FreeCAD vector math library (deprecated)
- Hubs: User hub, Power users hub, Developer hub