Skip to main content
14-Alexandrite
August 28, 2026
Solved

How to build a best fit plane through a cloud of points

  • August 28, 2026
  • 5 replies
  • 64 views

Hello 

I have a lot of measured points and like to create a best fit plane through these points.
Does Creo provide such an option?

Many thanks in advance for your help.

Regards Pius

Best answer by StephenW

I do not know.  I would suggest contacting your VAR or PTC to understand what license would be needed and if you have it.

A google search showed the following: 

To access and use the Coordinate Measuring Machine (CMM) manufacturing module in Creo Parametric, you need the optional Pro/CMM extension license (historically and internally referred to as Pro/CMM or CMM Manufacturing). [1, 2, 3, 4]

License Details

  • Module Name: Pro/CMM (CMM Inspection Programming)
  • Function: Allows you to generate associative inspection and probing programs for CMM hardware directly from your 3D models.
  • Requirement Type: It is an add-on option/extension that must be explicitly added to your existing locked or floating license configuration (such as Creo Design Essentials or Advanced). [1, 2]

How to Check if You Have the License

  • Open Creo Parametric.
  • Go to File > Help > System Information.
  • Look at the information window under Configured Option Modules to see if CMM or Pro/CMM is listed.
  • If it is missing, you will need to contact your software administrator or PTC representative to add the extension to your license file. [1, 2, 3]

5 replies

StephenW
23-Emerald III
August 28, 2026

I don’t think with Creo Parametric there is an option like that.

I think the the manufacturing add in for CMM in Creo has something like that to create construction planes for measuring.

Pius14-AlexandriteAuthor
14-Alexandrite
August 28, 2026

We have these licences, do you think it is included in one of them?
 

 

StephenW
StephenW23-Emerald IIIAnswer
23-Emerald III
August 28, 2026

I do not know.  I would suggest contacting your VAR or PTC to understand what license would be needed and if you have it.

A google search showed the following: 

To access and use the Coordinate Measuring Machine (CMM) manufacturing module in Creo Parametric, you need the optional Pro/CMM extension license (historically and internally referred to as Pro/CMM or CMM Manufacturing). [1, 2, 3, 4]

License Details

  • Module Name: Pro/CMM (CMM Inspection Programming)
  • Function: Allows you to generate associative inspection and probing programs for CMM hardware directly from your 3D models.
  • Requirement Type: It is an add-on option/extension that must be explicitly added to your existing locked or floating license configuration (such as Creo Design Essentials or Advanced). [1, 2]

How to Check if You Have the License

  • Open Creo Parametric.
  • Go to File > Help > System Information.
  • Look at the information window under Configured Option Modules to see if CMM or Pro/CMM is listed.
  • If it is missing, you will need to contact your software administrator or PTC representative to add the extension to your license file. [1, 2, 3]

Pius14-AlexandriteAuthor
14-Alexandrite
August 28, 2026

Thanks for help.

Unfortunately, they are not listed.
☹️

RPN
18-Opal
August 29, 2026

Assume you want to create a single plane through N points of measurement you can use Least Squares because a plane is parameterized by a single equation. The result is the best fit.

 

import numpy as np

# Your 10 points as a (10, 3) array
points = np.array([
[x1, y1, z1],
[x2, y2, z2],
# ... 10 rows total
])

# 1. Compute centroid and center the points
centroid = points.mean(axis=0)
centered = points - centroid

# 2. SVD of the centered points
U, S, Vt = np.linalg.svd(centered)

# 3. Normal vector = last row of Vt (smallest singular value)
normal = Vt[-1]
a, b, c = normal
d = -normal.dot(centroid)

print(f"Plane: {a:.4f}x + {b:.4f}y + {c:.4f}z + {d:.4f} = 0")
print(f"Normal vector: {normal}")
print(f"Point on the plane (centroid): {centroid}")

# Optional: mean squared distance as a goodness-of-fit measure
distances = centered.dot(normal)
rmse = np.sqrt(np.mean(distances**2))
print(f"RMSE (orthogonal distance): {rmse:.6f}")

Code by Claude, not tested with the SVD-Instance