2014-03-13 53 views
0

我在尋找方法在mel腳本中調用python 函數時遇到了一些麻煩。如何在Mel中調用Python以及圖標擱置問題

基本上,我有其中一個在Maya和裏面創建一個新的貨架 幾個梅爾scipts,有幾個照明工具按鈕(聚光燈, areaLights等)

正如我還是一個菜鳥在腳本,更不用說到目前爲止我 只有在python學習,至於梅爾我知道一點 沒有。這對我來說是一個很大的障礙。我試圖不要編輯 任何腳本太多,以減少我的錯誤和任何 錯誤。

  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 \」 \ 「;」`;到下面的代碼中顯示的那個。 這是一個Python函數,我試圖將其納入梅爾

    import DLightBuild.DLightBuild as build 
    light=build.DLightBuild();light.createLight('spotLight'); 
    

    這條巨蟒的命令的文件來自/工具/ utils的/瑪雅/蟒蛇/ DLightBuild,包含.py文件 - DLightBuild,和由於某種原因,它不起作用,因爲我從我在谷歌搜索中某處看到的一個例子中得出了這個結論。

    $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僅運行如代碼的第二部分所示(順便說一句,在Mel中),它會在我的scriptEditor(它就像下面的另一個對接窗口)的末尾創建一個按鈕,而不是在我現有的書架或新書架中。對此有何建議?

欣賞所提出的任何問題的建議。提前非常感謝

回答

0

梅爾確實有一個邏輯或運算符||,但它只對數字進行邏輯或測試,並且只返回1或0,所以它不是太有用;要檢查IMG或png擴展它會是這樣的

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

你可以隨時換梅爾在Python這樣的:

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

調用從梅爾蟒蛇,你可以做

python ("python goes here as a string"); 

像這樣混合python和mel總是令人討厭,你可能想考慮咬住子彈並將舊的Mel腳本轉換爲python,這樣你就不必一直生活在這裏。一旦你完成了一些轉換非常簡單,python版本在99%的情況下更簡單,更清晰。

所以在你的例子中你可以用「python()」包裝你當前的命令;制定正確的轉義是一個煩惱。

+0

目前,當我運行我的Mel代碼作爲一個整體時,我不斷收到語法錯誤'錯誤:行852.140:語法錯誤//',我無法弄清楚我哪裏出錯了。如果我刪除或添加一個';',它會認爲我的下一行是一個未聲明的變量 它通常發生在這兩行之間: '-command「python(\」import DLightBuild.DLightBuild as build; light = build.DLightBuild ); light.createLight('spotLight')\「)」;'和'$ sunLightBtn = shelfButton' – dissidia

+0

字符串中是否有返回值? – theodox

+0

證明語法錯誤是由於'符號丟失引起的。問題解決了 – dissidia

相關問題