Voxel Configuration
===================
.. seealso::
The Voxel configuration is mainly developed in
`Rust `_
and as such has its own documentation.
Voxel configuration tries to minimize
the information needed to represent a world with RoFI modules.
For this reason there are some limitations in expresivity of Voxel
configuration, which allows for a more space efficient representation
and for more efficient algorithms when using this representation:
- All modules have to be a Universal module.
- All joint values have to be a multiple of 90 degrees.
- Modules are not distinguishable.
- Shoes of modules and rotations are not distinguishable
if they can be mapped to each other.
- The configuration is not fixed in space.
These limitations imply that symmetries are baked into the representation.
.. contents::
.. note::
The name `Voxel `_
comes from the original idea representing the world as a 3D grid
of values that are either empty or contain a shoe of a RoFI module.
Since then the representation of the voxel world has shifted and
it is no longer stored as a 3D vector of values, but the meaning
and name `Voxel` stayed the same.
Explicit Connections
--------------------
Voxel world allows specifying explicit connections,
but this is not yet reflected in cpp code.
Voxel Configuration in Cpp
--------------------------
The class representing Voxel configuration in cpp
is :cpp:class:`rofi::voxel::VoxelWorld`.
:cpp:class:`rofi::voxel::VoxelWorld` can be easily converted to and from
:cpp:class:`rofi::configuration::RofiWorld`
by :cpp:func:`rofi::voxel::VoxelWorld::toRofiWorld`
and :cpp:func:`rofi::voxel::VoxelWorld::fromRofiWorld` respectively.
.. note::
When converting from :cpp:class:`rofi::voxel::VoxelWorld`
to :cpp:class:`rofi::configuration::RofiWorld`,
:cpp:func:`rofi::voxel::VoxelWorld::toRofiWorld` expects
that the :cpp:class:`rofi::voxel::VoxelWorld` is connected.
If you want to convert :cpp:class:`rofi::voxel::VoxelWorld` that
isn't connected, you can set parameter `fixateModulesByOne`.
Types, Constants and Support Classes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. doxygenconstant:: rofi::voxel::precision
:project: lib
.. doxygentypedef:: rofi::voxel::Position
:project: lib
.. doxygenenum:: rofi::voxel::Axis
:project: lib
.. doxygenenum:: rofi::voxel::JointPosition
:project: lib
.. doxygenstruct:: rofi::voxel::Direction
:project: lib
Classes
^^^^^^^
.. doxygenstruct:: rofi::voxel::Voxel
:project: lib
.. doxygenstruct:: rofi::voxel::VoxelWorld
:project: lib