<a id="using-easy3d"></a>

# Easy3D - Tools for 3D Object Processing

**Easy3D** is a set of tools for solving computer vision problems using 3D acquisition and processing. The user can also create, load, save and manipulate 3D depth maps, ZMaps, point clouds and meshes in full-fledged 3D environments.

All **Easy3D** tools are located within the [`Easy3D`](../../../doxygen_cpp/namespaceeVision_1_1Easy3D.html) [<sub>.NET</sub>](../../../doxygen_cs/namespaceeVision_1_1Easy3D.html) [<sub>Python</sub>](../../../doxygen_python/namespaceeVision_1_1Easy3D.html) namespace.

<a id="d-representation"></a>

## 3D Representation

**eVision** uses a right-handed cartesian 3D coordinate system. In this system, each 3D point is represented by its 3 coordinates X, Y and Z.

![image](assets/images/easy3d/basic_concepts.webp)

**eVision** provides different containers to store 3D objects.

<a id="e3d-point"></a>

## E3DPoint

The object [`E3DPoint`](../../../doxygen_cpp/structeVision_1_1Easy3D_1_1E3DPoint.html) [<sub>.NET</sub>](../../../doxygen_cs/structeVision_1_1Easy3D_1_1E3DPoint.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DPoint.html) represents points in a 3D space. An [`E3DPoint`](../../../doxygen_cpp/structeVision_1_1Easy3D_1_1E3DPoint.html) [<sub>.NET</sub>](../../../doxygen_cs/structeVision_1_1Easy3D_1_1E3DPoint.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DPoint.html) is the basic container for data processing in a 3D space.

* A [`E3DPoint`](../../../doxygen_cpp/structeVision_1_1Easy3D_1_1E3DPoint.html) [<sub>.NET</sub>](../../../doxygen_cs/structeVision_1_1Easy3D_1_1E3DPoint.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DPoint.html) is defined by its X, Y and Z coordinates.
* Use the function [`E3DPoint::DistanceTo`](../../../doxygen_cpp/structeVision_1_1Easy3D_1_1E3DPoint.html#af92120de9620917814cc4f05877e215b) [<sub>.NET</sub>](../../../doxygen_cs/structeVision_1_1Easy3D_1_1E3DPoint.html#a5ac835dbb23e0b255ad12f97960a5ff7) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DPoint.html#ae1c2f6e819089f6adc80ef388a893e59) to compute distances between points
* You can combine points to form point clouds (see below).

<a id="e3d-line"></a>

## E3DLine

The object [`E3DLine`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DLine.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DLine.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DLine.html) represents lines in a 3D space.

* An [`E3DLine`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DLine.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DLine.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DLine.html) is defined by two points.

<a id="e3d-plane"></a>

## E3DPlane

The object [`E3DPlane`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DPlane.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DPlane.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DPlane.html) represents planes in a 3D space.

* An [`E3DPlane`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DPlane.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DPlane.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DPlane.html) is defined by its normal vector and the signed distance to the origin of the axes.
* Use the function [`E3DPlane::DistanceTo`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DPlane.html#a874afc8c57b9784002d1021b69fca542) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DPlane.html#ada5b28fdaeba570a317ec581796df1d2) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DPlane.html#acd05b1d6a57db89ed9096a91709bb09a) to compute the distance to any point.
* Use the function [`E3DPlane::ProjectPoint`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DPlane.html#a05ce3eb8ad12e776eac0d09d9dc51b1c) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DPlane.html#a8815a44706ea5bcfefcbccaa706e50fc) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DPlane.html#a5bd3c1a4cac5cd7abce0c431fb4f5c1d) to project points onto planes.
* Use the function [`E3DPlane::Transform`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DPlane.html#ac690613a83e9eab4aa7ac73f947ec746) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DPlane.html#a176b56acf7ffac277c248361eef97621) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DPlane.html#a0ce37c3297e69785706d7aecb19f8beb) with transformation matrices to rotate and translate planes.

<a id="e3d-sphere"></a>

## E3DSphere

The object [`E3DSphere`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DSphere.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DSphere.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DSphere.html) represents spheres in a 3D space.

* An [`E3DSphere`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DSphere.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DSphere.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DSphere.html) is defined by its center point and its radius.
* Use the function [`E3DSphere::DistanceTo`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DSphere.html#a49e95e85e37c038153372f7e31e3d8e6) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DSphere.html#a8814cb4e2e0d22923ea9a6fb5ff38a02) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DSphere.html#ade68c6b0ae98c0939198ab3e010fea02) to compute the distance to any point.
* Use the function [`E3DSphere::Transform`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DSphere.html#a35600377665eb77abb4cda7c0a601ec9) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DSphere.html#af386b148235baaf7601e61f3ee11ec3e) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DSphere.html#ab37030fb3c2e574a03ea773619db238e) with transformation matrices to rotate and translate spheres.

<a id="e3d-box"></a>

## E3DBox

An [`E3DBox`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DBox.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DBox.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DBox.html) is a rectangular parallelepiped in a 3D space. It can have any orientation and be centered on any point in the 3D space.

* An [`E3DBox`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DBox.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DBox.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DBox.html) is defined by a center point, 3 axes and the extension of the box along each axis.
* Use the function [`E3DBox::Transform`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DBox.html#a60a2b38b6861f679a8853bfb09987991) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DBox.html#a456131f8b80cd9638b010472d921f365) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DBox.html#ad3a2bd86781f718a943ff4aea4921c2f) with transformation matrices to rotate and translate boxes.

<a id="e3d-object"></a>

## E3DObject

In **eVision**, an [`E3DObject`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObject.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObject.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObject.html) is a geometric representation of a set of 3D points.

* Use the [`E3DObject`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObject.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObject.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObject.html) to get the characteristics such as the extend along the 3 axes, the area, the total volume and the average position of the set of points.
* Use the function [`E3DObject::GetBasePlane`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObject.html#ac82f643ed05930cc9dd3f943200007de) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObject.html#afa90f8c85c1c4210b4d02406b822e677) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObject.html#a5589d7a525558ee33fd7c29291249285) to get the fitted plane of the set of points.
* Use the function [`E3DObject::GetBoundingBox`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObject.html#acc54f5f7fa115035d3f6150293d4f1e6) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObject.html#a2d96d7f6da605f0acac50d4c0dede238) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObject.html#a373f89c7e57fd2c75871f7396a59c63d) to get the bounding box, represented by a [`E3DBox`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DBox.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DBox.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DBox.html) enclosing the set of points.
