Scenegraph/ru: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
No edit summary
 
(3 intermediate revisions by 2 users not shown)
Line 2: Line 2:


{{Docnav/ru
{{Docnav/ru
|[[Scripted_objects/ru|Программируемые объекты]]
|[[Mesh_to_Part/ru|Mesh to Part]]
|[[Pivy/ru|Pivy]]
|[[Pivy/ru|Pivy]]
}}
}}
Line 10: Line 10:
==Введение==
==Введение==


<div class="mw-translate-fuzzy">
Геометрия которая появляется в [[3D view/ru|трёхмерных видах]] FreeCAD, получается с помощью библиотек [https://ru.wikipedia.org/wiki/Coin3D Coin3d]. Coin3D это реализация стандарта [https://ru.wikipedia.org/wiki/Open_Inventor OpenInventor]. [https://ru.wikipedia.org/wiki/Open_Cascade_Technology OpenCASCADE] тоже поддерживает схожую функциональность, но при создании FreeCAD было решено не использовать встроенный в OpenCASCADE просмотрщик, а скорее перейти на более производительный Coin3D. Для изучения этой библиотеки рекомендуется книга [http://www-evasion.imag.fr/Membres/Francois.Faure/doc/inventorMentor/sgi_html/ Open Inventor Mentor].
Геометрия которая появляется в [[3D view/ru|трёхмерных видах]] FreeCAD, получается с помощью библиотек [https://ru.wikipedia.org/wiki/Coin3D Coin3d]. Coin3D это реализация стандарта [https://ru.wikipedia.org/wiki/Open_Inventor OpenInventor]. [https://ru.wikipedia.org/wiki/Open_Cascade_Technology OpenCASCADE] тоже поддерживает схожую функциональность, но при создании FreeCAD было решено не использовать встроенный в OpenCASCADE просмотрщик, а скорее перейти на более производительный Coin3D. Для изучения этой библиотеки рекомендуется книга [http://www-evasion.imag.fr/Membres/Francois.Faure/doc/inventorMentor/sgi_html/ Open Inventor Mentor].
</div>


==Описание==
==Описание==


<div class="mw-translate-fuzzy">
[https://ru.wikipedia.org/wiki/Open_Inventor OpenInventor] это язык описания [https://ru.wikipedia.org/wiki/Граф_сцены трёхмерной сцены]. Сцена, описанная в OpenInventor, затем отрисовывается OpenGL на вашем экране. Об этом заботится Coin3D, поэтому программисту не надо иметь дело со сложными вызовами OpenGL, он может просто предоставить корректный (работающий) код OpenInventor. Большим преимуществом является то, что OpenInventor это широко известный и хорошо задокументированный стандарт.
[https://ru.wikipedia.org/wiki/Open_Inventor OpenInventor] это язык описания [https://ru.wikipedia.org/wiki/Граф_сцены трёхмерной сцены]. Сцена, описанная в OpenInventor, затем отрисовывается OpenGL на вашем экране. Об этом заботится Coin3D, поэтому программисту не надо иметь дело со сложными вызовами OpenGL, он может просто предоставить корректный (работающий) код OpenInventor. Большим преимуществом является то, что OpenInventor это широко известный и хорошо задокументированный стандарт.
</div>


<div class="mw-translate-fuzzy">
Одну из главных работ, которую FreeCAD делает за вас, это перевод информации о геометрии OpenCASCADE в формат языка OpenInventor.
Одну из главных работ, которую FreeCAD делает за вас, это перевод информации о геометрии OpenCASCADE в формат языка OpenInventor.
</div>


<div class="mw-translate-fuzzy">
OpenInventor записывает трехмерную сцену в форме [https://ru.wikipedia.org/wiki/Граф_сцены древа сцен], как показано ниже:
OpenInventor записывает трехмерную сцену в форме [https://ru.wikipedia.org/wiki/Граф_сцены древа сцен], как показано ниже:
</div>


[[Image:Scenegraph.gif]]
[[Image:Scenegraph.gif]]
Line 26: Line 34:
</div>
</div>


<div class="mw-translate-fuzzy">
Дерево сцен в openInventor описывает все части трёхмерной сцены, такие как геометрия, цвета, материалы, освещение, и т.д. и организует все эти данные в удобной и четкой структуре. Все что угодно может быть сгруппировано в субструктуры, позволяя вам организовывать содержание вашей сцены тем способом, который вам нравится. Вот пример файла в формате openInventor:
Дерево сцен в openInventor описывает все части трёхмерной сцены, такие как геометрия, цвета, материалы, освещение, и т.д. и организует все эти данные в удобной и четкой структуре. Все что угодно может быть сгруппировано в субструктуры, позволяя вам организовывать содержание вашей сцены тем способом, который вам нравится. Вот пример файла в формате openInventor:
</div>


{{Code|lang=bash|code=
{{Code|lang=bash|code=
Line 55: Line 65:
Как вы можете видеть, его структура проста. Вы используете разделители (separator), организуя ваши данные в блоки, это немного похоже на то, как вы организуете ваши файлы в папках. Каждый оператор влияет на то, что будет дальше, например, первые два пункта в вашем корневом разделителе это поворот и перенос(трансляция), как они повлияют на следующий элемент, который тоже является разделителем. В этом сепараторе определяется материал и другое преобразование. Поэтому наш цилиндр будет подвержен обеим трансформациям, то что было применено непосредственно к нему, так и то что было применено к родительскому разделителю.
Как вы можете видеть, его структура проста. Вы используете разделители (separator), организуя ваши данные в блоки, это немного похоже на то, как вы организуете ваши файлы в папках. Каждый оператор влияет на то, что будет дальше, например, первые два пункта в вашем корневом разделителе это поворот и перенос(трансляция), как они повлияют на следующий элемент, который тоже является разделителем. В этом сепараторе определяется материал и другое преобразование. Поэтому наш цилиндр будет подвержен обеим трансформациям, то что было применено непосредственно к нему, так и то что было применено к родительскому разделителю.


<div class="mw-translate-fuzzy">
Мы также обладаем множество элементов других типов для организации нашей сцены, таких как группы, переключатели и аннотации. Мы можем задать очень сложные материалы для ваших объектов, с цветами, текстурой, теневыми режимами и прозрачностью. Мы также можем задать освещение, камеры, и даже движение. Можно даже встроить кусочки сценариев в openInventor файлы, для задания более сложного поведения.
Мы также обладаем множество элементов других типов для организации нашей сцены, таких как группы, переключатели и аннотации. Мы можем задать очень сложные материалы для ваших объектов, с цветами, текстурой, теневыми режимами и прозрачностью. Мы также можем задать освещение, камеры, и даже движение. Можно даже встроить кусочки сценариев в openInventor файлы, для задания более сложного поведения.
</div>


<div class="mw-translate-fuzzy">
Если вы заинтересованы в получении дополнительной информации о openInventor, отправляйтесь напрямую к самому известному руководству: [http://www-evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/index.html Inventor mentor].
Если вы заинтересованы в получении дополнительной информации о openInventor, отправляйтесь напрямую к самому известному руководству: [http://www-evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/index.html Inventor mentor].
</div>


<div class="mw-translate-fuzzy">
В FreeCAD, как правило. не нужно напрямую взаимодействовать с древом сцен openInventor. Каждый объект в документе FreeCAD, будь то полигональная модель (mesh), форма детали, или что-нибудь ещё, автоматически преобразуется в код OpenInventor и вставляется в основное дерево сцен, которое вы видите в окне [[3D view/ru|трёхмерного просмотра]]. Это древо сцен непрерывно обновляется, когда вы модифицируете, добавляете или удаляете объекты. В самом деле каждый объект (в пространстве App) обладает поставщиком визуального отображения (соответствующий объект в пространстве Gui), ответственного за выдачу кода OpenInventor.
В FreeCAD, как правило. не нужно напрямую взаимодействовать с древом сцен openInventor. Каждый объект в документе FreeCAD, будь то полигональная модель (mesh), форма детали, или что-нибудь ещё, автоматически преобразуется в код OpenInventor и вставляется в основное дерево сцен, которое вы видите в окне [[3D view/ru|трёхмерного просмотра]]. Это древо сцен непрерывно обновляется, когда вы модифицируете, добавляете или удаляете объекты. В самом деле каждый объект (в пространстве App) обладает поставщиком визуального отображения (соответствующий объект в пространстве Gui), ответственного за выдачу кода OpenInventor.
</div>


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


<div class="mw-translate-fuzzy">
FreeCAD обладает несколькими инструментами для просмотра и изменения openInventor кода. На пример, нижеследующий код на python отобразит openInventor представление выбранного объекта:
FreeCAD обладает несколькими инструментами для просмотра и изменения openInventor кода. На пример, нижеследующий код на python отобразит openInventor представление выбранного объекта:
</div>


{{Code|code=
{{Code|code=
Line 72: Line 90:
}}
}}


<div class="mw-translate-fuzzy">
А также мы обладаем модулем python открывает полный доступ к управлению чем угодно в Coin3D, такому как ваше дерево сцен в FreeCAD. Также читайте об этом на странице [[Pivy/ru|Pivy]].
А также мы обладаем модулем python открывает полный доступ к управлению чем угодно в Coin3D, такому как ваше дерево сцен в FreeCAD. Также читайте об этом на странице [[Pivy/ru|Pivy]].
</div>


== Coding examples ==
== Coding examples ==


See [[Coin3d_snippets|Coin3d snippets]] courtesy of MariwanJ's research for the [[Design456_Workbench|Design456 Workbench]]. The code repository of said examples can be found at https://github.com/MariwanJ/COIN3D_Examples.
See [[Coin3d_snippets|Coin3d snippets]] courtesy of MariwanJ's research for the [[Design456_Workbench|Design456 Workbench]]. The code repository can be found at https://github.com/MariwanJ/COIN3D_Snippet.
{{Top}}
{{Top}}



Latest revision as of 09:51, 29 November 2022

Введение

Геометрия которая появляется в трёхмерных видах FreeCAD, получается с помощью библиотек Coin3d. Coin3D это реализация стандарта OpenInventor. OpenCASCADE тоже поддерживает схожую функциональность, но при создании FreeCAD было решено не использовать встроенный в OpenCASCADE просмотрщик, а скорее перейти на более производительный Coin3D. Для изучения этой библиотеки рекомендуется книга Open Inventor Mentor.

Описание

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

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

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

Рисунок, взятый с сайта Inventor mentor

Дерево сцен в openInventor описывает все части трёхмерной сцены, такие как геометрия, цвета, материалы, освещение, и т.д. и организует все эти данные в удобной и четкой структуре. Все что угодно может быть сгруппировано в субструктуры, позволяя вам организовывать содержание вашей сцены тем способом, который вам нравится. Вот пример файла в формате 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 {
       }
    }
}

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

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

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

В FreeCAD, как правило. не нужно напрямую взаимодействовать с древом сцен openInventor. Каждый объект в документе FreeCAD, будь то полигональная модель (mesh), форма детали, или что-нибудь ещё, автоматически преобразуется в код OpenInventor и вставляется в основное дерево сцен, которое вы видите в окне трёхмерного просмотра. Это древо сцен непрерывно обновляется, когда вы модифицируете, добавляете или удаляете объекты. В самом деле каждый объект (в пространстве App) обладает поставщиком визуального отображения (соответствующий объект в пространстве Gui), ответственного за выдачу кода OpenInventor.

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

FreeCAD обладает несколькими инструментами для просмотра и изменения openInventor кода. На пример, нижеследующий код на python отобразит openInventor представление выбранного объекта:

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

А также мы обладаем модулем python открывает полный доступ к управлению чем угодно в Coin3D, такому как ваше дерево сцен в FreeCAD. Также читайте об этом на странице Pivy.

Coding examples

See Coin3d snippets courtesy of MariwanJ's research for the Design456 Workbench. The code repository can be found at https://github.com/MariwanJ/COIN3D_Snippet.

наверх