• Daum
  • |
  • 카페
  • |
  • 테이블
  • |
  • 메일
  • |
  • 카페앱 설치
 
카페정보
아키모아(Archimore)
 
 
 
카페 게시글
검색이 허용된 게시물입니다.
★ CAD/LISP/분과 Q&A [Lisp] vlax-add-cmd 에러 관련 질문
바라떼 추천 0 조회 301 20.07.01 08:13 댓글 27
게시글 본문내용
 
다음검색
첨부된 파일
댓글
  • 20.07.01 17:51

    첫댓글 아 잘못봤습니다 죄송합니다.

  • 20.07.02 07:15

    흐미 어렵네요 검색해서 나오는 모든 방법을 동원 해봤으나 결과는 같네요
    머리 하나보단 머리두개가 나을테니 방법을 찾아 낼 겁니다 ^^;;

  • 작성자 20.07.02 08:07

    도움 주셔서 감사합니다. 혹시 단축키 추가나 수정하는 방법 중에 다른 방법은 없을까요?
    심낙천님의 COPIKA 리습에서는 오류가 없는걸로봐서 다른 방법으로 하는건지.. 어떤건지 모르겠네요 ㅎㅎ

  • 20.07.02 22:43

    @바라떼 해외사이트에서도 갑론을박하는거 보니 vlax-add-cmd 함수는 불안한 함수 같네요
    (eval (list 'defun 'LM:acapp 'nil (vlax-get-acad-object))) <= 유명한 리맥씨 리습 구문 이게 도도도님이 말씀하신 eval을 사용한 스트링을 변수명으로 넣을수 있는 방법입니다 'LM:acapp 대신 해서
    'C:입력값 으로 대체하시면 될듯 합니다 etc. (eval (list 'defun 'c:입력값 'nil '(실행할 함수)))

  • 20.07.02 10:27

    단축키 리스트를 텍스트 파일로 만들고 불러와서 변수에 적용하고 변경시에는 단축키 리스트 파일을 업데이트하는 방법은 가능하겠죠?

  • 작성자 20.07.02 10:38

    심낙천님의 COPIKA가 그런 형태로 사용하고 있습니다만.. 단축키를 변수로 설정하는 방법을 모르겠습니다.
    저도 현재 따로 저장해놓은 상태이나 단축키로 불러오는 방법을 모르겠네요..
    defun c: 뒤에 string이 아닌 변수 형태로 넣는 방법을 모르겠습니다. ㅠ.ㅠ

  • 20.07.02 16:04

    @바라떼 eval 함수를 사용해보세요

  • 20.07.02 22:53

    @도도도

  • 작성자 20.07.03 08:48

    @도도도 와... 감사합니다. 분명히 변수명으로 읽어오는 구문이 있을거라 생각했는데 eval이었네요!

  • 작성자 20.07.03 09:19

    구글링도 해보고 이것저것 시도해봤는데 안되네요..
    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 명령어가 추가됩니다. ㅠㅠ

  • 20.07.03 10:22

    그러고 보니 말머리가 빠졌네용 말머리좀 붙혀주세요

    (defun como_read(s)
    (read s)
    )
    (setq str(strcat "c:"(getstring "\n Specify New command")))
    (eval(list 'defun (como_read str) 'nil '(실행함수)'(princ)))

  • 20.07.03 10:42


    이런 방법도 있습니다.

    (setq key_00 "coco")
    (vla-sendcommand
    (vla-get-ActiveDocument (vlax-get-Acad-Object))
    (strcat "(defun c:" key_00 " nil (c:como))" "\n")
    )

  • 작성자 20.07.03 12:55

    우선 말머리 수정했습니다.
    그리고 두 분이 알려주신 방법 모두 잘 작동되네요 정말 감사합니다.
    도도도님의 방법은 더 직관적이긴하나 불러올 때 명령창에 로그가 떠서 아임피러님의 방법을 수정해서 사용했습니다.

  • 작성자 20.07.03 13:17

    (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))))

  • 20.07.03 13:49

    죄송한데 ..
    저도 바라떼님께서 올려주신 리습으로 만들어 보고있는데 너무 초보다 보니... 위에 구문들을 어디에 접목시켜야 하는지 리습 초보다 보니 알수가 없어서 그런데.
    어렵게 만드신 구문이신데 혹시나 알려주실수있으시면 부탁좀 드려봅니다.
    수고하세요.

  • 작성자 20.07.03 15:09

    defun c:como 라는 함수가 있으면 como 라는 명령어로 실행하는건 아실거라 생각합니다.
    이 때 como 외에 사용자가 설정한 추가적인 명령어로도 함수가 실행되도록 하려는 것입니다.
    여기서는 key_00 이 단축키에 해당하는 변수인데 받아오는건 여기 나와있지 않습니다.
    key_00에 getstring으로 직접 받을 수도 있고, 제 경우 DCL에서 받아오도록 했습니다.

  • 20.07.03 15:40

    @바라떼 감사합니다. 한번열심히 연구해보도록 하겠습니다.

  • 20.07.04 00:27

    역시 이것저것 해봐도 전혀 모르겠네요..
    혹시 변수 받아오는 방법좀 알려주실수 있을까요..

  • 20.07.05 09:20

    (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 "")
    )
    )

    아직 지식이 짧아서 이것밖에는 ...

  • 20.07.05 09:32

    아 최고위에 (defun c:test ( /input ) ;-----> 수정 하셔야 됩니다.

  • 20.07.05 09:39

    그런데 문제는 처음 리습을 로드할때 명령어가 먹혀야 하는데 그게 안먹힌다는 문제가 있네요

  • 20.07.05 13:39

    @닭발에소주 알려주셔서 감사합니다.
    바라떼님이 올려주신 리습으로 테스트를 해보고 있는데
    처음 리습 로드한 파일에서는 수정한 명령으로도 잘 실행돼는데
    새로운 파일에서 로드하면 수정한 명령은 알수없는 명령이라고 나오네요.
    바라떼 님이 알려주신 변수받아오는 방법이 있어야 하는듯한데
    방법이나 자료를 찾아보곤있는데 워낙 초보다 보니 자료도 찾아보기가 힘드네요..ㅎㅎ
    신경써 주셔서 감사합니다.

  • 20.07.05 16:59

    @심심할땐커피한잔 변수 읽는 루틴이 정상 적인 (defun c:으로 시작해서 (princ)) 로 끝나는 함수 밖에 있어야 합니다 그래야 리습 로딩시 자동 실행됩니다
    영 이해 안되시면 견본 리습 하나 만들어 드릴께요

  • 20.07.05 17:04

    @아임피러 아 감사합니다 이해가 갔습니다.

  • 20.07.05 20:14

    @아임피러 바라떼님 과 닭발에소주 님이 만드신 리습으로
    아임피러 님이 설명해주신 내용을 토대로 이것저것 넣어보고 수정해서 테스트를 해봤으나
    첫번째로 리습을 로딩한 파일에서는 기존명령&변경한 명령 으로도 실행이 잘돼나 두번째파일에서는 변경한명령은 알수없는 명령이라고 나옵니다.
    요 리습만드는 방법을 알아두면 또다른 리습만들때 유용하게 쓸수있을거 같으나 리습초보인 제가 만들기엔 역시 너무 어려운 리습인듯합니다.
    실례가 안된다면 견본리습 하나 부탁드려도 될지요.
    감사합니다. 좋은주말 보내세요~

  • 20.07.05 20:36

    @심심할땐커피한잔 https://blog.naver.com/khs12kim/222021848461
    만약 안되시면 C드라이브coffee폴더에 text파일 만들어 놓고실행해보세요

  • 20.07.05 21:20

    @아임피러 만들어 주신 리습 너무 잘됩니다.
    주말인데도 불구하고 시간내서 직접 만들어 주시다니..ㅠㅠ.
    만들어 주신 리습 참고해서 잘만들어 보겠습니다.
    감사합니다.

최신목록