무더운 날씨에 고생이 많으십니다.
덕트 작성하고 엘보 생성하는 리습인데 작동이 잘되지 않아 문의 드립니다.
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 점에 선을 연결하여 마무리 하고 싶은데 어떻게 해야 하나요?
감사합니다.
챗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 엘보 자동화!
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바이트 특수문자로 변경이 필요합니다.(에러남).
이 버그는 정말 왜 안고치는걸까요….
게시판 프로그램 고질병이라 안되는건지