We have a series of VG onboarding tasks to show how to tackle different practical use cases using VirtualGrasp in a VR application. In VirtualGrasp SDK, they are packed in VirtualGrasp\Scenes\onboarding.

### Task Description

*If this video shows "This video is unavailable," please try to refresh the page.*

#### Interaction behaviors wanted

- Objects whose shapes have different levels of symmetry demand different types of rotaional matching when assembling to a target pose.
- This task showcases how these different symmetric shapes could be assembled with a set of generic parameters in the provided VG_Assemble component.
- As shown in the above video, the assembling behaviors we want are:
- for the sphere, just positional match is needed since it is rotational symmetric around the centroid;
- for the cone, matching of a rotational axis is needed, and around this axis it is completely rotational symmetric;
- for the hexagonal prism, matching of a rotational axis in either direction is needed, and around this axis it is rotational symmetric but at 6 discrete angles around the 360 deg range;
- for the pyramid, matching of a rotational axis is needed, and around this axis it is rotational symmetric but at 4 discrete angles around the 360 deg range;
- for the curved bar, matching of a rotational axis is needed, and around this axis it is rotational symmetric but at 2 discrete angles around the 360 deg range;
- for the apple, which is completely assymetric object, we need full rotational match.

### Solution

In VirtualGrasp SDK, we packed the solution of this task in **VirtualGrasp/Scenes/onboarding**.

```
VirtualGrasp/Scenes/onboarding/VG_Onboarding.unity
```

#### Assemble and disassemble object with different level of symmetric properties

VG_Assemble component is used for assembling and disassembling object with any type of symmetric properties. Above image shows the setting for assembling the curved bar object in the video. The table below explains the key parameters for all the shapes in the video.

Object | Described As being | Assemble Axis | Assemble Symmetric Steps | Comments |
---|---|---|---|---|

Sphere | rotational symmetric around a centroid (No Axis) | No Axis | - | No Axis means no need to match the roation, and Steps parameter can be anything |

Cone | rotational symmetric around an axis | Y Axis | 0 | Y Axis is the rotational axis of the Cone shape, 0 Steps means can rotate around this axis at any angle |

Hexagon Prism | 6-step rotational symmetric around a symmetric axis | Y Axis Symmetric | 6 | Y Axis Symmetric is chosen because the shape is symmetric in either direction of the Y Axis. And 6 Steps is chosen because hexagon requres matching of rotation at 6 discrete steps around the Y Axis |

Pyramid | 4-step rotational symmetric around an axis | Y Axis | 4 | Y Axis the rotational axis of the Pyramid. And 4 Steps is chosen because Pyramid requres matching of rotation at 4 discrete steps around the Y Axis |

Curved Bar | 2-step rotational symmetric around an axis | Z Axis | 2 | Z Axis of assigned Assemble Anchor is chosen because the Curved Bar is symmetric around this axis. And 2 Steps is chosen because around Z Axis matching could happen with 180 degree of flip, i.e. 2 discrete steps around the Z axis |

Apple | 1-step rotational symmetric around an axis (i.e. non-symmetric) | X Axis | 1 | Apple is an assymetric object, so any asymmetric Assemble Axis can be chosen (X, Y, or Z Axis), and 1 Step is chosen because it is only allowed to match of one angle around this X axis. |