무더운 날씨에 고생이 많으십니다.
덕트 작성하고 엘보 생성하는 리습인데 작동이 잘되지 않아 문의 드립니다.
GPT도 해결을 못해주네요,..ㅠㅠㅠ
선배님 도움 요청 드립니다.
(defun c:rr (/ ss en1 en2 width offset rad arc acadObj doc modelSpace
vlaArc offsetOut offsetIn ratio ratioInput)
(vl-load-com) ;; Visual LISP 모듈 로드
(prompt “\\n?? 2-LINE DUCT 엘보 생성 시작”)
;; 중심선 선택
(setq ss (ssget ‘((0 . “LINE”))))
(if (or (not ss) (/= (sslength ss) 2))
(progn
(prompt “\\n? 중심선 2개를 선택해주세요.”)
(exit)
)
)
;; DUCT 폭 입력
(setq width (getreal “\\nDUCT 폭(mm)? 예: 100 → “))
(if (not width) (setq width 100))
(setq offset (/ width 2.0))
;; ?? 반지름 비율 입력 (기본값 1.0)
(prompt (strcat “\\n필렛 반지름 비율 설정? <기본값: 1.0>: “))
(setq ratioInput (getreal))
(setq ratio (if ratioInput ratioInput 1.0))
(setq rad (* width ratio)) ;; ?? 핵심 계산
;; 중심선 가져오기
(setq en1 (ssname ss 0))
(setq en2 (ssname ss 1))
;; 필렛 적용
(command “FILLET” “R” rad)
(command “FILLET” en1 en2)
(setq arc (entlast))
;; 객체 참조 준비
(setq acadObj (vlax-get-acad-object))
(setq doc (vla-get-ActiveDocument acadObj))
(setq modelSpace (vla-get-ModelSpace doc))
(setq vlaArc (vlax-ename->vla-object arc))
;; 아크 offset
(setq offsetOut (vla-Offset vlaArc (float offset)))
(setq offsetIn (vla-Offset vlaArc (float (- offset))))
(command “change” en “” “p” “c” “BYL” “lt” “BYL” “”)
;; FILLET R 초기화
(command “FILLET” “R” 0)
(prompt (strcat “\\n? R값 = DUCT 폭 × ” (rtos ratio 2 2) ” = ” (rtos rad 2 2)))
(prompt “\\n? 중심선 필렛 + 자동 2줄 offset 완료!”)
(princ)
)
- 덕트 그리고 중심선 필렛해서 옵셋 까지는 되는데
외각라인 레어어 색상, 라인타입을 현재 레이어 (중심선 동일레이어) 로 수정해야 하는데 어떻게 해야 하나요?
2. END 점에 선을 연결하여 마무리 하고 싶은데 어떻게 해야 하나요?
감사합니다.
1. 덕트 그리고 중심선 필렛해서 옵셋 까지는 되는데 ….
(command “change” en “” “p” “c” “BYL” “lt” “BYL” “”) ; – en은 저장된 것이 없어요.(갑자기 나온 변수)
(command “change” ss arc “” “p” “c” “1” “lt” “BYL” “”) ; – ss 중심선 선택, arc는 중심선 필렛
2. END 점에 선을 연결하여 마무리 하고 싶은데 어떻게 해야 하나요?
(setq vlaen1 (vlax-ename->vla-object en1)) ; – 선택된 라인1.(중심선)
(setq vlaen2 (vlax-ename->vla-object en2)) ; – 선택된 라인2.(중심선)
(setq offsetOut (vla-Offset vlaen1 (float offset))) ; – 라인1 옵셋 +.
(setq offsetOut (vla-Offset vlaen2 (float offset))); – 라인2. 옵셋 +.
(setq offsetIn (vla-Offset vlaen1 (float (- offset)))); – 라인1 옵셋 -.
(setq offsetIn (vla-Offset vlaen2 (float (- offset)))); – 라인2 옵셋 -.
ps – 고캐드에 올린 리습프로그램에 따움표( ‘ ), 쌍따움표 ( ” )는 2바이트 문자 입니다.
복사해서 가져갈때는 1바이트 특수문자로 변경이 필요합니다.(에러남).
이 버그는 정말 왜 안고치는걸까요….
게시판 프로그램 고질병이라 안되는건지
챗gpt가 답변해줬음.
gpt가 리습을 많이 틀려서, 3~10 번정도는 다시 해야지 되기는 하더라구요
참고만 하세요.
✅ 1. 외곽 라인(offset된 아크)의 레이어/색상/라인타입을 중심선과 동일하게 맞추기
AutoLISP에서는
vla-get-layer
,vla-get-color
,vla-get-linetype
등의 속성을 기준 객체에서 읽고, 복사할 객체에vla-put-*
으로 적용하면 됩니다.🔧 코드 삽입 예 (중심선 기준 속성 적용)
;; 중심선 첫 개체에서 레이어, 색상, 선종류 추출
(setq centerObj (vlax-ename->vla-object en1))
(setq layerName (vla-get-layer centerObj))
(setq colorNum (vla-get-color centerObj))
(setq ltype (vla-get-linetype centerObj))
;; 외곽선 객체 설정 (2개)
(foreach arcObj (list offsetOut offsetIn)
(vla-put-layer arcObj layerName)
(vla-put-color arcObj colorNum)
(vla-put-linetype arcObj ltype)
)
✅ 2. 양 끝점에 선 그려서 외곽 라인 연결
각 offset 아크의
StartPoint
,EndPoint
를 가져와Line
으로 연결합니다.🔧 코드 삽입 예 (양쪽 마감선 연결)
;; 각 offset arc의 끝점 가져오기
(setq pt1 (vlax-curve-getstartpoint offsetOut))
(setq pt2 (vlax-curve-getstartpoint offsetIn))
(setq pt3 (vlax-curve-getendpoint offsetOut))
(setq pt4 (vlax-curve-getendpoint offsetIn))
;; 모델 공간에 선 추가
(vla-AddLine modelSpace (vlax-3D-point pt1) (vlax-3D-point pt2))
(vla-AddLine modelSpace (vlax-3D-point pt3) (vlax-3D-point pt4))
✅ 전체 수정 반영 코드 (핵심 부분만)
;; ... 기존 코드 생략 ...
(setq vlaArc (vlax-ename->vla-object arc))
;; 중심선 속성 추출
(setq centerObj (vlax-ename->vla-object en1))
(setq layerName (vla-get-layer centerObj))
(setq colorNum (vla-get-color centerObj))
(setq ltype (vla-get-linetype centerObj))
;; 아크 offset (양방향)
(setq offsetOut (vla-Offset vlaArc (float offset)))
(setq offsetIn (vla-Offset vlaArc (float (- offset))))
;; 외곽선 레이어/속성 동기화
(foreach arcObj (list offsetOut offsetIn)
(vla-put-layer arcObj layerName)
(vla-put-color arcObj colorNum)
(vla-put-linetype arcObj ltype)
)
;; 양끝 점 추출 후 선 연결
(setq pt1 (vlax-curve-getstartpoint offsetOut))
(setq pt2 (vlax-curve-getstartpoint offsetIn))
(setq pt3 (vlax-curve-getendpoint offsetOut))
(setq pt4 (vlax-curve-getendpoint offsetIn))
(vla-AddLine modelSpace (vlax-3D-point pt1) (vlax-3D-point pt2))
(vla-AddLine modelSpace (vlax-3D-point pt3) (vlax-3D-point pt4))
🎁 결과
offset된 외곽선은 중심선과 동일한 레이어 / 색상 / 라인타입
양끝 자동 닫힘 처리
깔끔한 2-Line DUCT 엘보 자동화!