1. 선택한 치수선 합계 리습(lisp)
AutoCAD에서 선택한 선의 길이를 구하는 방법은 여러 가지가 있습니다. 도면에 있는 선의 길이를 구하는 경우는 가공에 필요한 데이터를 산출하거나, 자재를 구매하기 위해 데이터를 산출하는 경우가 많습니다. 분야마다 조금씩 쓰임새가 다르지만, 레이저 가공이나 플라즈마 가공업체는 선의 길이를 산출하여 가공 소요시간을 구하기도 합니다.
오토캐드(AUTO CAD) 선 길이 합계 구하는 리습(Lisp)
하지만 가공을 위한 자재 구매에는 모든 선의 합계를 구할 필요가 없습니다. 가공물의 가장 큰 치수의 합을 구하면 대략적인 자재 구매 사이즈를 구할 수 있는데요. 이때 주로 사용하는 것이 가장 큰 치수의 합계를 구하여 사용합니다. 하지만 도면을 열어 치수를 확인하고 계산기를 가지고 합계를 구하기는 쉽지 않은 작업인데요. 작업자가 자칫 잘못된 치수를 계산하면 자재 구매에 실수가 발생하기도 합니다. 이러한 오류를 방지하기 위해 치수선을 선택하여 합계를 구하는 리습을 작성해보겠습니다.
1) 치수선 합계 리습 동작 설명
치수선 합계를 구하기 위한 리습을 작성하기 위해 어떻게 동작시킬지 구상하는 단계입니다.
바쁘신 분들은 맨 아래로 이동하셔서 작성된 리습을 다운로드 받으시기 바랍니다.
오늘 작성된 치수선 합계 리습은 Window와 MAC 운영체제 모두 사용할 수 있습니다. 다만 리습이 지원되지 않는 AutoCAD lt에서는 작동하지 않습니다. (단, AutoCAD 2024 LT 사용자는 사용할 수 있음)
① 명령을 실행하고 객체를 선택한다.
② 선택한 치수선 객체의 길이 정보를 가져온다.
③ 치수선 길이의 정보를 누적하여 합계를 구한다.
④ 선택한 객체가 치수선이 아니면 다시 선택할 수 있는 메시지를 송출한다.
⑤ 조건에 맞게 반복한다.
⑥ 합계를 Command 창에 표시한다.
2) 리습 코드 설명
(defun c:sumdim (/ total ent len)
(setq total 0)
(setq ent nil)
리습 실행 명령은 “sumdim”입니다. 초기 설정을 위해 치수선 합계에 사용되는 total 변수는 0으로 설정하고, 치수선 객체를 선택하는 변수 ent는 nil로 설정합니다.
(prompt "\n치수선을 선택하세요. ESC를 눌러 종료합니다.\n")
(while (/= (setq ent (car (entsel "\n치수선을 선택하세요. (ESC를 눌러 종료): "))) nil)
(if (eq (cdr (assoc 0 (entget ent))) "DIMENSION")
치수선 선택 메시지를 송출합니다. while, if 함수를 이용하여 반복을 위한 조건을 입력합니다. entsel 함수는 단일 객체를 선택하기 위해 사용되었으며, if 함수의 조건은 선택된 객체가 (0 . “Dimension”) 일 때 동작하도록 설정합니다.
(progn
(setq len (cdr (assoc 42 (entget ent))))
(setq total (+ total len))
)
(prompt "\n선택한 객체는 치수선이 아닙니다. 치수선을 선택하세요.\n")
)
)
if 함수의 조건을 만족할 때 변수 ent의 속성에서 dxf 코드 42에 해당하는 치수 값을 len 변수에 저장합니다. 이때 추출된 치수값(변수 len)과 total 변수를 더해 치수 합계를 구합니다. 이 과정은 선택된 객체가 없을 때까지 반복하며 선택된 치수값을 누적합니다. 참고로 dxf 코드 42번에 해당하는 치수값은 연산이 가능한 숫자 데이터입니다.
(setq total (rtos total 2 2))
(if (> (strlen total) 0)
(progn
(princ (strcat "\n선택한 치수선의 총 길이: " total " mm"))
(princ)
)
(princ "\n선택한 치수선이 없습니다.")
)
)
치수 객체 선택이 마치면 누적된 치수 합계를 문자 데이터로 변경합니다. 문자로 변경된 치수 합계는 십진수, 소수점 2자리로 표현합니다. 이때 누적된 치수값 데이터의 길이가 0보다 작다면 선택한 치수선이 없다는 메시지를 송출합니다. 만약 단위환산을 하고 싶다면 데이터 형태를 문자로 변경하기 전에 연산 과정을 거쳐 문자로 변경해야 합니다. 예를 들어 단위를 M로 변경한다면 해당 코드를 아래와 같이 변경하세요.(setq total (rtos total 2 2))
→ (setq total (rtos (/ total 1000) 2 2))(princ (strcat "\n선택한 치수선의 총 길이: " total " mm"))
→ (princ (strcat "\n선택한 치수선의 총 길이: " total " M"))
3) 치수 합계 리습 실행
치수 합계 리습을 실행한 영상입니다. 해당 영상에서는 치수선의 합계를 구하는 과정과 선택한 객체가 치수선이 아닐 때 메시지를 송출합니다. 오류 메시지와 함께 치수선 객체를 다시 선택하면 이전 치수값에 누적하여 결과를 표시합니다. Enter or Esc or Space 키를 누르면 리습이 종료되고 선택한 치수선의 합계를 명령 창에 표시합니다.