Skip to content

Commit 0d5fda9

Browse files
feat: improve geometry center calculation
1 parent 3811b56 commit 0d5fda9

File tree

1 file changed

+12
-16
lines changed
  • src/gh/components/DF_pose_estimation

1 file changed

+12
-16
lines changed

src/gh/components/DF_pose_estimation/code.py

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47,24 +47,20 @@ def RunScript(self,
4747
continue
4848
rh_face_normals.append(Rhino.Geometry.Vector3d(plane_normal[0], plane_normal[1], plane_normal[2]))
4949

50-
df_bb_points = df_cloud.get_axis_aligned_bounding_box()
51-
df_bb_centroid = (df_bb_points[0] + df_bb_points[1]) / 2
52-
rh_bb_centroid = Rhino.Geometry.Point3d(df_bb_centroid[0], df_bb_centroid[1], df_bb_centroid[2])
53-
50+
df_bb_points = df_cloud.get_tight_bounding_box()
51+
df_bb_centroid = sum(df_bb_points)/len(df_bb_points)
52+
rh_tentative_bb_centroid = Rhino.Geometry.Point3d(df_bb_centroid[0], df_bb_centroid[1], df_bb_centroid[2])
5453

5554
new_xDirection, new_yDirection = df_poses.select_vectors(rh_face_normals, i_assembly.beams[i].plane.XAxis, i_assembly.beams[i].plane.YAxis)
56-
if not new_yDirection:
57-
df_beam_pc = dfb_geometry.DFPointCloud()
58-
for face_cloud in face_clouds:
59-
df_face_cloud = df_cvt_bindings.cvt_rhcloud_2_dfcloud(face_cloud)
60-
df_beam_pc.add_points(df_face_cloud)
61-
corners = df_beam_pc.get_tight_bounding_box()
62-
rh_corners = [Rhino.Geometry.Point3d(pt[0], pt[1], pt[2]) for pt in corners]
63-
plane = Rhino.Geometry.Plane.CreateFromPoints(rh_corners[0],rh_corners[1],rh_corners[2])
64-
box = Rhino.Geometry.Box(plane, rh_corners)
65-
longest_edge = sorted(box.ToBrep().Edges, key=lambda e: e.GetLength())[-1]
66-
longest_edge_direction = longest_edge.TangentAtEnd
67-
new_yDirection = Rhino.Geometry.Vector3d.CrossProduct(new_xDirection, longest_edge_direction)
55+
rh_tentative_plane = Rhino.Geometry.Plane(rh_tentative_bb_centroid, new_yDirection, new_xDirection)
56+
57+
rh_beam_cloud = Rhino.Geometry.PointCloud()
58+
for face_cloud in face_clouds:
59+
rh_beam_cloud.Merge(face_cloud)
60+
61+
rh_bbox = rh_beam_cloud.GetBoundingBox(rh_tentative_plane)
62+
rh_bbox.Transform(Rhino.Geometry.Transform.PlaneToPlane(Rhino.Geometry.Plane.WorldXY, rh_tentative_plane))
63+
rh_bb_centroid = rh_bbox.Center
6864

6965
pose = df_poses.DFPose(
7066
origin = [rh_bb_centroid.X, rh_bb_centroid.Y, rh_bb_centroid.Z],

0 commit comments

Comments
 (0)