성심 성의껏 질문을 작성하여 주세요, 대충하시면 답변도 대충작성합니다.^^
① CAD 종류 :
② VERSION :
③ 운영 체제 :
④ 질문내용 및 스크린샷(이미지 및동영상)
리습파일 첨부해서 다시 질문드립니다.
CoMo.dcl
CoMo.LSP
vlax-add-cmd 코드를 이용해서 단축키를 추가하면 맨 마지막에 리습을 불러온 도면에서만 작동합니다.
오류 내용은 아래와 같습니다.
; 오류: Visual LISP command document mismatch
캐드 버전은 2019이고, SDI 0으로 탭을 이용해서 사용하는데 이게 문제가 된다는 것 같습니다.
리습 파일은 첨부했고 테스트용으로는 아래 코드를 이용했는데 마찬가지로 안되네요
(vlax-add-cmd "test" 'test)
(defun test ()
(princ "test")
)
⑤ 파일첨부 (LISP/DWG) - DWG 첨부시 보다 정확한 답변을 얻을수 있습니다.
※ 유의사항
- ①말머리 : 말머리를 달아야 구분이 쉽겠죠^^(필수 선택)
- ②Screenshot : 이해를 돕기위해 삽입요망.
- ③파일 첨부 : 상위버전에서 테스트할 파일이 아니면 가급적 하위버전으로 저장후 첨부.
해당리습/해당파일(DWG) 도 같이 첨부하여 주세요.
- ④제 목 : 질문 내용 반영(개략적인 내용), 예) 해치를 만들고 싶어요, pline을 연결할려면?
금지어(만들어주세요? 해주세요? 안되는데 이렇게 변경해주세요? 등등)
- ⑤질문글 삭제금지 : 질문후 댓글이 달린글은 삭제금지.
여러 리플러들이 소중한 시간을 내어서 고민한후 댓글을 작성한 이상 "강력조치" 토록 하겠음.
※ 정답만이 댓글은 아닙니다. 그 답이 맞던 틀리던 그건 그 댓글로서 존중되어야 합니다.
회원님들이 글을 읽었다는것과 댓글을 달았다는건 그만큼 관심을 가지고 있고 또 그 답을 해주기 위해
검색도 해보고 도움말도 보고 고민도 하는 일련의 과정을 거치면서 나오기 때문이죠.
이에 대한 고마움과 감사함을 모르는 테러행위(?)는 없었으면 합니다.
첫댓글 아 잘못봤습니다 죄송합니다.
흐미 어렵네요 검색해서 나오는 모든 방법을 동원 해봤으나 결과는 같네요
머리 하나보단 머리두개가 나을테니 방법을 찾아 낼 겁니다 ^^;;
도움 주셔서 감사합니다. 혹시 단축키 추가나 수정하는 방법 중에 다른 방법은 없을까요?
심낙천님의 COPIKA 리습에서는 오류가 없는걸로봐서 다른 방법으로 하는건지.. 어떤건지 모르겠네요 ㅎㅎ
@바라떼 해외사이트에서도 갑론을박하는거 보니 vlax-add-cmd 함수는 불안한 함수 같네요
(eval (list 'defun 'LM:acapp 'nil (vlax-get-acad-object))) <= 유명한 리맥씨 리습 구문 이게 도도도님이 말씀하신 eval을 사용한 스트링을 변수명으로 넣을수 있는 방법입니다 'LM:acapp 대신 해서
'C:입력값 으로 대체하시면 될듯 합니다 etc. (eval (list 'defun 'c:입력값 'nil '(실행할 함수)))
단축키 리스트를 텍스트 파일로 만들고 불러와서 변수에 적용하고 변경시에는 단축키 리스트 파일을 업데이트하는 방법은 가능하겠죠?
심낙천님의 COPIKA가 그런 형태로 사용하고 있습니다만.. 단축키를 변수로 설정하는 방법을 모르겠습니다.
저도 현재 따로 저장해놓은 상태이나 단축키로 불러오는 방법을 모르겠네요..
defun c: 뒤에 string이 아닌 변수 형태로 넣는 방법을 모르겠습니다. ㅠ.ㅠ
@바라떼 eval 함수를 사용해보세요
@도도도
@도도도 와... 감사합니다. 분명히 변수명으로 읽어오는 구문이 있을거라 생각했는데 eval이었네요!
구글링도 해보고 이것저것 시도해봤는데 안되네요..
key_00 = "coco" (string 형태)
1. (eval (list 'defun 'c:key_00 'nil' (c:CoMo))) -> key_00 명령어가 추가됨 (string으로 읽히는 듯함)
2. (eval(read(strcat "'(defun c:" key_00 " ( / ) (c:como))"))) -> (DEFUN C:COCO (/) (C:COMO)) 으로 인식은 되나 명령어 추가는 안됨
(eval(read(strcat "'(defun c:" key_00 " ( / ) (c:como))")))
위의 명령어를 고대로 복사해서 명령어창에 넣으면 결과 값이 (DEFUN C:COCO (/) (C:COMO)) 으로 나타납니다.
다만 명령어가 먹지는 않는 것 같고.. 결과 값으로 나온 (DEFUN C:COCO (/) (C:COMO)) 을 그대로 복사해서 다시 붙여넣으면 coco 명령어가 추가됩니다. ㅠㅠ
그러고 보니 말머리가 빠졌네용 말머리좀 붙혀주세요
(defun como_read(s)
(read s)
)
(setq str(strcat "c:"(getstring "\n Specify New command")))
(eval(list 'defun (como_read str) 'nil '(실행함수)'(princ)))
이런 방법도 있습니다.
(setq key_00 "coco")
(vla-sendcommand
(vla-get-ActiveDocument (vlax-get-Acad-Object))
(strcat "(defun c:" key_00 " nil (c:como))" "\n")
)
우선 말머리 수정했습니다.
그리고 두 분이 알려주신 방법 모두 잘 작동되네요 정말 감사합니다.
도도도님의 방법은 더 직관적이긴하나 불러올 때 명령창에 로그가 떠서 아임피러님의 방법을 수정해서 사용했습니다.
(defun como_key(s)
(read s)
)
(setq str_key_00(strcat "c:" key_00))
(if (/= str_key_00 nil) (eval(list 'defun (como_key str_key_00) 'nil '(c:como)'(princ))))
죄송한데 ..
저도 바라떼님께서 올려주신 리습으로 만들어 보고있는데 너무 초보다 보니... 위에 구문들을 어디에 접목시켜야 하는지 리습 초보다 보니 알수가 없어서 그런데.
어렵게 만드신 구문이신데 혹시나 알려주실수있으시면 부탁좀 드려봅니다.
수고하세요.
defun c:como 라는 함수가 있으면 como 라는 명령어로 실행하는건 아실거라 생각합니다.
이 때 como 외에 사용자가 설정한 추가적인 명령어로도 함수가 실행되도록 하려는 것입니다.
여기서는 key_00 이 단축키에 해당하는 변수인데 받아오는건 여기 나와있지 않습니다.
key_00에 getstring으로 직접 받을 수도 있고, 제 경우 DCL에서 받아오도록 했습니다.
@바라떼 감사합니다. 한번열심히 연구해보도록 하겠습니다.
역시 이것저것 해봐도 전혀 모르겠네요..
혹시 변수 받아오는 방법좀 알려주실수 있을까요..
(defun c:test(dist / input p)
(setq input (getstring "\n새로운 명령어를 입력")) ; 파일에서 읽어오던 dcl 에서 읽어오던 방법은 많습니다.
(if (/= input "")
(eval (read (strcat "(defun c:" input "()" "(dist))"))) ; 이방식이 도도도 님하고 아임피러님이 알려주시는 방법인듯
(dist)
)
(defun dist ( / a b)
(setq a (getpoint "\n 첫번째점 지정:"))
(setq b (getcorner a "\n 두번째점 지정:"))
(command "rectang" a b "")
)
)
아직 지식이 짧아서 이것밖에는 ...
아 최고위에 (defun c:test ( /input ) ;-----> 수정 하셔야 됩니다.
그런데 문제는 처음 리습을 로드할때 명령어가 먹혀야 하는데 그게 안먹힌다는 문제가 있네요
@닭발에소주 알려주셔서 감사합니다.
바라떼님이 올려주신 리습으로 테스트를 해보고 있는데
처음 리습 로드한 파일에서는 수정한 명령으로도 잘 실행돼는데
새로운 파일에서 로드하면 수정한 명령은 알수없는 명령이라고 나오네요.
바라떼 님이 알려주신 변수받아오는 방법이 있어야 하는듯한데
방법이나 자료를 찾아보곤있는데 워낙 초보다 보니 자료도 찾아보기가 힘드네요..ㅎㅎ
신경써 주셔서 감사합니다.
@심심할땐커피한잔 변수 읽는 루틴이 정상 적인 (defun c:으로 시작해서 (princ)) 로 끝나는 함수 밖에 있어야 합니다 그래야 리습 로딩시 자동 실행됩니다
영 이해 안되시면 견본 리습 하나 만들어 드릴께요
@아임피러 아 감사합니다 이해가 갔습니다.
@아임피러 바라떼님 과 닭발에소주 님이 만드신 리습으로
아임피러 님이 설명해주신 내용을 토대로 이것저것 넣어보고 수정해서 테스트를 해봤으나
첫번째로 리습을 로딩한 파일에서는 기존명령&변경한 명령 으로도 실행이 잘돼나 두번째파일에서는 변경한명령은 알수없는 명령이라고 나옵니다.
요 리습만드는 방법을 알아두면 또다른 리습만들때 유용하게 쓸수있을거 같으나 리습초보인 제가 만들기엔 역시 너무 어려운 리습인듯합니다.
실례가 안된다면 견본리습 하나 부탁드려도 될지요.
감사합니다. 좋은주말 보내세요~
@심심할땐커피한잔 https://blog.naver.com/khs12kim/222021848461
만약 안되시면 C드라이브coffee폴더에 text파일 만들어 놓고실행해보세요
@아임피러 만들어 주신 리습 너무 잘됩니다.
주말인데도 불구하고 시간내서 직접 만들어 주시다니..ㅠㅠ.
만들어 주신 리습 참고해서 잘만들어 보겠습니다.
감사합니다.