@@ -1053,23 +1053,49 @@ def align_geometry_by_image_distance(geometry_list, spacing_dist=None, max_itera
10531053 backward_distance = abs (np .linalg .norm (backward_geom_centered - prev_geom_centered ) - target_distance )
10541054 backward_satisfies_tolerance = backward_distance < tolerance
10551055
1056- # If both satisfy tolerance, choose forward (later in path) direction
1056+ # If both satisfy tolerance, check distance from initial geometry
10571057 if forward_satisfies_tolerance and backward_satisfies_tolerance :
1058- current_geom = forward_geom
1059- current_segment = forward_segment
1060- current_t = forward_t
1058+ initial_geom_centered = initial_geom - np .mean (initial_geom , axis = 0 )
1059+ forward_to_initial = np .linalg .norm (forward_geom_centered - initial_geom_centered )
1060+ backward_to_initial = np .linalg .norm (backward_geom_centered - initial_geom_centered )
1061+
1062+ # If forward is closer to initial and within node_distance, choose forward
1063+ if forward_to_initial <= node_distance :
1064+ current_geom = forward_geom
1065+ current_segment = forward_segment
1066+ current_t = forward_t
1067+ # If backward is within node_distance, choose backward
1068+ elif backward_to_initial <= node_distance :
1069+ current_geom = backward_geom
1070+ current_segment = backward_segment
1071+ current_t = backward_t
1072+ # If both are too far from initial, keep initial geometry
1073+ else :
1074+ current_geom = initial_geom
10611075 break # Exit iteration as we found satisfactory result
10621076
1063- # If only one satisfies tolerance, choose that one
1077+ # If only one satisfies tolerance, check distance from initial geometry
10641078 elif forward_satisfies_tolerance :
1065- current_geom = forward_geom
1066- current_segment = forward_segment
1067- current_t = forward_t
1079+ initial_geom_centered = initial_geom - np .mean (initial_geom , axis = 0 )
1080+ forward_to_initial = np .linalg .norm (forward_geom_centered - initial_geom_centered )
1081+
1082+ if forward_to_initial <= node_distance :
1083+ current_geom = forward_geom
1084+ current_segment = forward_segment
1085+ current_t = forward_t
1086+ else :
1087+ current_geom = initial_geom
10681088 break
10691089 elif backward_satisfies_tolerance :
1070- current_geom = backward_geom
1071- current_segment = backward_segment
1072- current_t = backward_t
1090+ initial_geom_centered = initial_geom - np .mean (initial_geom , axis = 0 )
1091+ backward_to_initial = np .linalg .norm (backward_geom_centered - initial_geom_centered )
1092+
1093+ if backward_to_initial <= node_distance :
1094+ current_geom = backward_geom
1095+ current_segment = backward_segment
1096+ current_t = backward_t
1097+ else :
1098+ current_geom = initial_geom
10731099 break
10741100
10751101 # If neither satisfies tolerance, keep initial geometry
@@ -1084,10 +1110,10 @@ def align_geometry_by_image_distance(geometry_list, spacing_dist=None, max_itera
10841110 # Use last node from input
10851111 new_geometry_list .append (geometry_list [- 1 ])
10861112
1087- # new_path_length_list = calc_path_length_list(new_geometry_list)
1113+ new_path_length_list = calc_path_length_list (new_geometry_list )
10881114 #print("Path length list (after the process) : ", new_path_length_list)
1089- # print("Distances between nodes:")
1090- # for x in range(len(new_path_length_list)-1):
1091- # print(new_path_length_list[x+1]-new_path_length_list[x])
1115+ print ("Distances between nodes:" )
1116+ for x in range (len (new_path_length_list )- 1 ):
1117+ print (new_path_length_list [x + 1 ]- new_path_length_list [x ])
10921118
10931119 return new_geometry_list
0 commit comments