2014-11-22 125 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)