# 对齐工具（Alignment Tool）

在搭建数字孪生场景的过程中，可能获得的是不包含约束信息的CAD文件，或是已经优化之后的三维模型文件（fbx,obj）。当遇到这种情况，需要手动添加WheelJoint等运动约束。Alignment工具可以帮助用户精确、快速的添加运动约束。 当然对齐工具的使用场景还包括：

* 对齐模型到水平面
* 创建运动组件
* 精准贴合模型
* 对模型进行翻转和精确移动

## 打开工具

在UMT工具菜单中选择`Utilities`菜单栏，在`Utilities`菜单面板中选择`Alignment`，即可调用对齐工具。对齐工具是基于`SceneView`的操作工具。当打开对齐工具之后，所有的操作包括按钮将会在`Scene`中显示。

当`Scene`中的左上角显示有`退出`按钮，即表示工具已经打开。如下图。

![](https://590671407-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjRYQBrGBRq9cuhWqyze%2Fuploads%2Fgit-blob-629647db71935e85f2718212b57fcb390885d31b%2Falignment_open.png?alt=media)

## 对齐模型到水平面

当一个物体需要对齐到Unity的默认水平面时，可使用该功能进行对齐。

选中场景模型后，`Scene`的左上角会出现向下对齐按钮。点击对齐按钮，模型将会自动贴近水平面。

![](https://590671407-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjRYQBrGBRq9cuhWqyze%2Fuploads%2Fgit-blob-0668e877231cdeeda2ece9d3be3747d16a9b8e0b%2Falign_to_ground.png?alt=media)

该功能以选中的模型**BoundingBox**为基准，将BoundingBox的下底边贴近水平面。该方法可以精确且自动对齐模型。该功能不受Alignment的限制，任何模型都可通过该功能贴近到水平面。

## 创建对齐平面(Alignment Plane)

在打开`对齐工具`后，当在场景中选择需要添加对齐平面的三维模型之后，`Scene`的左上角会出现`new plane`按钮。

![](https://590671407-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjRYQBrGBRq9cuhWqyze%2Fuploads%2Fgit-blob-fe990a6b8a3a211fae0c59f44e100e91c6b25c52%2Falignment_createnewplane.png?alt=media)

点击`new plane`按钮，在模型上中会出现淡蓝色的**对齐平面**标记。**对齐平面**的大小和方向由三个位置控制点控制（下图中用红色箭头标出），通过拖动三个控制点，即可修改对齐平面。平面上有一根红色法线，之后进行平面贴合时两个平面的法线将会相对组合。当平面拖动到合适位置，点击`Scene`左上角的`create`按钮，完成创建。点击`cancel`取消编辑。

![](https://590671407-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjRYQBrGBRq9cuhWqyze%2Fuploads%2Fgit-blob-71d3bfa5326f3d15c1612c4deb52635ab0cd3fca%2Falignment_newplane.png?alt=media)

创建完成的AlignmentPlane对象会持久化存储在场景中，当再次打开工具时会绘制在`Scene`中。创建完成的`AlignmentPlane`可以帮助用户快速编辑孪生场景。

> 小技巧：在创建AlignmentPlane的时候，如果需要更加进去的设置控制点的位置，可以通过吸附顶点的方式进行设置。具体操作为，按住键盘`v`键，进入Unity的**SnapVertex**模式，在拖动控制点时，会自动吸附到路径上的顶点。松开键盘`v`键即可退出**SnapVertex**模式。

## 创建运动组件

当`对齐平面`被创建后，该`Gameobject`将带有`AlignmentPlane`的组件，在对应`Gameobject`的`Inspector`窗口中，可以看到`AlignmentPlane`组件。点击`AlignmentPlane`组件中的`Generate WheelJoint`按钮，即可根据当前`AlignmentPlane`的参数（朝向，中心点，半径等）生成对应的`WheelJoint`。

![](https://590671407-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjRYQBrGBRq9cuhWqyze%2Fuploads%2Fgit-blob-542d14d060876c2674f670bedc7a2a3d701e5070%2Falignmentplane_in_gripper.png?alt=media)

![](https://590671407-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjRYQBrGBRq9cuhWqyze%2Fuploads%2Fgit-blob-95c2ce8d09cabce34524f8a915537dacc980aeb2%2Falignmentplane_in_gripper_gen_wheeljoint.png?alt=media)

该功能能够快速创建`WheelJoint`，设定旋转轴。

## 精准贴合模型

假如设备与设备之间不具有约束关系，且是互相独立，例如示例图中的机械臂与底座。用户可以使用`Alignment Tool`的`SnapTo`功能将设备与设备进行组合。

在组合之前，首先在模型需要对齐的表面绘制对齐平面，具体可以阅读\*\*创建对齐平面(Alignment Plane)\*\*一节。

创建完成后，在SceneView中分别点击两个需要组装的**对齐平面**。此时SceneView的左上角会出现`SnapTo`按钮。点击`SnapTo`按钮后，选中的对齐平面会自动吸附在一起。在吸附过程中，先选中的平面吸附到后选中的平面上，选中的平面会由淡蓝色变为红色。当吸附完成后，可以使用\`SnapTo按钮下方的层级关系设置功能，设置父子关系。第一个按钮为设置吸附物体为目标物体的父节点。第二个为吸附物体为目标物体的子节点。

![](https://590671407-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjRYQBrGBRq9cuhWqyze%2Fuploads%2Fgit-blob-a967be60b3736932d7931e1f62acbbe5f11dc0a7%2Falignment_snap.png?alt=media)

### 其他按键说明

![](https://590671407-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjRYQBrGBRq9cuhWqyze%2Fuploads%2Fgit-blob-81b38a56ec6d4dc6d4c07ba1647fdafa0485799d%2Falignment_otherbuttons.png?alt=media)

* `Deselect`: 取消当前的选中
* `Remeasure`：选中平面后，平面边将显示一个距离，单位为米，表示平面初始的圆点与当前圆点移动距离。通过`Remeasure`按键可以将该值重置为零。
* `Delete`：删除已选择的平面
