11. minimalBoundingBox Python plugin

minmimalBoundingBox is a pure Python plugin built with CloudComPy.

This tool is provided as an example of CloudComPy pure Python extension.

The findRotation function finds a minimal bounding box, not oriented along the main axes, and the corresponding rotation. It is not proven that the solution meets to the minimum, and the performance and robustness can certainly be improved.

cloudComPy.minimalBoundingBox.dist2(a, b)

Euclidian square distance between two 3D points

cloudComPy.minimalBoundingBox.findRotation(cloud)

Finds the point cloud rotation that minimize the bounding box (built on Ox, Oy, Oz).

warning the cloud is supposed centered (bounding box center near the origin) TODO: test for robustness, add parameters to control the accuracy…

Parameters:

cloud (ccPointCloud) – the point cloud

Returns:

bounding box after rotation, inverse rotation, polyline defining the optimal bounding box of the point cloud, polyline cloud

Return type:

tuple of 4 objects

cloudComPy.minimalBoundingBox.isocahedron()

isocahedron: defines 12 nodes equally distributed on the sphere. For each node, we keep the neighbours. The sphere is normalised.

Returns:

the 12 nodes (tuple) and a dictionary of the neighbours indices for each node index

Return type:

tuple

cloudComPy.minimalBoundingBox.section(x, cl)

Optimise the object bounding box section by oz rotation

Parameters:
  • x (tuple) – one test value for rotation along oz

  • cl (ccPointCloud) – point cloud

Returns:

bounding box x*y section, to minimise

Return type:

float

cloudComPy.minimalBoundingBox.zinv(x, i1, i2, i3, cl, isoNodes)

optimization function: maximize the z of object bounding box by adjusting rotation. 3 neighbours points on the normalized isocahedron defines a starting point and 2 directions: starting point: rotation defined by i1, direction 1: geodesic defined by points i1, i2, direction 2: geodesic defined by points i1, i3,

Param:

tuple x: 2 test values for rotations along the 2 directions

Parameters:
  • i1 (int) – index of the starting point in isocahedron

  • i2 (int) – index of in isocahedron (i1,i2 define the geodesic of first direction)

  • i3 (int) – index of in isocahedron (i1,i3 define the geodesic of second direction)

  • cl (ccPointCloud) – point cloud

  • isoNodes (tuple) – the 12 points of the normalised isocahedron

Returns:

opposite of the z dimension of the bounding box after rotation (value to minimise)

Return type:

float