check this one. to make an elbow select either way 4 lines.
updated.
;***************************************************************************************************************************************
; c:draw_elbow. elbowing tubes have to have same diameter.
; komondormrex, sep 2023
;***************************************************************************************************************************************
(defun get_angle (point_1 point_2)
(if (equal 0 (angle point_1 point_2) 1e-6)
(* 2 pi)
(angle point_1 point_2)
)
)
;***************************************************************************************************************************************
(defun find_parallel_line (line_list / angle_line_list 1st_pair_list line_parallel)
(setq angle_line_list (mapcar '(lambda (line) (list (vl-sort (list (get_angle (vlax-get line 'startpoint) (vlax-get line 'endpoint))
(get_angle (vlax-get line 'endpoint) (vlax-get line 'startpoint))
) '<
) line
)
) line_list
)
1st_pair_list (car angle_line_list)
angle_line_list (cdr angle_line_list)
)
(if (vl-some '(lambda (line) (equal (car 1st_pair_list) (car (setq line_parallel line)) 1e-3)) angle_line_list)
(progn
(setq 1st_pair_list (append (list 1st_pair_list) (list line_parallel))
angle_line_list (vl-remove line_parallel angle_line_list)
)
(if (equal (caar angle_line_list) (caadr angle_line_list) 1e-3)
(list (mapcar 'cadr 1st_pair_list) (mapcar 'cadr angle_line_list))
nil
)
)
nil
)
)
;***************************************************************************************************************************************
(defun line_intersections (line line_list / farthest_end)
(setq farthest_end (find_line_fathest_end line (car line_list)))
(append (vl-sort (list (lines_intersect_point line (car line_list))
(lines_intersect_point line (cadr line_list))
)
'(lambda (point_1 point_2) (< (distance farthest_end point_1) (distance farthest_end point_2)))
)
(list line)
)
)
;***************************************************************************************************************************************
(defun find_line_fathest_end (line line_1)
(if (> (distance (vlax-get line 'startpoint) (lines_intersect_point line line_1))
(distance (vlax-get line 'endpoint) (lines_intersect_point line line_1))
)
(vlax-get line 'startpoint)
(vlax-get line 'endpoint)
)
)
;***************************************************************************************************************************************
(defun lines_intersect_point (line_1 line_2)
(inters (vlax-get line_1 'startpoint)
(vlax-get line_1 'endpoint)
(vlax-get line_2 'startpoint)
(vlax-get line_2 'endpoint)
nil
)
)
;***************************************************************************************************************************************
(defun draw_line (point_1 point_2 line_layer)
(vla-put-layer
(vla-addline (vla-get-block (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
(vlax-3d-point point_1)
(vlax-3d-point point_2)
)
line_layer
)
)
;***************************************************************************************************************************************
(defun c:draw_elbow ( / tube_lines_sset line_list parallel_line_list line_intersections_list line_index point inner_pair outer_pair
tube_diameter tube_layer arc_1 arc_2 object_count
)
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(if (and (setq tube_lines_sset (ssget '((0 . "line"))))
(setq line_list (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex tube_lines_sset)))))
(= (length line_list) 4)
(setq parallel_line_list (find_parallel_line line_list))
)
(progn
(setq line_intersections_list
(list (line_intersections (car (car parallel_line_list)) (cadr parallel_line_list))
(line_intersections (cadr (car parallel_line_list)) (cadr parallel_line_list))
(line_intersections (car (cadr parallel_line_list)) (car parallel_line_list))
(line_intersections (cadr (cadr parallel_line_list)) (car parallel_line_list))
)
tube_diameter (distance (vlax-get (last (car line_intersections_list)) 'startpoint)
(inters (vlax-get (last (car line_intersections_list)) 'startpoint)
(polar (vlax-get (last (car line_intersections_list)) 'startpoint)
(+ (* 0.5 pi) (vla-get-angle (last (car line_intersections_list))))
1
)
(vlax-get (last (cadr line_intersections_list)) 'startpoint)
(vlax-get (last (cadr line_intersections_list)) 'endpoint)
nil
)
)
tube_layer (vla-get-layer (last (car line_intersections_list)))
line_index -1
)
(while (and
(setq point (car (nth (setq line_index (1+ line_index)) line_intersections_list)))
(/= 2 (length (setq inner_pair (vl-remove nil (mapcar '(lambda (line) (if (equal (car line) point 1e-3) (last line)))
line_intersections_list
)
)
)
)
)
)
)
(setq line_index -1)
(while (and
(setq point (cadr (nth (setq line_index (1+ line_index)) line_intersections_list)))
(/= 2 (length (setq outer_pair (vl-remove nil (mapcar '(lambda (line) (if (equal (cadr line) point 1e-3) (last line)))
line_intersections_list
)
)
)
)
)
)
)
(setvar 'cmdecho 0)
(setvar 'filletrad (* 0.25 tube_diameter))
(command "_fillet" (vlax-vla-object->ename (car inner_pair)) "" (vlax-vla-object->ename (cadr inner_pair)))
(setvar 'filletrad (* 1.25 tube_diameter))
(command "_fillet" (vlax-vla-object->ename (car outer_pair)) "" (vlax-vla-object->ename (cadr outer_pair)))
(setvar 'cmdecho 1)
(setq object_count (vla-get-count (vla-get-block (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object)))))
arc_1 (vla-item (vla-get-block (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object)))) (- object_count 1))
arc_2 (vla-item (vla-get-block (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object)))) (- object_count 2))
)
(draw_line (vlax-get arc_1 'startpoint) (vlax-get arc_2 'startpoint) tube_layer)
(draw_line (vlax-get arc_1 'endpoint) (vlax-get arc_2 'endpoint) tube_layer)
)
(princ "\nInvalid selection")
)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(princ)
)