hi,
check the following. note that the routine can't move a circle with respect to target pline if the distance to root of circle perpendicular falls on a target vertex or falls beyond a target pline length. these will end an execution with error.
(defun c:move_circles_primary_target (/ primary_pline circle_list target_pline primary_closest_point_from_center
primary_distance_closest_point_from_center primary_point 1st_derivative_primary
1st_derivative_primary_angle primary_perpendicular_direction perpendicular_distance
target_point 1st_derivative_target 1st_derivative_target_angle
)
(setq primary_pline (vlax-ename->vla-object (car (entsel "\nPick primary pline: "))))
(prompt "\nSelect circles to align with target pline: ")
(setq circle_list (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "circle")))))))
target_pline (vlax-ename->vla-object (car (entsel "\nPick target pline: ")))
)
(foreach circle circle_list
(setq primary_closest_point_from_center (vlax-curve-getclosestpointto primary_pline (vlax-get circle 'center))
primary_distance_closest_point_from_center (vlax-curve-getdistatpoint primary_pline primary_closest_point_from_center)
primary_point (vlax-curve-getpointatdist primary_pline primary_distance_closest_point_from_center)
1st_derivative_primary (vlax-curve-getfirstderiv primary_pline (vlax-curve-getparamatpoint primary_pline primary_point))
1st_derivative_primary_angle (angle '(0 0 0) 1st_derivative_primary)
primary_perpendicular_direction (- (angle primary_point (vlax-get circle 'center)) 1st_derivative_primary_angle)
perpendicular_distance (distance primary_point (vlax-get circle 'center))
target_point (vlax-curve-getpointatdist target_pline primary_distance_closest_point_from_center)
1st_derivative_target (vlax-curve-getfirstderiv target_pline (vlax-curve-getparamatpoint target_pline target_point))
1st_derivative_target_angle (angle '(0 0 0) 1st_derivative_target)
)
(vla-move circle (vla-get-center circle)
(vlax-3d-point
(polar target_point
(+ 1st_derivative_target_angle primary_perpendicular_direction)
perpendicular_distance
)
)
)
)
)