lispを起動したら、前回投稿画像の「1回目選択」「2回目選択」で縦方向の線が書かれます。
もう一度lispを起動して、「3回目選択」をするのですが、一旦何も選択せずにEntarを押してください。
すると、線の方向設定が横方向に切り替わりますので、
改めて、「3回目選択」「4回目選択」で横方向の線が書かれます。
(defun C:CONNECT_POINTS ( / T_nil sort_option LIST_A LIST_B num_lines)
(vl-load-com)
(defun GET_SORTED_POINTS (ss sort_option / i ent pt point_list)
(setq i 0)
(repeat (sslength ss)
(setq ent (ssname ss i))
(setq pt (cdr (assoc 10 (entget ent))))
(setq point_list (cons pt point_list))
(setq i (1+ i))
)
(if (= sort_option "X")
(setq point_list (vl-sort point_list '(lambda (p1 p2) (< (car p1) (car p2)))))
(setq point_list (vl-sort point_list '(lambda (p1 p2) (< (cadr p1) (cadr p2)))))
)
point_list
)
(setq T_nil T)
(setq sort_option "X")
(while T_nil
(alert (strcat "1グループ目の点を選択してください\n※現在の方向設定=[" (if (eq sort_option "X") "縦線" "横線") "]\n (OKを押した後、Enterで方向変更)"))
(setq ss (ssget '((0 . "POINT"))))
(if ss
(setq T_nil nil)
(if (eq sort_option "X") (setq sort_option "Y") (setq sort_option "X"))
)
)
(setq LIST_A (GET_SORTED_POINTS ss sort_option))
(setq T_nil T)
(while T_nil
(alert "2グループ目の点を選択してください")
(setq ss (ssget '((0 . "POINT"))))
(if ss (setq T_nil nil))
)
(setq LIST_B (GET_SORTED_POINTS ss sort_option))
(setq num_lines (min (length LIST_A) (length LIST_B)))
(setq i 0)
(command "undo" "be")
(repeat num_lines
(command "line" "non" (nth i LIST_A) "non" (nth i LIST_B) "")
(setq i (1+ i))
)
(command "undo" "e")
(princ)
)
- さかな
- 2025/05/18 (Sun) 07:50:32