각도치수기입 리습인데요 명령어 실행후 객체 두개를 클릭한 후 바닥에 내려놓으면 각도치수기입후 레이어가 변경되는 리습입니다.
근데 현재 리습으로는 각도기입 후에 레이어가 바뀌지않아요 ㅜㅜ….
“dimangular” 뒤에 pause pause pause를 넣어서 사용하면 레이어가 바뀝니다.
다만 그렇게하면 딱 세번클릭만에 각도치수기입을 끝내야합니다 중간데 라인을 클릭하려다가 실수로 아무것도없는곳을 클릭하면 그대로 명령어가 종료?? 되어버립니다. 그래서 처음부터 다시명령어를 진행해야 합니다….
아무래도 제생각에는 “dimangular” 실행이후 사용자가 조작해버려서 그 뒷줄부터는 리습이 적용되지 않는것 같습니다 .. 어떻게해야할지 잘모르겟네요 뭐가문제인지 .. ㅜㅜ
아 그리고 (command “dimoverride” “l” “”) 이 문구가 무슨 기능을 하는지 알수있을까요 ??
파이 치수기입이나 R 치수기입시에 원클릭후, 치수 내려놓기전에 치수가 원안에서만 빙글빙글 돌기때문에 치수를 내려놓고 그다음 치수를 클릭해서 떙겨서 원 바깥에 치수를 내려놓곤 하는데요 .. 그런거 해결할떄 쓸수잇는 명령어인지 ….?? 아니면 그것 해결하는 다른방법이 있는지요 ??
질문이많은데 힘드시겠지만 답변 부탁드립니다 . ㅜㅜ 가르쳐주는 사람없이 배우려니 너무 터득하기 힘드네요 .. 감사합니다.
(defun c:DA () 각도
;->*error* start ; 작업중 취소 또는 에러 발생시 레이어 복원함
(defun *error* (msg)(princ “error: “)(princ msg) (setvar “clayer” cla) (princ))
;-<*error* end
(setq cla (getvar “clayer”)) ; 현재 레이어 저장
(command “undo” “be”)
(SETVAR “CMDECHO” 0)
(GRAPHSCR)
(COMMAND “DIMANGULAR” )
(command “change” “l” “” “p” “la” “DIM” “”)
(command “dimoverride” “l” “”)
(GRAPHSCR)
(command “undo” “e”)
(setvar “clayer” cla) ; 저장했던 레이어로 복원
) ;Defun end
답변을 부탁해야되지 않을까요?
답변부탁드립니다 .ㅜㅜ 제가 오타로 잘못썻네요 죄송합니다
기초가 부족하시니 command를 사용하게 되죠?
꼭 필요한 경우 빼고는 command 사용을 권장하지 않습니다.
아랫걸 실행해보세요…
보기에는 1 표기 -> line 그리기 -> 2 표기일 것 같지만!!
1 표기 -> 2 표기 -> line 그리기 끝!!
(defun c:test()
(princ “n1”)
(command “line”)
(princ “n2”)
(princ)
)
위에서 마찬가지로 pause를 사용하지 않으면 (COMMAND “DIMANGULAR” ) 를 맨마지막으로 끝납니다.
고로~ command 함수만 가지고는 원하는 결과를 얻을 수 없습니다.
기초(함수)부터 공부하세요~
저도 하다보니 그정도까지는 파악을 했는데 그래서 결국 어떤방법으로 해결할지를 찾지못해서 글을 올린거거든요. command 로 해결하지못한다면 어떤함수를 사용해야 제가원하는 결과를 얻을수 있는지 아무리 검색해도 잘 못찾겟네요 도움좀 부탁드립니다
어디에서 답을 찾아야할지 감을못잡겟네요
하고 싶으신 게 생성된 치수를 dim레이어로 설정하는 거라면..
첨부된 리습을 로드하고 목차에 두시면 치수 그릴 때마다 자동으로 dim레이어로 됩니다.
command만 가지고는 제가 원하는 결과를 얻을수 없다 하셨잖아요 ?
그럼 command 이외에 어떤함수가 들어가야 pause없이 리습이 순서대로 이어지도록 할수 있는지요 ?
그것에대한 답을 알고싶습니다. 치수를 전부 dim으로 바꾸는것 뿐아니라 다른경우에도 응용하고 싶어서요.
(command “DIMANGULAR” pause pause pause) 하면 계속 실행되긴하는데
pause라는게 dimangular 명령에 필요한 사용자입력을 기다리는게 아니라 어떠한 명령이라도 허용되는 것이라서 실수로 미스클릭을 한다던지 하면 리습이 재대로 실행이안되는데요 .. dimangular 명령에 필요한 사용자입력만 허용할수있는 방법이 있을런지요 ..
고쳐 쓰신다고 하시니 응용해서 사용하세요~
(vl-load-com)
(defun c:da ( / LM:SelectIf s1 s2 tmp ent)
;By lee-mac
(defun LM:SelectIf ( msg pred func keyw / sel )
(setq pred (eval pred))
(while
(progn (setvar ‘ERRNO 0) (if keyw (apply ‘initget keyw)) (setq sel (func msg))
(cond
( (= 7 (getvar ‘ERRNO))
(princ “n선택된 것이 없습니다, 다시 시도해주세요.”)
)
((eq ‘STR (type sel))
nil
)
((vl-consp sel)
(if (and pred (not (pred sel)))
(princ “n유효하지 않은 객체 선택.”)
)
)
)
)
)
sel
)
(cond
((null (setq s1 (LM:SelectIf “n첫 번째 선 선택:” ‘(lambda (x) (wcmatch (cdr (assoc 0 (entget (car x)))) “LINE”)) entsel nil))))
((null (setq s2 (LM:SelectIf “n두 번째 선 선택:” ‘(lambda (x) (wcmatch (cdr (assoc 0 (entget (car x)))) “LINE”)) entsel nil))))
(T
(setvar ‘cmdecho 0)
(setq tmp (entlast))
(command “DIMANGULAR” s1 s2 pause)
(if (null (equal tmp (setq ent (entlast))))
(command “change” ent “” “p” “la” “DIM” “”)
)
)
)
(princ)
)
감사합니다 ^^ 라인만 선택되도록 되었네요
근데 블록 속에 들어있는 라인은 셀렉이 되지 않네요 ㅜㅜ…. 보통 각도치수는 블록안에 들어있는 라인이라도 클릭이 되잖아요 그렇게 하려면 복잡한가요|?
entsel대신 nentsel 쓰세요. 헌데 그렇게 모든 걸 물어보고 답변드릴 수 없잖아요.
그래서 제가 우선 기초부터 … 도움말에 함수 쭉 훑어보고 정리하세요.
다른 방법은..
(defun c:da()
(command “DIMANGULAR”)
(while (progn (setvar ‘ERRNO 0) (princ “n첫 번째 선 선택:”) (command pause) (= (getvar ‘ERRNO) 7)))
(if (= (getvar ‘ERRNO) 0)
(progn
(while (progn (setvar ‘ERRNO 0) (princ “n두 번째 선 선택:”) (command pause) (= (getvar ‘ERRNO) 7)))
(if (= (getvar ‘ERRNO) 0)
(progn
(princ “n치수선 위치 지정”)
(command pause)
(command “change” “l” “” “p” “la” “DIM” “”)
)
(command nil)
)
)
(command nil)
)
(princ)
)
((null (setq s2 (LM:SelectIf “n두 번째 선 선택:” ‘(lambda (x) (wcmatch (cdr (assoc 0 (entget (car x)))) “LINE”)) entsel nil))))
이부분에서 entsel 을 nentsel로 수정했는데 블럭속라인이 선택되지않네요 ㅜㅜㅜ
아! 이렇게 하니까 해결되었네요! 정말감사합니다 ㅜㅜ
while 구문 사용시에 command “undo” be 와 command “undo” e 구문은 어디에 들어가야 할까요 ?
undo시 두번 undo해야 치수가 삭제되네요 ㅜㅜ 죄송합니다 질문이너무 많네요 정말죄송합니다 ㅜㅜ
아 (command “DIMANGULAR”) 와 (command “change” “l” “” “p” “la” “DIM” “”) 위아래에 넣으니 해결되었네요 갑사합니다 ^^ 죄송합니다^^
올려주신 lisp참고서가 웹페이지탐색이 취소되엇다고 나오네요 ㅜㅜ 열어보고싶은데
제가 이것저것 응용해보고있는데요
(while (progn (setvar ‘ERRNO 0) (princ “n두 번째 선 선택:”) (command pause) (= (getvar ‘ERRNO) 7)))
(if (= (getvar ‘ERRNO) 0)
(progn
구문은 원치수기입할떄는 객체클릭이 1번이기떄문에 1번만 넣으면 되는거죠 ???
근데 R치수기입 (DIMRADIUS)에 적용하려했는데 여기에는 적용이 되지않네요 ㅜㅜ 레이어가 바뀌지않아요 ㅜㅜ…. 다른치수기입과 R치수기입에선 다른점이있는건가요 ?ㅜㅜ
리습 공부하시는게 맞나요? 제가 만드는 거 같은데요??
(defun c:dr()
(command “DIMRADIUS”)
(while (progn (setvar ‘ERRNO 0) (princ “n호 또는 원 선택:”) (command pause) (= (getvar ‘ERRNO) 7)))
(if (= (getvar ‘ERRNO) 0)
(progn
(princ “n치수선의 위치 지정”)
(command pause)
(command “change” “l” “” “p” “la” “DIM” “”)
)
(command nil)
)
(princ)
)
예 ㅠㅠㅠ 제가 이것저것 넣어가면서 해보고있는데 공부하고있는거는 맞는데 초보라서 제가 이해가 조금 늦어요 죄송합니다 ..
저도 방금올려주신것처럼 똑같이 적용을 해보았는데요 .. R치수가 기입은 되는데
애초에 맨처음 저의 질문이었던 “실수로 공백을 클릭할시” 명령이 그대로 종료되어버리고 치수가 DIM레이어로 변경되지 않아서요 … 실수로 공백을 클릭하지않은 경우에는 정상작동합니다. (이것은 원래부터 그랬엇구요) 그래서 각도치수는 선을 요구하고 각도치수는 원이나 호를 요구하기때문에 그런점떄문에 그런거 아닌가해서요 …ㅜㅜ 죄송합니다 .. 언급하신 함수들이 제가 처음 접하는 함수라 어렵네요 …
다른 명령어도 똑같이 적용하면 될줄알았는데 그게 아닌것같습니다 .. ㅜㅜㅜㅜㅜㅜ 죄송합니다 ㅜㅜ
64bit autocad 2014에서 잘되는데요 ^^;;
(while (progn (setvar ‘ERRNO 0) (princ “n호 또는 원 선택:”) (command pause) (= (getvar ‘ERRNO) 7)))
(if (= (getvar ‘ERRNO) 0)
(progn 이게 한문장 지워졌기 떄문에 아래쪽에 “)”가 한개 지워졌어야 하는데 제가 그걸 몰랐네요
해결되었습니다 .정말 감사합니다 덕분에 많이 배웠습니다!. 감사합니다 ^^ 정말 대단하시네요 저도 얼른 많이 배우겠습니다 오늘하루 마무리 잘 하세요 ^^