예를 들자면 도면에 A,B,C 요소가 있습니다.
A의 좌표는 (1,4)
B의 좌표는 (4,2)
C의 좌표는 (3,1)
도면상에서는 밑에 그림처럼 표현이 되어 있습니다.
B
C
A
Y 좌표가 큰놈부터 하나 하나 객체를 선택 (B C A 순)으로 선택하여 좌표를 출력하면 되겠지만서도
선택시 일일이 하나씩 선택이 아니라 A,B,C를 한번에 선택하여
Y좌표가 큰놈부터 하나씩 선택한 것 처럼 요소 선택순서를 정렬하고 싶습니다.
부연설명 드리자면
(setq a(ssget ‘((0 . “TEXT”))))
(setq b (sslength a))
(setq c 0)
(while (<= 1 b)
(setq d (ssname a c))
(setq e (cdr (assoc 1 (entget d))))
(princ e)
(setq b (- b 1))
(setq c (+ c 1))
)
(princ)
위의 리습에서 텍스트를 선택을 하나씩 Y좌표가 큰놈부터 출력하여 나온 값과
임의로 범위 선택했을때의 값이 같게 변수 a값에 선택된 순서를 정렬하려고 합니다.
나름 공부중인데… 현재까지 아래와 같이 만들었습니다.
(setq a (ssget ‘((0 . “TEXT”))))
(setq b (sslength a))
(setq c 0)
(setq list_A nil)
(while (<= 1 b)
(SETQ f (entget (ssname a c)))
(SETQ g (assoc 10 f))
(setq a1 (list c (caddr g)))
(setq list_A (append list_A (list a1)))
(setq b (- b 1))
(setq c (+ c 1))
)
(princ “n”)(princ list_A)
(princ)
(setq e (vl-sort-i list_A (function (lambda (e1 e2)(> (cadr e1) (cadr e2))))))
(setq h (length list_A) i 0 c 0)
(princ “n”) (princ e)
(repeat h
(setq d1 (nth i e))
(princ “n”)(princ d1)
(setq d (ssname a d1))
(setq e1 (cdr (assoc 1 (entget d))))
(princ ” : “)(princ e1)
(setq i (1+ i))
)
(princ)
공유