Scenogram
Wprowadzenie
Geometria, która pojawia się w oknie widoku 3D programu FreeCAD jest renderowana przez bibliotekę Coin3D. Coin3D jest implementacją standardu OpenInventor. 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
OpenInventor to język opisu sceny 3D. Scena opisana w OpenInventor 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 OpenInventora. Dużą zaletą jest to, że OpenInventor 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 OpenInventor.
OpenInventor opisuje scenę 3D w postaci scenogramu, takiego jak poniżej:
Grafika pobrana z Inventor mentor
Sceneria openInventor 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 OpenInventor:
#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 OpenInventor można nawet osadzać fragmenty skryptów w celu zdefiniowania bardziej złożonych zachowań.
Jeśli chcesz dowiedzieć się więcej o openInventor, przejdź bezpośrednio do jego najbardziej znanego źródła: Inventor mentor.
W programie FreeCAD nie ma potrzeby bezpośredniej interakcji ze scenografią OpenInventor. Każdy obiekt w dokumencie FreeCAD, będący siatką, kształtem części lub czymkolwiek innym, jest automatycznie konwertowany do kodu OpenInventor 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 OpenInventora.
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 OpenInventor. Na przykład poniższy kod Pythona wyświetli reprezentację openInventor 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 z tymi przykładami można znaleźć pod adresem https://github.com/MariwanJ/COIN3D_Examples.
- 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