2014-11-22 104 views
0

我在模型構建器中使用迭代多值的奇怪問題。 該模型部分基於Generating a multivalue choice list示例。迭代多值字符串

我想要做的是顯示過濾圖層列表,其中用戶將能夠選擇其中的一些。爲此,我使用帶有1個輸入多值字符串參數的腳本工具和1個派生多值任意值參數。
然後在迭代多值中使用選定圖層名稱(多值變量),其中每個迭代值用於計算值。在ToolValidator中過濾圖層。

現在,問題在於迭代多值不迭代值。相反,它只運行一個循環,並傳遞一個值,它是一個字符串,所有選定的圖層名稱以分號分隔。使用多值從腳本工具主模型通過

ToolValidator的UpdateParameters代碼

if not self.params[0].altered: 
    mxd = arcpy.mapping.MapDocument("CURRENT") 
    dataframe = arcpy.mapping.ListDataFrames(mxd)[0] 
    layers = set() 
    for lyr in arcpy.mapping.ListLayers(mxd, "", dataframe): 
    if lyr.visible == True: 
     desc = arcpy.Describe(lyr.name) 
     if desc.dataType == "RasterLayer": 
     layers.add(desc.name) 
    self.params[0].filter.list = sorted(layers) 
    self.params[0].values = sorted(layers) 
    return 

子模型。 enter image description here

下面是工具的輸出 enter image description here

沒有人有這種奇怪的行爲的解釋?我做錯了什麼?

回答

0

我終於明白了。 必須在腳本工具中將派生的輸出參數的屬性「從...獲得」設置爲輸入參數。

腳本工具的參數:

  1. 顯示名稱:輸入柵格數據,數據類型:字符串,類型:必需,多值:是

  2. 顯示名稱:輸出柵格,數據類型:任何值,類型:派生,多值:是的,從獲得:Input_Rasters

腳本工具的腳本代碼:

import arcpy 
input_rasters = arcpy.GetParameterAsText(0) 
arcpy.SetParameter(1, input_rasters)