2014-03-13 5 views
0

멜 스크립트 내부에서 파이썬 함수를 호출하는 방법을 찾는데 약간의 문제가 있습니다. 나는 여전히 멍청한 놈으로 기본적으로멜과 아이콘 쉘프 문제에서 파이썬을 호출하는 방법

, 나는 (스포트 라이트, areaLights 등)

몇 조명 도구 버튼이고, 하나는 마야와 그 안에 새로운 선반 를 생성하는 몇 멜 scipts이 스크립팅에서 지금까지 언급 한 것은 아니지만 은 파이썬으로 만 공부했습니다. 멜은 조금 알고 있습니다. 은 없습니다. 이것은 나를 위해 커다란 장애물이다. 스크립트를 너무 많이 편집하지 않으려 고 혼란을 줄이고 내 발생하는 모든 오류를 줄이려고합니다.

  1. 내 시작 코드에는 아이콘으로 .xpm과 .png를 사용하는 버튼이 있습니다. 마지막 몇 줄에서 ext는 처음에는 .xpm이며 나는 .png로 변경합니다. 이것은 여전히 ​​.xpm 아이콘이 필요하다는 것을 깨닫고 나쁘다고 여겨집니다. 그렇다면 MEL에는 OR 함수가 있습니까?

    global proc shelf_lighting() { 
    
        if (Dpublishmel("objGetMultiConfigs \"objkind\" \""+$show+"\" \"\" \"\" \"maya\" 1", $result)) { 
         string $kindRows[] = stringToStringArray($result[0], ";;"); 
         $objkinds = $kindRows; 
        } 
    
        string $aboutString = `about -v`; 
        string $aboutStringArr[] = stringToStringArray($aboutString, " "); 
    
        string $versionStringTemp = $aboutStringArr[0]; 
        string $versionString = match("[0-9]+[\.]*[0-9]+", $versionStringTemp); 
        float $version = $versionString; 
    
        string $pycmd = "evalDeferred \"python(\\\"^1s\\\")\""; 
    
        string $ext = ".png"; 
         if (int($version) > 2009) { 
          $ext = ".png"; 
         } 
    } 
    
  2. 내가 에서 명령을 변경하는 것을 시도하고있다 "소스 \"rexLightFuncs.mel \ ", \ nrexSpotLightCreate \"\ ";"`; 아래 코드와 같이을 입력하십시오. 그것은 파이썬 함수이고 내가 멜에 통합하려고

    import DLightBuild.DLightBuild as build 
    light=build.DLightBuild();light.createLight('spotLight'); 
    
    이 파이썬 명령의 파일 /에서 온다

    툴/유틸/마야/파이썬/DLightBuild의 평 파일을 포함 - DLightBuild하고, 웬일인지, 그것은 내가 나의 google 검색에서 어디인가에서 보았던보기에서 이것을 파생 시켰던 것에 따라 작용하지 않고있다.

    $spotLightButton = `shelfButton 
        -enableCommandRepeat 1 
        -enable 1 
        -width 34 
        -height 34 
        -manage 1 
        -visible 1 
        -label "Create a Spot Light" 
        -image1 "spotLight.png" 
        -style "iconOnly" 
        -command "import sys;sys.path.insert(0, \"/tools/utils/maya/python/DLightBuild/\");import DLightBuild.DLightBuild as build;reload(build);light=build.DLightBuild(); light.createLight('spotLight')" 
    -sourceType "python"; 
    
  3. 마지막으로, 나는 그것이 올바른 기능을 수행하는 경우 아이콘 이미지가 ... 바로이 있는지 여부 나는 shelfButton에 의해 그냥 실행하면보고, 내 코드의 테스트 실행을하려고 할 때마다 (멜에서는 그런데) 코드의 두 번째 부분에서 볼 수 있듯이, 기존의 선반이나 새로운 선반 대신 scriptEditor의 끝 부분에 단추를 만듭니다 (아래의 다른 도킹 창과 같습니다). 이것에 대한 조언?

제기 된 질문에 대한 조언을 주시면 감사하겠습니다. 많은 사전에 감사합니다

답변

0

멜은 논리 연산자 또는 연산자 ||를 가지고 있지만 숫자에 대한 논리 OR 테스트 만하고 1 또는 0 만 반환하므로 너무 도움이되지 않습니다.

int $is_valid = gmatch($filename, "*.png") || gmatch($filename, "*.xbm"); 

같은 IMG 또는 PNG 확장자를 확인하려면이 될 것을 당신은 항상 이런 식으로 파이썬에서 멜을 포장 할 수 있습니다

import maya.mel as mel 
mel.eval("your mel command here as a string"); 

는 멜에서 파이썬을 호출하는 당신이

python ("python goes here as a string"); 
을 수행 할 수 있습니다

파이썬과 멜을 혼합하는 것은 항상 성가신 일입니다. 글 머리 기호를 물어보고 낡은 멜 스크립트를 파이썬으로 변환하여 영원히 살 필요는 없습니다. 몇 가지 작업을 완료하면 변환이 매우 간단 해졌으며 Python 버전은 99 %의 경우에서 더 간단하고 깨끗합니다.

예를 들어 현재 명령을 "python()"으로 래핑 할 수 있습니다. 정확한 탈출을 해결하는 것은 성가심입니다.

+0

현재 전체적으로 멜 코드를 실행할 때 구문 오류가 계속 발생합니다. '오류 : 줄 852.140 : 구문 오류 //'가 표시되며 나에게 잘못 된 부분을 찾아 낼 수 없습니다. ';'을 제거하거나 추가하면 선언되지 않은 변수로 다음 라인을 간주합니다. 일반적으로이 두 라인 사이의 어딘가에서 발생합니다 : '-command "python (\"import DLightBuild.DLightBuild as build; light = build.DLightBuild (); light.createLight ('spotLight') \ ")";'and'$ sunLightBtn = shelfButton' – dissidia

+0

문자열에 반환 값이 있습니까? – theodox

+0

구문 오류는'기호가 없기 때문에 발생합니다. 문제 해결됨 – dissidia