출처:아키모아
아래리습 모따기 박스로 하는 리습입니다. 필렛 한번만하고 빠져나오게 할수 있나요.
그리고 저는 BF명령만 사용합니다.
(vl-load-com)
(defun $Chamfer_Prompt ( / TM DZN d1 d2)
(if (= (getvar “trimmode”) 0) (setq TM “자르지 않기”) (setq TM “자르기”))
(setq DZN (getvar “dimzin”))
(setvar “dimzin” 0)
(setq d1 (rtos (getvar “chamfera”) 2 (getvar “luprec”)) d2 (rtos (getvar “chamfera”) 2 (getvar “luprec”)))
(prompt (strcat “n(LISP/” TM ” 모드) 현재 모따기 거리1 = ” d1 “, 거리2 = ” d2))
(setvar “dimzin” DZN)
(list d1 d2)
)
(if (= (getvar “trimmode”) 0) (setq TM “자르지 않기”) (setq TM “자르기”))
(setq DZN (getvar “dimzin”))
(setvar “dimzin” 0)
(setq d1 (rtos (getvar “chamfera”) 2 (getvar “luprec”)) d2 (rtos (getvar “chamfera”) 2 (getvar “luprec”)))
(prompt (strcat “n(LISP/” TM ” 모드) 현재 모따기 거리1 = ” d1 “, 거리2 = ” d2))
(setvar “dimzin” DZN)
(list d1 d2)
)
(defun $Chamfer_Mode (DS / DZN buffer d1 d2)
(setq DZN (getvar “dimzin”))
(setvar “dimzin” 0)
(setq d1 (rtos (getvar “chamfera”) 2 (getvar “luprec”)) d2 (rtos (getvar “chamferb”) 2 (getvar “luprec”)))
(setvar “dimzin” DZN)
(setq DZN (getvar “dimzin”))
(setq buffer (getdist (strcat “첫 번째 모따기 거리 지정 <” d1 “>: “)))
(setvar “dimzin” 0)
(if buffer (setq d1 buffer buffer (rtos buffer 2 (getvar “luprec”))) (setq buffer d2))
(setvar “dimzin” DZN)
(if (= (setq d2 (getdist (strcat “두 번째 모따기 거리 지정 <” buffer “>: “))) nil) (setq d2 d1))
(setvar “chamfera” d1)
(setvar “chamferb” d2)
(setvar “dimzin” 0)
(setq buffer (list (rtos (getvar “chamfera”) 2 (getvar “luprec”)) (rtos (getvar “chamferb”) 2 (getvar “luprec”))))
(setvar “dimzin” DZN)
(setq DS buffer)
)
(setq DZN (getvar “dimzin”))
(setvar “dimzin” 0)
(setq d1 (rtos (getvar “chamfera”) 2 (getvar “luprec”)) d2 (rtos (getvar “chamferb”) 2 (getvar “luprec”)))
(setvar “dimzin” DZN)
(setq DZN (getvar “dimzin”))
(setq buffer (getdist (strcat “첫 번째 모따기 거리 지정 <” d1 “>: “)))
(setvar “dimzin” 0)
(if buffer (setq d1 buffer buffer (rtos buffer 2 (getvar “luprec”))) (setq buffer d2))
(setvar “dimzin” DZN)
(if (= (setq d2 (getdist (strcat “두 번째 모따기 거리 지정 <” buffer “>: “))) nil) (setq d2 d1))
(setvar “chamfera” d1)
(setvar “chamferb” d2)
(setvar “dimzin” 0)
(setq buffer (list (rtos (getvar “chamfera”) 2 (getvar “luprec”)) (rtos (getvar “chamferb”) 2 (getvar “luprec”))))
(setvar “dimzin” DZN)
(setq DS buffer)
)
(defun $Fillet_Prompt ( / TM DZN rad)
(if (= (getvar “trimmode”) 0) (setq TM “자르지 않기”) (setq TM “자르기”))
(setq DZN (getvar “dimzin”))
(setvar “dimzin” 0)
(setq rad (rtos (getvar “filletrad”) 2 (getvar “luprec”)))
(prompt (strcat “n현재 설정: 모드 = LISP/” TM “, 반지름 = ” rad))
(setvar “dimzin” DZN)
rad
)
(if (= (getvar “trimmode”) 0) (setq TM “자르지 않기”) (setq TM “자르기”))
(setq DZN (getvar “dimzin”))
(setvar “dimzin” 0)
(setq rad (rtos (getvar “filletrad”) 2 (getvar “luprec”)))
(prompt (strcat “n현재 설정: 모드 = LISP/” TM “, 반지름 = ” rad))
(setvar “dimzin” DZN)
rad
)
(defun $Radius_Mode (RD / DZN rad)
(setq DZN (getvar “dimzin”))
(setvar “dimzin” 0)
(setq rad (rtos (getvar “filletrad”) 2 (getvar “luprec”)))
(setvar “dimzin” DZN)
(if (setq rad (getdist (strcat “모깎기 반지름 지정 <” rad “>: “))) (setvar “filletrad” rad))
(setvar “dimzin” 0)
(setq rad (rtos (getvar “filletrad”) 2 (getvar “luprec”)))
(setvar “dimzin” DZN)
(setq RD rad)
)
(setq DZN (getvar “dimzin”))
(setvar “dimzin” 0)
(setq rad (rtos (getvar “filletrad”) 2 (getvar “luprec”)))
(setvar “dimzin” DZN)
(if (setq rad (getdist (strcat “모깎기 반지름 지정 <” rad “>: “))) (setvar “filletrad” rad))
(setvar “dimzin” 0)
(setq rad (rtos (getvar “filletrad”) 2 (getvar “luprec”)))
(setvar “dimzin” DZN)
(setq RD rad)
)
(defun $Trim_Mode ( / TM)
(if (= (getvar “trimmode”) 0) (setq TM “자르지 않기”) (setq TM “자르기”))
(initget “Trim Notrim”)
(setq TM (getkword (strcat “n자르기 모드 옵션 입력 [자르기(T)/자르지 않기(N)] <” TM “>: “)))
(cond
((= TM “Trim”)(setvar “trimmode” 1))
((= TM “Notrim”)(setvar “trimmode” 0))
)
)
(if (= (getvar “trimmode”) 0) (setq TM “자르지 않기”) (setq TM “자르기”))
(initget “Trim Notrim”)
(setq TM (getkword (strcat “n자르기 모드 옵션 입력 [자르기(T)/자르지 않기(N)] <” TM “>: “)))
(cond
((= TM “Trim”)(setvar “trimmode” 1))
((= TM “Notrim”)(setvar “trimmode” 0))
)
)
(defun $Undo_Mode ( / a b c)
(setq a (getvar “filletrad”)
b (getvar “chamfera”)
c (getvar “chamferb”)
)
(vl-cmdf “Undo” “Back”)
(setq UN (+ AN (1- UN)) AN 0)
(setvar “filletrad” a)
(setvar “chamfera” b)
(setvar “chamferb” c)
)
(setq a (getvar “filletrad”)
b (getvar “chamfera”)
c (getvar “chamferb”)
)
(vl-cmdf “Undo” “Back”)
(setq UN (+ AN (1- UN)) AN 0)
(setvar “filletrad” a)
(setvar “chamfera” b)
(setvar “chamferb” c)
)
(defun $Undo_Mark ()
(vl-cmdf “Undo” “Mark”)
(setq UN (1+ UN))
T
)
(vl-cmdf “Undo” “Mark”)
(setq UN (1+ UN))
T
)
(defun $Pi_Debug (ang)
(if (or (equal ang (* pi 2) 1e0) (equal ang 0 1e0)) 0 ang)
)
(if (or (equal ang (* pi 2) 1e0) (equal ang 0 1e0)) 0 ang)
)
(defun $Distance_Check (ep en TYPE / A10 A11 B10 B11 BP ea eb ang1 ang2 L1 L2 len len1 len2 ts)
(if (and (equal (assoc 0 (entget (car ep))) (cons 0 “LINE”))
(equal (assoc 0 (entget (car en))) (cons 0 “LINE”))
)
(progn
(setq ea (entget (car ep))
eb (entget (car en))
A10 (cdr (assoc 10 ea))
A11 (cdr (assoc 11 ea))
B10 (cdr (assoc 10 eb))
B11 (cdr (assoc 11 eb))
BP (inters A10 A11 B10 B11 nil)
)
(if BP
(progn
(if (equal ($Pi_Debug (angle (cadr ep) A10))
($Pi_Debug (angle BP (cadr ep)))
1e0
)
(setq L1 (distance BP A10) ang1 (angle BP A10))
(setq L1 (distance BP A11) ang1 (angle BP A11))
)
(if (equal ($Pi_Debug (angle (cadr en) B10))
($Pi_Debug (angle BP (cadr en)))
1e0
)
(setq L2 (distance BP B10) ang2 (angle BP B10))
(setq L2 (distance BP B11) ang2 (angle BP B11))
)
(if (and (equal (assoc 0 (entget (car ep))) (cons 0 “LINE”))
(equal (assoc 0 (entget (car en))) (cons 0 “LINE”))
)
(progn
(setq ea (entget (car ep))
eb (entget (car en))
A10 (cdr (assoc 10 ea))
A11 (cdr (assoc 11 ea))
B10 (cdr (assoc 10 eb))
B11 (cdr (assoc 11 eb))
BP (inters A10 A11 B10 B11 nil)
)
(if BP
(progn
(if (equal ($Pi_Debug (angle (cadr ep) A10))
($Pi_Debug (angle BP (cadr ep)))
1e0
)
(setq L1 (distance BP A10) ang1 (angle BP A10))
(setq L1 (distance BP A11) ang1 (angle BP A11))
)
(if (equal ($Pi_Debug (angle (cadr en) B10))
($Pi_Debug (angle BP (cadr en)))
1e0
)
(setq L2 (distance BP B10) ang2 (angle BP B10))
(setq L2 (distance BP B11) ang2 (angle BP B11))
)
(if (= TYPE 1)
(setq len1 (abs (* (cos (/ (abs (- ang2 ang1)) 2))
(expt (cos (/ (- pi (abs (- ang2 ang1))) 2)) -1)
(getvar “filletrad”)
))
len2 len1
ts “반지름이”
)
(setq len1 (getvar “chamfera”) len2 (getvar “chamferb”) ts “거리가”)
)
(setq len1 (abs (* (cos (/ (abs (- ang2 ang1)) 2))
(expt (cos (/ (- pi (abs (- ang2 ang1))) 2)) -1)
(getvar “filletrad”)
))
len2 len1
ts “반지름이”
)
(setq len1 (getvar “chamfera”) len2 (getvar “chamferb”) ts “거리가”)
)
(if (and (> L1 len1) (> L2 len2)) T
(progn (prompt (strcat “n” ts ” 너무 큼”)) nil)
)
)
(progn (prompt (strcat “n” ts ” 너무 큼”)) nil)
)
)
(progn (prompt (strcat “n두 선이 교차하지 않음”)) nil)
)
) T
)
)
)
) T
)
)
(defun $Squre_Point
(pt1 pt2 / pt01 pt02 pt03 pt04 x_pt1 x_pt2 y_pt1 y_pt2 buffer)
(setq x_pt1 (car pt1) x_pt2 (car pt2)
y_pt1 (cadr pt1) y_pt2 (cadr pt2)
pt01 (list x_pt1 y_pt1 0.0)
pt02 (list x_pt1 y_pt2 0.0)
pt03 (list x_pt2 y_pt2 0.0)
pt04 (list x_pt2 y_pt1 0.0)
)
(list pt01 pt02 pt03 pt04 pt01)
)
(pt1 pt2 / pt01 pt02 pt03 pt04 x_pt1 x_pt2 y_pt1 y_pt2 buffer)
(setq x_pt1 (car pt1) x_pt2 (car pt2)
y_pt1 (cadr pt1) y_pt2 (cadr pt2)
pt01 (list x_pt1 y_pt1 0.0)
pt02 (list x_pt1 y_pt2 0.0)
pt03 (list x_pt2 y_pt2 0.0)
pt04 (list x_pt2 y_pt1 0.0)
)
(list pt01 pt02 pt03 pt04 pt01)
)
(defun $M2P (pt1 pt2)
(if (/= pt2 nil)
(list
(/ (+ (car pt1) (car pt2)) 2)
(/ (+ (cadr pt1) (cadr pt2)) 2)
0.0
)
(list (car pt1) (cadr pt1) 0.0)
)
)
(if (/= pt2 nil)
(list
(/ (+ (car pt1) (car pt2)) 2)
(/ (+ (cadr pt1) (cadr pt2)) 2)
0.0
)
(list (car pt1) (cadr pt1) 0.0)
)
)
(defun $Chamfer_Select_A (DS / ep tp bp str)
(setq ep “mode”)
(while (not (listp ep))
(if (> UN 0)
(progn (setq str “/명령 취소(U)”) (initget “Distance Trim Undo”))
(progn (setq str “”) (initget “Distance Trim”))
)
(setq str (strcat “n객체 선택 또는 [거리(D)/자르기(T)” str “]: “)
ep (entsel str)
)
(cond
((= ep “Trim”)($Trim_Mode))
((= ep “Distance”)(setq DS ($Chamfer_Mode DS)))
((= ep “Undo”)($Undo_Mode))
((= ep nil)(setq ep nil))
((= ep)
(setq tp (cdr (assoc 0 (entget (car ep))))
bp “LINE,LWPOLYLINE”
)
(if (= (vl-string-search tp bp) nil) (setq ep “mode”))
)
)
)(if ep (list ep) ep)
)
(setq ep “mode”)
(while (not (listp ep))
(if (> UN 0)
(progn (setq str “/명령 취소(U)”) (initget “Distance Trim Undo”))
(progn (setq str “”) (initget “Distance Trim”))
)
(setq str (strcat “n객체 선택 또는 [거리(D)/자르기(T)” str “]: “)
ep (entsel str)
)
(cond
((= ep “Trim”)($Trim_Mode))
((= ep “Distance”)(setq DS ($Chamfer_Mode DS)))
((= ep “Undo”)($Undo_Mode))
((= ep nil)(setq ep nil))
((= ep)
(setq tp (cdr (assoc 0 (entget (car ep))))
bp “LINE,LWPOLYLINE”
)
(if (= (vl-string-search tp bp) nil) (setq ep “mode”))
)
)
)(if ep (list ep) ep)
)
(defun $Chamfer_Select_B (DS / ep tp bp)
(setq ep “mode”)
(while (not (listp ep))
(initget “Distance Trim”)
(setq ep (entsel “n두 번째 객체 선택 또는 Shift 키를 누른 채 선택하여 구석 적용 또는 [거리(D)/자르기(T)]: “))
(cond
((= ep “Trim”)($Trim_Mode))
((= ep “Distance”)(setq DS ($Chamfer_Mode DS)))
((= ep nil)(setq ep nil))
((= ep)
(setq tp (cdr (assoc 0 (entget (car ep))))
bp “LINE,LWPOLYLINE”
)
(if (= (vl-string-search tp bp) nil) (setq ep “mode”))
)
)
)(if ep (list ep) ep)
)
(setq ep “mode”)
(while (not (listp ep))
(initget “Distance Trim”)
(setq ep (entsel “n두 번째 객체 선택 또는 Shift 키를 누른 채 선택하여 구석 적용 또는 [거리(D)/자르기(T)]: “))
(cond
((= ep “Trim”)($Trim_Mode))
((= ep “Distance”)(setq DS ($Chamfer_Mode DS)))
((= ep nil)(setq ep nil))
((= ep)
(setq tp (cdr (assoc 0 (entget (car ep))))
bp “LINE,LWPOLYLINE”
)
(if (= (vl-string-search tp bp) nil) (setq ep “mode”))
)
)
)(if ep (list ep) ep)
)
(defun $Fillet_Select_A (RD / ep tp bp str)
(setq ep “mode”)
(while (not (listp ep))
(if (> UN 0)
(progn (setq str “/명령 취소(U)”) (initget “Radius Trim Undo”))
(progn (setq str “”) (initget “Radius Trim”))
)
(setq str (strcat “n객체 선택 또는 [반지름(R)/자르기(T)” str “]: “)
ep (entsel str)
)
(cond
((= ep “Trim”)($Trim_Mode))
((= ep “Radius”)(setq RD ($Radius_Mode RD)))
((= ep “Undo”)($Undo_Mode))
((= ep nil)(setq ep nil))
((= ep)
(setq tp (cdr (assoc 0 (entget (car ep))))
bp “LINE,LWPOLYLINE,CIRCLE,ARC,ELLIPSE”
)
(if (= (vl-string-search tp bp) nil) (setq ep “mode”))
)
)
)(if ep (list ep) ep)
)
(setq ep “mode”)
(while (not (listp ep))
(if (> UN 0)
(progn (setq str “/명령 취소(U)”) (initget “Radius Trim Undo”))
(progn (setq str “”) (initget “Radius Trim”))
)
(setq str (strcat “n객체 선택 또는 [반지름(R)/자르기(T)” str “]: “)
ep (entsel str)
)
(cond
((= ep “Trim”)($Trim_Mode))
((= ep “Radius”)(setq RD ($Radius_Mode RD)))
((= ep “Undo”)($Undo_Mode))
((= ep nil)(setq ep nil))
((= ep)
(setq tp (cdr (assoc 0 (entget (car ep))))
bp “LINE,LWPOLYLINE,CIRCLE,ARC,ELLIPSE”
)
(if (= (vl-string-search tp bp) nil) (setq ep “mode”))
)
)
)(if ep (list ep) ep)
)
(defun $Fillet_Select_B (RD / ep tp bp)
(setq ep “mode”)
(while (not (listp ep))
(initget “Radius Trim”)
(setq ep (entsel “n두 번째 객체 선택 또는 Shift 키를 누른 채 선택하여 구석 적용 또는 [반지름(R)/자르기(T)]: “))
(cond
((= ep “Trim”)($Trim_Mode))
((= ep “Radius”)(setq RD ($Radius_Mode RD)))
((= ep nil)(setq ep nil))
((= ep)
(setq tp (cdr (assoc 0 (entget (car ep))))
bp “LINE,LWPOLYLINE,CIRCLE,ARC,ELLIPSE”
)
(if (= (vl-string-search tp bp) nil) (setq ep “mode”))
)
)
)(if ep (list ep) ep)
)
(setq ep “mode”)
(while (not (listp ep))
(initget “Radius Trim”)
(setq ep (entsel “n두 번째 객체 선택 또는 Shift 키를 누른 채 선택하여 구석 적용 또는 [반지름(R)/자르기(T)]: “))
(cond
((= ep “Trim”)($Trim_Mode))
((= ep “Radius”)(setq RD ($Radius_Mode RD)))
((= ep nil)(setq ep nil))
((= ep)
(setq tp (cdr (assoc 0 (entget (car ep))))
bp “LINE,LWPOLYLINE,CIRCLE,ARC,ELLIPSE”
)
(if (= (vl-string-search tp bp) nil) (setq ep “mode”))
)
)
)(if ep (list ep) ep)
)
(defun $Modify_Select (Type / ss pt pt1 pt2 n ent)
(setq pt1 (grread T 4 1) n 0)
(if (= (car pt1) 12) nil (setq pt1 (cadr pt1)))
(setvar “osmode” 0)
(if (= Type 1) (setq ft “LINE,LWPOLYLINE,CIRCLE,ARC,ELLIPSE”) (setq ft “LINE,LWPOLYLINE”))
(if (= (setq pt2 (getcorner pt1 “반대 구석 지정: “)) nil) nil)
(setq ss (ssget “F” ($Squre_Point pt1 pt2) (list (cons 0 ft))))
(cond
((= ss nil) (setq ent nil))
((and (= (sslength ss) 1) (equal (assoc 0 (entget (ssname ss 0))) (cons 0 “LWPOLYLINE”)))
(if (= (length (car (ssnamex ss))) 4)
(setq ent (list (list (ssname ss 0) ($M2P (cadr (nth 3 (car (ssnamex ss n)))) nil))))
(if (= (length (car (ssnamex ss))) 5)
(setq ent (list
(list (ssname ss 0) ($M2P (cadr (nth 3 (car (ssnamex ss n)))) nil))
(list (ssname ss 0) ($M2P (cadr (nth 4 (car (ssnamex ss n)))) nil))
)
)
)
)
)
((= ss)
(repeat (sslength ss)
(setq buffer (ssname ss n)
pt1 (cadr (nth 3 (car (ssnamex ss n))))
pt2 (cadr (nth 4 (car (ssnamex ss n))))
pt ($M2P pt1 pt2)
buffer (list buffer pt)
ent (append ent (list buffer))
n (1+ n)
)
)
)
)(setvar “osmode” OS)ent
)
(setq pt1 (grread T 4 1) n 0)
(if (= (car pt1) 12) nil (setq pt1 (cadr pt1)))
(setvar “osmode” 0)
(if (= Type 1) (setq ft “LINE,LWPOLYLINE,CIRCLE,ARC,ELLIPSE”) (setq ft “LINE,LWPOLYLINE”))
(if (= (setq pt2 (getcorner pt1 “반대 구석 지정: “)) nil) nil)
(setq ss (ssget “F” ($Squre_Point pt1 pt2) (list (cons 0 ft))))
(cond
((= ss nil) (setq ent nil))
((and (= (sslength ss) 1) (equal (assoc 0 (entget (ssname ss 0))) (cons 0 “LWPOLYLINE”)))
(if (= (length (car (ssnamex ss))) 4)
(setq ent (list (list (ssname ss 0) ($M2P (cadr (nth 3 (car (ssnamex ss n)))) nil))))
(if (= (length (car (ssnamex ss))) 5)
(setq ent (list
(list (ssname ss 0) ($M2P (cadr (nth 3 (car (ssnamex ss n)))) nil))
(list (ssname ss 0) ($M2P (cadr (nth 4 (car (ssnamex ss n)))) nil))
)
)
)
)
)
((= ss)
(repeat (sslength ss)
(setq buffer (ssname ss n)
pt1 (cadr (nth 3 (car (ssnamex ss n))))
pt2 (cadr (nth 4 (car (ssnamex ss n))))
pt ($M2P pt1 pt2)
buffer (list buffer pt)
ent (append ent (list buffer))
n (1+ n)
)
)
)
)(setvar “osmode” OS)ent
)
(defun $Chamfer_Main ( / DSC DS ep en DC OS UN AN)
(defun *error* (msg)
(command nil)
(if DC (redraw DC 4))
(if OS (setvar “osmode” OS))
(vl-cmdf “Undo” “End”)
(setvar “cmdecho” 1)
(defun *error* (msg)(princ))
(princ)
)
(setq OS (getvar “osmode”)
DS ($Chamfer_Prompt)
UN 0
AN 0
)
(setvar “cmdecho” 0)
(vl-cmdf “Undo” “End”)
(vl-cmdf “Undo” “Begin”)
(while DS
(setq ep ($Chamfer_Select_A DS))
(if (= ep nil) (setq ep ($Modify_Select 2)))
(cond
((= (length ep) 1)
(setq ep (car ep))
(if (= (cdr (assoc 0 (entget (car ep)))) “LWPOLYLINE”)
(progn
(setq AN 1)
(command “Chamfer” (cadr ep)
(if (or (setq en ($Chamfer_Select_B DS)) (= (length (setq en ($Modify_Select 2))) 1))
(cadr (car en))
nil
)
)
(if (= (length en) 1) ($Undo_Mark))
)
(progn
(command “Chamfer” (cadr ep)
(if (or (setq en ($Chamfer_Select_B DS)) (setq en ($Modify_Select 2))) nil nil)
)
(if (= (length en) 1)
(progn
(setq en (car en) DSC ($Distance_Check ep en 2))
(if (= (cdr (assoc 0 (entget (car en)))) “LWPOLYLINE”) (setq en (cadr en)))
(if (and DSC ($Undo_Mark)) (command “Chamfer” ep en) (progn (prompt (strcat “n*유효하지 않음*”)) nil))
)
)
)
)
)
(defun *error* (msg)
(command nil)
(if DC (redraw DC 4))
(if OS (setvar “osmode” OS))
(vl-cmdf “Undo” “End”)
(setvar “cmdecho” 1)
(defun *error* (msg)(princ))
(princ)
)
(setq OS (getvar “osmode”)
DS ($Chamfer_Prompt)
UN 0
AN 0
)
(setvar “cmdecho” 0)
(vl-cmdf “Undo” “End”)
(vl-cmdf “Undo” “Begin”)
(while DS
(setq ep ($Chamfer_Select_A DS))
(if (= ep nil) (setq ep ($Modify_Select 2)))
(cond
((= (length ep) 1)
(setq ep (car ep))
(if (= (cdr (assoc 0 (entget (car ep)))) “LWPOLYLINE”)
(progn
(setq AN 1)
(command “Chamfer” (cadr ep)
(if (or (setq en ($Chamfer_Select_B DS)) (= (length (setq en ($Modify_Select 2))) 1))
(cadr (car en))
nil
)
)
(if (= (length en) 1) ($Undo_Mark))
)
(progn
(command “Chamfer” (cadr ep)
(if (or (setq en ($Chamfer_Select_B DS)) (setq en ($Modify_Select 2))) nil nil)
)
(if (= (length en) 1)
(progn
(setq en (car en) DSC ($Distance_Check ep en 2))
(if (= (cdr (assoc 0 (entget (car en)))) “LWPOLYLINE”) (setq en (cadr en)))
(if (and DSC ($Undo_Mark)) (command “Chamfer” ep en) (progn (prompt (strcat “n*유효하지 않음*”)) nil))
)
)
)
)
)
((= (length ep) 2)
(setq en (cadr ep) ep (car ep) DSC ($Distance_Check ep en 2))
(if (= (cdr (assoc 0 (entget (car ep)))) “LWPOLYLINE”) (setq ep (cadr ep)))
(if (= (cdr (assoc 0 (entget (car en)))) “LWPOLYLINE”) (setq en (cadr en)))
(if (and DSC ($Undo_Mark)) (command “Chamfer” ep en) (progn (prompt (strcat “n*유효하지 않음*”)) nil))
)
(setq en (cadr ep) ep (car ep) DSC ($Distance_Check ep en 2))
(if (= (cdr (assoc 0 (entget (car ep)))) “LWPOLYLINE”) (setq ep (cadr ep)))
(if (= (cdr (assoc 0 (entget (car en)))) “LWPOLYLINE”) (setq en (cadr en)))
(if (and DSC ($Undo_Mark)) (command “Chamfer” ep en) (progn (prompt (strcat “n*유효하지 않음*”)) nil))
)
((and (/= (length ep) 0) (/= (length ep) 1) (/= (length ep) 2)) (progn (strcat “n*유효하지 않는 선택*”)))
)
(if DC (redraw DC 4))
(command nil)
)(princ)
)
)
(if DC (redraw DC 4))
(command nil)
)(princ)
)
(defun $Fillet_Main ( / RC RD ep en DC OS UN AN)
(defun *error* (msg)
(command nil)
(if DC (redraw DC 4))
(if OS (setvar “osmode” OS))
(vl-cmdf “Undo” “End”)
(setvar “cmdecho” 1)
(defun *error* (msg)(princ))
(princ)
)
(setq OS (getvar “osmode”)
RD ($Fillet_Prompt)
UN 0
AN 0
)
(setvar “cmdecho” 0)
(vl-cmdf “Undo” “End”)
(vl-cmdf “Undo” “Begin”)
(while RD
(setq ep ($Fillet_Select_A RD))
(if (= ep nil) (setq ep ($Modify_Select 1)))
(cond
((= (length ep) 1)
(setq ep (car ep))
(if (= (cdr (assoc 0 (entget (car ep)))) “LWPOLYLINE”)
(progn
(setq AN 1)
(command “fillet” (cadr ep)
(if (or (setq en ($Fillet_Select_B RD)) (= (length (setq en ($Modify_Select 1))) 1))
(cadr (car en))
nil
)
)
(if (= (length en) 1) ($Undo_Mark))
)
(progn
(command “fillet” ep
(if (or (setq en ($Fillet_Select_B RD)) (setq en ($Modify_Select 1))) nil nil)
)
(if (= (length en) 1)
(progn
(setq en (car en) RC ($Distance_Check ep en 1))
(if (= (cdr (assoc 0 (entget (car en)))) “LWPOLYLINE”) (setq en (cadr en)))
(if (and RC ($Undo_Mark)) (command “Fillet” ep en) (progn (prompt (strcat “n*유효하지 않음*”)) nil))
)
)
)
)
)
(defun *error* (msg)
(command nil)
(if DC (redraw DC 4))
(if OS (setvar “osmode” OS))
(vl-cmdf “Undo” “End”)
(setvar “cmdecho” 1)
(defun *error* (msg)(princ))
(princ)
)
(setq OS (getvar “osmode”)
RD ($Fillet_Prompt)
UN 0
AN 0
)
(setvar “cmdecho” 0)
(vl-cmdf “Undo” “End”)
(vl-cmdf “Undo” “Begin”)
(while RD
(setq ep ($Fillet_Select_A RD))
(if (= ep nil) (setq ep ($Modify_Select 1)))
(cond
((= (length ep) 1)
(setq ep (car ep))
(if (= (cdr (assoc 0 (entget (car ep)))) “LWPOLYLINE”)
(progn
(setq AN 1)
(command “fillet” (cadr ep)
(if (or (setq en ($Fillet_Select_B RD)) (= (length (setq en ($Modify_Select 1))) 1))
(cadr (car en))
nil
)
)
(if (= (length en) 1) ($Undo_Mark))
)
(progn
(command “fillet” ep
(if (or (setq en ($Fillet_Select_B RD)) (setq en ($Modify_Select 1))) nil nil)
)
(if (= (length en) 1)
(progn
(setq en (car en) RC ($Distance_Check ep en 1))
(if (= (cdr (assoc 0 (entget (car en)))) “LWPOLYLINE”) (setq en (cadr en)))
(if (and RC ($Undo_Mark)) (command “Fillet” ep en) (progn (prompt (strcat “n*유효하지 않음*”)) nil))
)
)
)
)
)
((= (length ep) 2)
(setq en (cadr ep) ep (car ep) RC ($Distance_Check ep en 1))
(if (= (cdr (assoc 0 (entget (car ep)))) “LWPOLYLINE”) (setq ep (cadr ep)))
(if (= (cdr (assoc 0 (entget (car en)))) “LWPOLYLINE”) (setq en (cadr en)))
(if (and RC ($Undo_Mark)) (command “Fillet” ep en) (progn (prompt (strcat “n*유효하지 않음*”)) nil))
)
(setq en (cadr ep) ep (car ep) RC ($Distance_Check ep en 1))
(if (= (cdr (assoc 0 (entget (car ep)))) “LWPOLYLINE”) (setq ep (cadr ep)))
(if (= (cdr (assoc 0 (entget (car en)))) “LWPOLYLINE”) (setq en (cadr en)))
(if (and RC ($Undo_Mark)) (command “Fillet” ep en) (progn (prompt (strcat “n*유효하지 않음*”)) nil))
)
((and (/= (length ep) 0) (/= (length ep) 1) (/= (length ep) 2)) (prompt (strcat “n*유효하지 않는 선택*”)))
)
(if DC (redraw DC 4))
(command nil)
)(princ)
)
)
(if DC (redraw DC 4))
(command nil)
)(princ)
)
(defun c:BOXFILLET ()(prompt “BOXFILLET”)($Fillet_Main))
(defun c:BOXCHAMFER ()(prompt “BOXCHAMFER”)($Chamfer_Main))
(defun c:BOXCHAMFER ()(prompt “BOXCHAMFER”)($Chamfer_Main))
(defun c:BF ()(prompt “BOXFILLET”)($Fillet_Main))
(defun c:CF ()(prompt “BOXCHAMFER”)($Chamfer_Main))
(defun c:CF ()(prompt “BOXCHAMFER”)($Chamfer_Main))