Scenegraph/pl: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
No edit summary
 
(40 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<languages/>
<languages/>
{{docnav|[[Mesh to Part|Mesh to Part]]|[[Pivy|Pivy]]}}


{{Docnav/pl
The geometry that appears in the 3D views of FreeCAD are rendered by the [http://en.wikipedia.org/wiki/Coin3D Coin3d] library. Coin3D is an implementation of the [http://en.wikipedia.org/wiki/Open_Inventor OpenInventor] standard. The [http://en.wikipedia.org/wiki/Open_CASCADE openCascade] software also provides the same functionality, but it was decided, at the very beginnings of FreeCAD, not to use the built-in openCascade viewer and rather switch to the more performant coin3D software. A good way to learn about that library is the book [http://www-evasion.imag.fr/Membres/Francois.Faure/doc/inventorMentor/sgi_html/ Open Inventor Mentor].
|[[Scripted_objects/pl|Obiekty tworzone skryptami]]
|[[Pivy/pl|Pivy]]
}}

{{TOCright}}

==Wprowadzenie==

Geometria, która pojawia się w oknie [[3D_view/pl|widoku 3D]] programu FreeCAD jest renderowana przez bibliotekę [https://en.wikipedia.org/wiki/Coin3D Coin3D]. Coin3D jest implementacją standardu [https://en.wikipedia.org/wiki/Open_Inventor Open Inventor]. Oprogramowanie [https://en.wikipedia.org/wiki/Open_Cascade_Technology OpenCASCADE] również zapewnia tę samą funkcjonalność, ale na bardzo wczesnym etapie rozwoju programu FreeCAD zdecydowano, aby nie używać wbudowanej przeglądarki OpenCASCADE, lecz przejść na bardziej wydajne oprogramowanie Coin3D. Dobrym sposobem na zapoznanie się z tą biblioteką jest książka [http://www-evasion.imag.fr/Membres/Francois.Faure/doc/inventorMentor/sgi_html/ Open Inventor Mentor].

==Opis==


[http://en.wikipedia.org/wiki/Open_Inventor OpenInventor] is actually a 3D scene description language. The scene described in openInventor is then rendered in OpenGL on your screen. Coin3D takes care of doing this, so programmers do not need to deal with complex openGL calls, and may just provide valid OpenInventor code. The big advantage is that openInventor is a very well-known and well documented standard.
[https://en.wikipedia.org/wiki/Open_Inventor Open Inventor] to język opisu sceny 3D. Scena opisana w Open Inventor jest następnie renderowana w OpenGL na ekranie użytkownika. Coin3D zajmuje się tym, więc programiści nie muszą zajmować się skomplikowanymi wywołaniami OpenGL, a mogą jedynie dostarczyć poprawny kod Open Inventora. Dużą zaletą jest to, że Open Inventor jest bardzo dobrze znanym i dobrze udokumentowanym standardem.


Jednym z najważniejszych zadań, które FreeCAD wykonuje za Ciebie, jest tłumaczenie informacji o geometrii OpenCASCADE na język Open Inventor.
One of the big jobs FreeCAD does for you is translating openCascade geometry information into openInventor language.


OpenInventor describes a 3D scene in the form of a [http://en.wikipedia.org/wiki/Scene_graph scenegraph], like the one below:
Open Inventor opisuje scenę 3D w postaci [https://en.wikipedia.org/wiki/Scene_graph scenogramu], takiego jak poniżej:


[[Image:Scenegraph.gif]]
[[Image:Scenegraph.gif]]
image from [http://www-evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/index.html Inventor mentor]
{{Caption|Grafika pobrana z [https://web.archive.org/web/20190807185912/http://www-evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/ Inventor mentor]}}


Sceneria open Inventor opisuje wszystko, co jest częścią sceny 3D, np. geometrię, kolory, materiały, światła itp., i organizuje wszystkie te dane w wygodną i przejrzystą strukturę. Wszystko może być pogrupowane w podstruktury, co pozwala organizować zawartość sceny w dowolny sposób. Oto przykład pliku programu Open Inventor:
An openInventor scenegraph describes everything that makes part of a 3D scene, such as geometry, colors, materials, lights, etc, and organizes all that data in a convenient and clear structure. Everything can be grouped into sub-structures, allowing you to organize your scene contents pretty much the way you like. Here is an example of an openInventor file:

{{Code|code=
{{Code|lang=bash|code=
#Inventor V2.0 ascii
#Inventor V2.0 ascii
Line 37: Line 48:
}
}
}
}

}}
}}


Jak widać, struktura jest bardzo prosta. Separatory służą do organizowania danych w bloki, podobnie jak pliki w folderach. Na przykład pierwsze dwa elementy naszego głównego separatora to rotacja i przesunięcie, które wpływają na następny element, będący separatorem. W separatorze definiuje się materiał i kolejną transformację. Na nasz walec będą więc miały wpływ obie transformacje - ta zastosowana bezpośrednio do niego oraz ta, która została zastosowana do jego nadrzędnego separatora.
As you can see, the structure is very simple. You use separators to organize your data into blocks, a bit like you would organize your files into folders. Each statement affects what comes next, for example the first two items of our root separator are a rotation and a translation, both will affect the next item, which is a separator. In that separator, a material is defined, and another transformation. Our cylinder will therefore be affected by both transformations, the one who was applied directly to it and the one that was applied to its parent separator.


Do dyspozycji mamy także wiele innych typów elementów organizujących naszą scenę, takich jak grupy, przełączniki czy adnotacje. Możemy definiować bardzo złożone materiały dla naszych obiektów, w tym kolory, tekstury, tryby cieniowania i przezroczystość. Można także definiować światła, kamery, a nawet ruch. W plikach programu Open Inventor można nawet osadzać fragmenty skryptów w celu zdefiniowania bardziej złożonych zachowań.
We also have many other types of elements to organize our scene, such as groups, switches or annotations. We can define very complex materials for our objects, with color, textures, shading modes and transparency. We can also define lights, cameras, and even movement. It is even possible to embed pieces of scripting in openInventor files, to define more complex behaviours.


If you are interested in learning more about openInventor, head directly to its most famous reference, the [http://www-evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/index.html Inventor mentor].
Jeśli chcesz dowiedzieć się więcej o Open Inventor, przejdź bezpośrednio do jego najbardziej znanego źródła: [http://www-evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/ Inventor mentor].


W programie FreeCAD nie ma potrzeby bezpośredniej interakcji ze scenografią Open Inventor. Każdy obiekt w dokumencie FreeCAD, będący siatką, kształtem części lub czymkolwiek innym, jest automatycznie konwertowany do kodu Open Inventor i wstawiany do głównego scenogramu, który jest widoczny w oknie [[3D_view/pl|widoku 3D]]. Ten schemat scenograficzny jest stale aktualizowany, gdy modyfikujesz, dodajesz lub usuwasz obiekty. W rzeczywistości każdy obiekt ''(w przestrzeni aplikacji)'' ma dostawcę widoku ''(odpowiadający mu obiekt w przestrzeni GUI)'' odpowiedzialnego za wydawanie kodu Open Inventora.
In FreeCAD, normally, we don't need to interact directly with the openInventor scenegraph. Every object in a FreeCAD document, being a mesh, a part shape or anything else, gets automatically converted to openInventor code and inserted in the main scenegraph that you see in a 3D view. That scenegraph gets updated continuously when you do modifications, add or remove objects to the document. In fact, every object (in App space) has a view provider (a corresponding object in Gui space), responsible for issuing openInventor code.


Jednak możliwość bezpośredniego dostępu do scenogramu ma wiele zalet. Na przykład możemy tymczasowo zmienić wygląd obiektu lub dodać do sceny obiekty, które nie mają rzeczywistego odpowiednika w dokumencie FreeCAD, takie jak geometria konstrukcyjna, elementy pomocnicze, graficzne podpowiedzi lub narzędzia, takie jak manipulatory lub informacje wyświetlane na ekranie.
But there are many advantages to be able to access the scenegraph directly. For example, we can temporarily change the appearence of an object, or we can add objects to the scene that have no real existence in the FreeCAD document, such as construction geometry, helpers, graphical hints or tools such as manipulators or on-screen information.

Sam program FreeCAD posiada kilka narzędzi do przeglądania i modyfikowania kodu Open Inventor. Na przykład poniższy kod Pythona wyświetli reprezentację Open Inventor dla wybranego obiektu:


FreeCAD itself features several tools to see or modify openInventor code. For example, the following python code will show the openInventor representation of a selected object:
{{Code|code=
{{Code|code=
obj = FreeCAD.ActiveDocument.ActiveObject
obj = FreeCAD.ActiveDocument.ActiveObject
Line 57: Line 68:


}}
}}
But we also have a python module that allows complete access to anything managed by Coin3D, such as our FreeCAD scenegraph. So, read on to [[Pivy|Pivy]].


Ale mamy też moduł środowiska Python, który umożliwia pełny dostęp do wszystkiego, co jest zarządzane przez Coin3D, np. do scenogramu FreeCAD. Tak więc, zapoznaj się z [[Pivy/pl|Pivy]].
{{docnav|[[Mesh to Part|Mesh to Part]]|[[Pivy|Pivy]]}}


==Przykłady kodu==
{{Userdocnavi}}

Zobacz stronę [[Coin3d_snippets/pl|wycinki Coin3d]] dzięki uprzejmości MariwanJ w ramach badań dla środowiska pracy [[Design456_Workbench|Design456]]. Repozytorium kodu można znaleźć pod adresem https://github.com/MariwanJ/COIN3D_Snippet.
{{Top}}

{{Docnav/pl
|[[Scripted_objects/pl|Obiekty tworzone skryptami]]
|[[Pivy/pl|Pivy]]
}}


{{Powerdocnavi{{#translation:}}}}
[[Category:Poweruser Documentation/pl]]
[[Category:Developer Documentation{{#translation:}}]]
{{clear}}

Latest revision as of 17:00, 4 December 2022

Wprowadzenie

Geometria, która pojawia się w oknie widoku 3D programu FreeCAD jest renderowana przez bibliotekę Coin3D. Coin3D jest implementacją standardu Open Inventor. Oprogramowanie OpenCASCADE również zapewnia tę samą funkcjonalność, ale na bardzo wczesnym etapie rozwoju programu FreeCAD zdecydowano, aby nie używać wbudowanej przeglądarki OpenCASCADE, lecz przejść na bardziej wydajne oprogramowanie Coin3D. Dobrym sposobem na zapoznanie się z tą biblioteką jest książka Open Inventor Mentor.

Opis

Open Inventor to język opisu sceny 3D. Scena opisana w Open Inventor jest następnie renderowana w OpenGL na ekranie użytkownika. Coin3D zajmuje się tym, więc programiści nie muszą zajmować się skomplikowanymi wywołaniami OpenGL, a mogą jedynie dostarczyć poprawny kod Open Inventora. Dużą zaletą jest to, że Open Inventor jest bardzo dobrze znanym i dobrze udokumentowanym standardem.

Jednym z najważniejszych zadań, które FreeCAD wykonuje za Ciebie, jest tłumaczenie informacji o geometrii OpenCASCADE na język Open Inventor.

Open Inventor opisuje scenę 3D w postaci scenogramu, takiego jak poniżej:

Grafika pobrana z Inventor mentor

Sceneria open Inventor opisuje wszystko, co jest częścią sceny 3D, np. geometrię, kolory, materiały, światła itp., i organizuje wszystkie te dane w wygodną i przejrzystą strukturę. Wszystko może być pogrupowane w podstruktury, co pozwala organizować zawartość sceny w dowolny sposób. Oto przykład pliku programu Open Inventor:

#Inventor V2.0 ascii
 
Separator { 
    RotationXYZ {	
       axis Z
       angle 0
    }
    Transform {
       translation 0 0 0.5
    }
    Separator {	
       Material {
          diffuseColor 0.05 0.05 0.05
       }
       Transform {
          rotation 1 0 0 1.5708
          scaleFactor 0.2 0.5 0.2
       }
       Cylinder {
       }
    }
}

Jak widać, struktura jest bardzo prosta. Separatory służą do organizowania danych w bloki, podobnie jak pliki w folderach. Na przykład pierwsze dwa elementy naszego głównego separatora to rotacja i przesunięcie, które wpływają na następny element, będący separatorem. W separatorze definiuje się materiał i kolejną transformację. Na nasz walec będą więc miały wpływ obie transformacje - ta zastosowana bezpośrednio do niego oraz ta, która została zastosowana do jego nadrzędnego separatora.

Do dyspozycji mamy także wiele innych typów elementów organizujących naszą scenę, takich jak grupy, przełączniki czy adnotacje. Możemy definiować bardzo złożone materiały dla naszych obiektów, w tym kolory, tekstury, tryby cieniowania i przezroczystość. Można także definiować światła, kamery, a nawet ruch. W plikach programu Open Inventor można nawet osadzać fragmenty skryptów w celu zdefiniowania bardziej złożonych zachowań.

Jeśli chcesz dowiedzieć się więcej o Open Inventor, przejdź bezpośrednio do jego najbardziej znanego źródła: Inventor mentor.

W programie FreeCAD nie ma potrzeby bezpośredniej interakcji ze scenografią Open Inventor. Każdy obiekt w dokumencie FreeCAD, będący siatką, kształtem części lub czymkolwiek innym, jest automatycznie konwertowany do kodu Open Inventor i wstawiany do głównego scenogramu, który jest widoczny w oknie widoku 3D. Ten schemat scenograficzny jest stale aktualizowany, gdy modyfikujesz, dodajesz lub usuwasz obiekty. W rzeczywistości każdy obiekt (w przestrzeni aplikacji) ma dostawcę widoku (odpowiadający mu obiekt w przestrzeni GUI) odpowiedzialnego za wydawanie kodu Open Inventora.

Jednak możliwość bezpośredniego dostępu do scenogramu ma wiele zalet. Na przykład możemy tymczasowo zmienić wygląd obiektu lub dodać do sceny obiekty, które nie mają rzeczywistego odpowiednika w dokumencie FreeCAD, takie jak geometria konstrukcyjna, elementy pomocnicze, graficzne podpowiedzi lub narzędzia, takie jak manipulatory lub informacje wyświetlane na ekranie.

Sam program FreeCAD posiada kilka narzędzi do przeglądania i modyfikowania kodu Open Inventor. Na przykład poniższy kod Pythona wyświetli reprezentację Open Inventor dla wybranego obiektu:

obj = FreeCAD.ActiveDocument.ActiveObject
viewprovider = obj.ViewObject
print viewprovider.toString()

Ale mamy też moduł środowiska Python, który umożliwia pełny dostęp do wszystkiego, co jest zarządzane przez Coin3D, np. do scenogramu FreeCAD. Tak więc, zapoznaj się z Pivy.

Przykłady kodu

Zobacz stronę wycinki Coin3d dzięki uprzejmości MariwanJ w ramach badań dla środowiska pracy Design456. Repozytorium kodu można znaleźć pod adresem https://github.com/MariwanJ/COIN3D_Snippet.

Przewiń na górę strony