|
성심 성의껏 질문을 작성하여 주세요, 대충하시면 답변도 대충작성합니다.^^
① CAD 종류 :
② VERSION :
③ 운영 체제 :
아래 리습중에
(if (=(setq ofsetdst(getvar"offsetdist"))-1.0) (setq ofsetdst(- ofsetdst)))
(setq ofsetmsg(strcat"\nSpecify offset distance <"(r2luprec ofsetdst)">: "))
(initget (+ 2 4))
(if (setq offsetdist(getdist ofsetmsg))
(setq offsetdist(setvar"offsetdist"(* 0.5 offsetdist)))
(setq offsetdist(setvar"offsetdist"(* 0.5 ofsetdst)))
)
이 부분에 해당되는것같은데
om 이라는 명령으로 양쪽으로 옵셋하는 리습인데
명령어 실행후 캐드 메시지창에 "nSpecify offset distance <당초기입력된값>: " 메시지가 뜨면
옵셋할 거리 "2"를 입력하게되면
양쪽으로 1m 씩 2m가 옵셋됩니다.
문제는 같은 거리로 재실행할때 당초기입력된값에 2가 아니라 1로 인식이 되버려서
이부분을 2로 입력했으면 기입력값이 2로 계속 인식되고 그대로 실행했을 때
양쪽으로 1씩 옵셋되게 수정하려고 여기저기 몇군데 바꿔봤는데 잘 안됩니다ㅠ
다시한번 도와주시면 감사하겠습니다
---------------------------------------------------------------
(vl-load-com)
(vlax-remove-cmd "offsetm")
(defun C:om
(/ *error* r2luprec
ofsetdst ofsetmsg offsetdist ss cmdecho
nn ename *ename* sParam eParam sPoint longth dParam mParam dist
ubound mPoint dirpnt ang leftpt rigtpt eline *eline* intsect ;;lists
)
(setvar"errno"0)
(defun *error*(errmsg)
(setvar"cmdecho"0)(command)(command)
(if (and
errmsg
(not(member errmsg '("Function cancelled" "quit / exit abort" "console break")))
)
(progn(princ"\nErrNo ")(princ(getvar"errno"))(princ": ")(princ errmsg))
)
(if cmdecho(setvar"cmdecho"cmdecho))
(if (and *ename*(not(vlax-object-released-p *ename*))) (vlax-release-object *ename*))
(if (and *eline*(not(vlax-object-released-p *eline*))) (vlax-release-object *eline*))
(if eline(entdel eline))
(princ)
)
;;
(defun r2luprec(num / dimzin return)
(if (=(type num)'STR) (setq num(atof num))(setq num(float num)))
(if (numberp num)
(progn
(setq dimzin(getvar"dimzin"))
(setvar "dimzin"0)
(setq return(rtos num(getvar"lunits")(getvar"luprec")))
(setvar "dimzin"dimzin)
) )
return
;;(setq a -1.2)(r2luprec a)(r2luprec"a")(r2luprec "2.3")(r2luprec -2.3)
)
;;
(if (=(setq ofsetdst(getvar"offsetdist"))-1.0) (setq ofsetdst(- ofsetdst)))
(setq ofsetmsg(strcat"\nSpecify offset distance <"(r2luprec ofsetdst)">: "))
(initget (+ 2 4))
(if (setq offsetdist(getdist ofsetmsg))
(setq offsetdist(setvar"offsetdist"(* 0.5 offsetdist)))
(setq offsetdist(setvar"offsetdist"(* 0.5 ofsetdst)))
)
;; You can offset lines, arcs, circles, 2D polylines,
;; ellipses, elliptical arcs, xlines, rays, and planar splines.
(if (setq ss(ssget":L"
'((-4 . "<OR")
(0 . "LINE")(0 . "ARC")(0 . "CIRCLE")(0 . "LWPOLYLINE")
(-4 . "<AND")(0 . "POLYLINE")(-4 . "<NOT")(-4 . "&=")(70 . 8)(-4 . "NOT>")(-4 . "AND>")
(0 . "ELLIPSE");;(0 . "XLINE")(0 . "RAY")
(-4 . "<AND")(0 . "SPLINE")(-4 . "&=")(70 . 8)(-4 . "AND>")
(-4 . "OR>")
)
))
;; "&" Bitwise AND (integer groups only)
;; The bitwise operators "&" and "&=" are valid only for integer-valued groups.
;; The bitwise AND, "&", is true if ((integer_group & filter) /= 0) that is,
;; if any of the bits set in the mask are also set in the integer group.
;; "&=" Bitwise masked equals (integer groups only)
;; The bitwise masked equals, "&=", is true if ((integer_group & filter) = filter) that is,
;; if all bits set in the mask are also set in the integer_group
;; (other bits might be set in the integer_group but are not checked).
(progn
(setq cmdecho(getvar"cmdecho"))
(setvar"cmdecho"0)
(setq nn -1)
(while (setq ename(ssname ss(setq nn(1+ nn))))
(setq *ename*(vlax-ename->vla-object ename))
(setq sParam(vlax-curve-getStartParam *ename*))
(setq eParam(vlax-curve-getEndParam *ename*))
(setq sPoint(vlax-curve-getStartPoint *ename*))
(setq longth(vlax-curve-getDistAtParam *ename* eParam))
;;
(setq dParam(*(- eParam sParam)0.0001))
(setq mParam(+ sParam dParam))
(setq dist(* longth 0.000001))
;;
(setq ubound nil)
(while (and
(/= ubound 2)
(setq mParam(+ mParam dParam))
(< mParam eParam)
)
(setq mPoint(vlax-curve-getPointAtParam *ename* mParam))
(setq dirpnt(vlax-curve-getFirstDeriv *ename* mParam))
(setq ang(angle(list 0.0 0.0)dirpnt))
(setq leftpt(polar mPoint(+ ang(* pi 0.5))dist))
(setq rigtpt(polar mPoint(- ang(* pi 0.5))dist))
(entmake (list'(0 . "LINE")(cons 10 leftpt)(cons 11 rigtpt)))
(setq eline(entlast))
(setq *eline*(vlax-ename->vla-object eline))
(setq intsect(vlax-variant-value(vla-IntersectWith *ename* *eline* acExtendNone)))
(setq ubound(vlax-safearray-get-u-bound intsect(vlax-safearray-get-dim intsect)))
;;(setq lists(vlax-safearray->list intsect))
(cond
((< ubound 0) (setq dist(* dist 2.0)))
((< 2 ubound) (setq dist(* dist 0.9)))
)
(vlax-release-object *eline*)
(entdel eline)
(setq eline nil)
)
;;
(command
"._offset"(getvar"offsetdist")
(list ename mPoint)"_none"(trans leftpt 0 1)
(list ename mPoint)"_none"(trans rigtpt 0 1) ""
)
(vlax-release-object *ename*)
)
;;(command)
)
)
(*error* nil)
)
(vlax-add-cmd "offsetm" 'C:offsetm "offsetm" (+ acrx_cmd_Modal acrx_cmd_Redraw))
※ 유의사항
- ①말머리 : 말머리를 달아야 구분이 쉽겠죠^^(필수 선택)
- ②Screenshot : 이해를 돕기위해 삽입요망.
- ③파일 첨부 : 상위버전에서 테스트할 파일이 아니면 가급적 하위버전으로 저장후 첨부.
해당리습/해당파일(DWG) 도 같이 첨부하여 주세요.
- ④제 목 : 질문 내용 반영(개략적인 내용), 예) 해치를 만들고 싶어요, pline을 연결할려면?
금지어(만들어주세요? 해주세요? 안되는데 이렇게 변경해주세요? 등등)
- ⑤질문글 삭제금지 : 질문후 댓글이 달린글은 삭제금지.
여러 리플러들이 소중한 시간을 내어서 고민한후 댓글을 작성한 이상 "강력조치" 토록 하겠음.
※ 정답만이 댓글은 아닙니다. 그 답이 맞던 틀리던 그건 그 댓글로서 존중되어야 합니다.
회원님들이 글을 읽었다는것과 댓글을 달았다는건 그만큼 관심을 가지고 있고 또 그 답을 해주기 위해
검색도 해보고 도움말도 보고 고민도 하는 일련의 과정을 거치면서 나오기 때문이죠.
이에 대한 고마움과 감사함을 모르는 테러행위(?)는 없었으면 합니다.
|
첫댓글 말머리 달아주세요^^
말머리 수정했습니다.
해당 파일내에서 유지됐음 좋겠단 건가요? 아니면 캐드 닫고 다시 열어도 기억했음 좋겠단 건가요?
현재 실행중에는 한번 기록한 값이 새로 변경값을 주기전까지 그대로 유지 되었으면 합니다.
캐드를 껐다가 켜도 다시 유지되면 더 좋을꺼같긴 합니다~~~!!