단축키

knife명령의 스크립트인데 잘못된 부분의 수정을 부탁드립니다.

by 시부야 posted Feb 24, 2011 Replies 7
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄
Extra Form
저 같은 경우엔 k 로 되어있는 나이프를 둘로 나누어 k~k  는 보통 나이프 k~l은 루프 나이프로 나누어 사용하고 있었습니다.

헌데 r12오면서 스크립트 구문이 조금 바뀌어서 예전에 쓰던 스크립트가 먹질 않네요.
아주 예전에 유저그룹에 어느분께서 올려주신 내용을 받아서 수정해서 쓰고 있었는데요

CallCommand(1016030);
var tool = doc->GetActiveTool();
tool#MDATA_knife_MODE = 0 ;
tool#MDATA_knife_visibleonly = 1 ;

요게 r11.5까지 사용하던 knife 단축키용 스크립트구요
루프용은 모드 번호만 바꾸어 사용했었습니다.
이게 아예 작동을 안해서

R12에서 script log를 보고 조금 수정해서

CallCommand(1016030);
var tool = doc->GetActiveTool();
tool()#MDATA_KNIFE_MODE=0;
tool()#MDATA_KNIFE_VISIBLEONLY=TRUE;

이렇게 바꿔놨지만 여전히 나이프툴 선택만되고 모드의 숫자를 바꾸어도 모드 (루프등)의
변경은 되지 않습니다. 두번째 줄 구문도 r12버전오면서 바뀐거 같은데 시네마의 스크립트는 전혀몰라서;
작동할수 있도록 수정 부탁드립니다.

Who's 시부야

?
열심히하겠습니다~
  • ?
    환영그림 2011.02.24 13:12
    var tool = doc->GetActiveTool(); 을 주석처리하거나 삭제하면 동작하는군요

    CallCommand(1016030);
    //var tool = doc->GetActiveTool();
    tool()#MDATA_KNIFE_MODE=0;
    tool()#MDATA_KNIFE_VISIBLEONLY=1;

    11.5 버전때  작성하신거는 
    MDATA_KNIFE_MODE와 MDATA_KNIFE_VISIBLEONLY를 
    대문자로 바꿔주면 변함없이 잘 작동하네요

  • ?
    시부야 2011.02.24 13:39
    빠른 답변 감사합니다.  간단한 거였네요^^
  • ?
    아아가나 2011.02.24 13:43
    질문내용과 상관이없는 댓글이라 죄송한데, 혹시 실례가안된다면
    스크립트를 어디서부터 공부하면 될지 여쭤봐도 될까요? :-)
  • profile
    정석 2011.02.24 15:44
    요질문 동강으로 해보겠습니다. 내일 확인해보세요~ ㅋ
  • ?
    아아가나 2011.02.24 16:24
    제 질문인가요 시부야님 질문인가요?
    제 질문이면 좋겠는데..emoticon
  • ?
    엘라스틱마인드 2011.02.24 22:32
    GetActiveTool();
    현재 활성화된 툴을 가져오는 구문은 정상적인 동작을 위해서 꼭 필요한 구문입니다.

    CallCommand(1016030);
    var tool = doc->GetActiveTool();
    tool#MDATA_knife_MODE = 0 ;
    tool#MDATA_knife_visibleonly = 1 ;

    위의 경우를 보면

    일단 doc변수가 할당이 않되어 있습니다.

    var doc = GetActiveDocument();
    할당 않하셔도 되지만 변수가 바뀔지도 모르기 때문에
    이렇게 해주셔야지 어느 경우 에라도 정확한 동작이 보장됩니다.

    doc와 op는 아래와 깉이 미리 지정이 되어있습니다.
    할당할 필요가 없는거죠. 하지만 코딩은 모든상황을 고려해야 하기 때문에 귀찮더라도
    코드를 넣어서 명확히 해줄 필요가 있습니다.

    doc = 현재 열린 문서
    op = 현재 활성화된 오브젝트

    main(현재문서 변수,현재오브젝트 변수)
    {
    }
    이런식 으로도 강제 할당해서 쓸 수 있습니다.

    아무튼 위로 돌아가서

    CallCommand(1016030);
    var tool = doc->GetActiveTool();
    tool#MDATA_knife_MODE = 0 ;
    tool#MDATA_knife_visibleonly = 1 ;

    이 스크립트가 동작 하는 이유는 tool 이라는 변수에 현재 활성화된 툴을 집어 넣습니다.
    그래서 tool <--현재 활성화된 툴의 리스트가 들어있음
    그 리스트 들중에서

    MDATA_knife_MODE = 0 ;
    MDATA_knife_visibleonly = 1 ;
    이 둘의 값을 변경 한것입니다.


    CallCommand(1016030);
    var tool = doc->GetActiveTool();
    tool()#MDATA_KNIFE_MODE=0;
    tool()#MDATA_KNIFE_VISIBLEONLY=TRUE;

    R12에서 변경 하신 문구는

    var anyname = doc->GetActiveTool();
    anyname#MDATA_KNIFE_MODE=0;
    anyname#MDATA_KNIFE_VISIBLEONLY=TRUE;

    이렇게 하시던지

    CallCommand(1016030);
    tool()#MDATA_KNIFE_MODE=0;
    tool()#MDATA_KNIFE_VISIBLEONLY=TRUE;

    이렇게 하시는게 맞습니다.

    이유는 tool()  <--이 함수 자체가 이미 자주쓰는 기능이라 SDK자체에서 제공하는 활성화된 툴을 반환해주는 함수입니다.

    그러므로
    tool(); 와
    var anyname = doc->GetActiveTool(); 은 같다고 할수 있죠.

    다시 말하면
    tool() 의 출력값과 anyname 변수에 들어 있는 값과  같다는 말입니다.


    최종 정리 하자면
    var tool = doc->GetActiveTool();
    tool()#MDATA_KNIFE_MODE=0;
    tool()#MDATA_KNIFE_VISIBLEONLY=TRUE;

    이 코드가 잘못된 이유는
    tool<--변수에 현재 활성화된 툴을 넣었느데
    아래줄에서
    tool() 함수 인거 처럼 쓰셨기 때문입니다.
  • profile
    정석 2011.02.26 03:45
    http://oinon.net/blog/archives/964

Articles