Scenegraph/ru

FreeCAD в основном колаж из разлинчных мощных библиотек, наиболее важной из кототрых является openCascade, для управления и построения геометрии, Coin3d отображает эту геометрию, и Qt помещает все это в хороший Графический Интерфейс Пользователя.

Геометрия которая появляется в 3D видах FreeCAD получается с помощью библиотек Coin3D. Coin3D это реализация стандарта OpenInventor. OpenCascade тоже поддерживает схожую функциональность, но было решено при создании FreeCAD, не использовать встроеный в openCascade просмотрщик и скорее перейти на более производительный coin3D.

OpenInventor на самом деле язык описания 3D сцены. Сцена описанная в openInventor затем отрисовывается OpenGL на вашем  экране. Coin3D заботит об этом, поэтому программисту не надо иметь дело со сложными вызовами openGL, он просто должен предоставить корректный(работающий)OpenInventor код. Большим преимуществом является то что openInventor это широко известны и хорошо задокументированный стандарт.

Одну из главных работ, которую FreeCAD делает за вас, в основном это перевод информации о openCascade геометрии в формат языка openInventor.

OpenInventor записывает трехмерную сцену в форме древа сцен, как показано ниже:

рисунок с сайта Inventor mentor

Дерево сцен openInventor описывает все части 3D сцены, такие как геометрия, цвета, материалы, освещение, и.т.д. и организует все эти данные в удобной и четкой структуре. Все что угодно может быть сгруппировано в субструктуры, позволяя вам организовывать содержание вашей сцены тем способом который вам нравится. Вот пример файла в формате openInventor :

Как вы можете видеть, его структура проста. Вы используете разделители(separator) организуя ваши данные в блоки, это немного похоже на то как вы организуете ваши файлы в папках. Каждый оператор влияет на то что будет дальше, например, первые два пункта в ваншем корневом разделителе это поворот и перенос(трансляция), как они повлияют на следующий элемент, котоорый тоже является резделителем. В этом сепараторе, материал определяется, и другого преобразования. Поэтому наш цилиндр будет подвержин обеим трансормациям, то что было применено непосредственно к нем, так и то что было применено к родительскому разделителю.

Мы также обладаем множество элементов других типов, для организации нашей сцены, таких как группы, переключатели и анотации.Мы можем задать очень сложные материалы для ваших объектов, с цветом, текстурой, теневыми режимами и прозрачностью. Мы также можем задать освещение, камеры, и даже движение. Можно даже встроить кусочки сценариев в openInventor файлы, для задания более сложного поведения.

Если вы заинтересованы в получении дополнительной информации о openInventor, отпраляйтесь напрямую к самому известному руководству Inventor mentor.

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.

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.

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: 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.