침실2_CAD

[CAD LISP] 좌표 추출 리습(수정)

다식군! 2021. 12. 8. 08:19
반응형

구글에서 검색하면 좌표 추출 리습이 많이 있다.

내가 주로 쓰는 리습은

"coor-xy-landscape100.lsp"

근데, 좀 불편 하다.

짧은 내 실력으로 조금 수정 해봤다.

 

(defun C:@xy()
        (setvar "cmdecho" 0)
  	(setq now_osmode (getvar "osmode"))
  	(setq now_layer (getvar "clayer"))
  	(command "-layer"
		 "M"
		 "좌표추출A"
		 "C"
		 "6"
		 ""
		 ""		; END_Enter
	)
  	(setvar "osmode" 15359)
  	(setq ht 1)
        (setq pt1 (getpoint "\n Pick xy Point: "))

  	(while pt1
        (setq pt2 (getpoint "\nPick 1st flag point: "))
        (setq pt3 (getpoint "\nPick left or right point: "))                                  
        (setq x1 (car pt1))
        (setq y1 (cadr pt1))
        (setq ax (rtos x1 2 4))
        (setq ay (rtos y1 2 4))

        (setq x2 (car pt2))
        (setq y2 (cadr pt2))
        (setq x3 (car pt3))
        (setq y3 (cadr pt3))
        (if (< x3 x2) (setq x4 (- x2 (* ht 10))))
        (if (> x3 x2) (setq x4 (+ x2 (* ht 10))))
        (setq y4 y2)
        (setq pt4 ( list x4 y4 ))
        (command "pline" pt1 pt2 pt4 "")
        (setq x1 (/ (+ x2 x4) 2))
        (setq y1 (+ y2 (* ht 0.25)))
        (setq pt1 (list x1 y1))
        (command "text" "c" pt1 ht 0 ay)
        (setq y1 (- y2 (* ht 1.25)))
        (setq pt1 (list x1 y1))
        (command "text" "c" pt1 ht 0 ax)
        (setq pt1 (getpoint "\nPick xy Point: "))
       )
        (princ)
  	(setvar "osmode" now_osmode)
	(setvar "clayer" now_layer)
)

대충 내용을 정리하면,

@xy
라는 명령어를 실행하면,
현재의 osmode와 현재 Layer를 기억하고.....
"좌표추출A"라는 새로운 레이어를 만들고
osmode는 전체를 켜고,
두점을 찍으면, 좌표를 적는 걸 반복하고,
마지막에 Enter 또는 스페이스바를 누르면,
기존에 기억하고 있던, 레이어와 osmode로 복귀 하라는 내용.

XY-1.lsp
0.00MB

반응형