From e2dead423dc24a57940b7dd22a141f788938e410 Mon Sep 17 00:00:00 2001 From: DamienGilliard <127743632+DamienGilliard@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:46:47 +0200 Subject: [PATCH 1/2] feat-wip: creation of pose comparison component --- src/gh/components/DF_pose_comparison/code.py | 48 +++++++++++++ src/gh/components/DF_pose_comparison/icon.png | Bin 0 -> 15011 bytes .../DF_pose_comparison/metadata.json | 68 ++++++++++++++++++ src/gh/components/DF_pose_comparison/test.md | 1 + 4 files changed, 117 insertions(+) create mode 100644 src/gh/components/DF_pose_comparison/code.py create mode 100644 src/gh/components/DF_pose_comparison/icon.png create mode 100644 src/gh/components/DF_pose_comparison/metadata.json create mode 100644 src/gh/components/DF_pose_comparison/test.md diff --git a/src/gh/components/DF_pose_comparison/code.py b/src/gh/components/DF_pose_comparison/code.py new file mode 100644 index 00000000..ec97e582 --- /dev/null +++ b/src/gh/components/DF_pose_comparison/code.py @@ -0,0 +1,48 @@ +#! python3 + +import Rhino +from ghpythonlib.componentbase import executingcomponent as component + +import System + +import numpy + + +class DFPoseComparison(component): + def RunScript(self, + i_CAD_poses: System.Collections.Generic.List[Rhino.Geometry.Plane], + i_measured_poses: System.Collections.Generic.List[Rhino.Geometry.Plane]): + + if len(i_CAD_poses) != len(i_measured_poses): + ghenv.Component.Message = "evaluation during assembly" # noqa: F821 + else: + ghenv.Component.Message = "evaluation of completed assembly" # noqa: F821 + + o_distances = [] + o_angles = [] + o_transforms_cad_to_measured = [] + # Compare the origins + # measure the distance between the origins of the CAD pose and the measured pose and output this in the component + for i in range(len(i_measured_poses)): + cad_origin = i_CAD_poses[i].Origin + measured_origin = i_measured_poses[i].Origin + distance = cad_origin.DistanceTo(measured_origin) + o_distances.append(distance) + + # Compare the orientations using the formula: $$ \theta = \arccos\left(\frac{\text{trace}(R_{\text{pred}}^T R_{\text{meas}}) - 1}{2}\right) $$ + transform_o_to_cad = Rhino.Geometry.Transform.PlaneToPlane(Rhino.Geometry.Plane.WorldXY, i_CAD_poses[i]) + transform_o_to_measured = Rhino.Geometry.Transform.PlaneToPlane(Rhino.Geometry.Plane.WorldXY, i_measured_poses[i]) + np_transform_o_to_cad = numpy.array(transform_o_to_cad.ToDoubleArray(rowDominant=True)).reshape((4, 4)) + np_transform_o_to_measured = numpy.array(transform_o_to_measured.ToDoubleArray(rowDominant=True)).reshape((4, 4)) + + R_cad = np_transform_o_to_cad[:3, :3] + R_measured = np_transform_o_to_measured[:3, :3] + R_rel = numpy.dot(R_cad.T, R_measured) + theta = numpy.arccos(numpy.clip((numpy.trace(R_rel) - 1) / 2, -1.0, 1.0)) + o_angles.append(theta) + + # Compute the transformation matrix between the CAD pose and the measured pose + transform_cad_to_measured = Rhino.Geometry.Transform.PlaneToPlane(i_CAD_poses[i], i_measured_poses[i]) + o_transforms_cad_to_measured.append(transform_cad_to_measured) + + return [o_distances, o_angles, o_transforms_cad_to_measured] diff --git a/src/gh/components/DF_pose_comparison/icon.png b/src/gh/components/DF_pose_comparison/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3119143222c350e17344a70719c34b86cbacdbb7 GIT binary patch literal 15011 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 K$ydvohyE{F-aBRh literal 0 HcmV?d00001 diff --git a/src/gh/components/DF_pose_comparison/metadata.json b/src/gh/components/DF_pose_comparison/metadata.json new file mode 100644 index 00000000..54002d85 --- /dev/null +++ b/src/gh/components/DF_pose_comparison/metadata.json @@ -0,0 +1,68 @@ +{ + "name": "DFPoseComparison", + "nickname": "DFPoseComparison", + "category": "diffCheck", + "subcategory": "Analysis", + "description": "Compares CAD poses with measured poses to compute errors.", + "exposure": 4, + "instanceGuid": "13d76641-6f4f-4e78-a7dd-e64e176ffb2a", + "ghpython": { + "hideOutput": true, + "hideInput": true, + "isAdvancedMode": true, + "marshalOutGuids": true, + "iconDisplay": 2, + "inputParameters": [ + { + "name": "i_CAD_poses", + "nickname": "i_CAD_poses", + "description": "The CAD poses to compare.", + "optional": false, + "allowTreeAccess": true, + "showTypeHints": true, + "scriptParamAccess": "list", + "wireDisplay": "default", + "sourceCount": 0, + "typeHintID": "plane" + }, + { + "name": "i_measured_poses", + "nickname": "i_measured_poses", + "description": "The measured poses to compare against the CAD poses.", + "optional": false, + "allowTreeAccess": true, + "showTypeHints": true, + "scriptParamAccess": "list", + "wireDisplay": "default", + "sourceCount": 0, + "typeHintID": "plane" + } + ], + "outputParameters": [ + { + "name": "o_distances", + "nickname": "o_distances", + "description": "The distances between the CAD pose origins and measured pose origins.", + "optional": false, + "sourceCount": 0, + "graft": false + }, + { + "name": "o_angles", + "nickname": "o_angles", + "description": "The angles between the CAD pose orientations and measured pose orientations.", + "optional": false, + "sourceCount": 0, + "graft": false + }, + { + "name": "o_transforms_cad_to_measured", + "nickname": "o_transforms_cad_to_measured", + "description": "The transformation matrices from CAD poses to measured poses.", + "optional": false, + "sourceCount": 0, + "graft": false + } + ] + } +} \ No newline at end of file diff --git a/src/gh/components/DF_pose_comparison/test.md b/src/gh/components/DF_pose_comparison/test.md new file mode 100644 index 00000000..f946bc7f --- /dev/null +++ b/src/gh/components/DF_pose_comparison/test.md @@ -0,0 +1 @@ + $$ \theta = \arccos\left(\frac{\text{trace}(R_{\text{pred}}^T R_{\text{meas}}) - 1}{2}\right) $$ \ No newline at end of file From cdef3ba38052641f7134400080e793841bb06d13 Mon Sep 17 00:00:00 2001 From: DamienGilliard <127743632+DamienGilliard@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:47:41 +0200 Subject: [PATCH 2/2] fix: remove unneeded markdown file --- src/gh/components/DF_pose_comparison/test.md | 1 - 1 file changed, 1 deletion(-) delete mode 100644 src/gh/components/DF_pose_comparison/test.md diff --git a/src/gh/components/DF_pose_comparison/test.md b/src/gh/components/DF_pose_comparison/test.md deleted file mode 100644 index f946bc7f..00000000 --- a/src/gh/components/DF_pose_comparison/test.md +++ /dev/null @@ -1 +0,0 @@ - $$ \theta = \arccos\left(\frac{\text{trace}(R_{\text{pred}}^T R_{\text{meas}}) - 1}{2}\right) $$ \ No newline at end of file