2014-11-22 2 views
0

У меня возникла странная проблема с Iterate Multivalue в Model Builder. Модель частично основана на примере Generating a multivalue choice list.Iterate Multivalue string

Что я пытаюсь сделать, это показать список фильтрованных слоев, где пользователь сможет выбрать некоторые из них. Для этого я использую Script Tool с 1 входным многозначным строковым параметром и 1 производным значением многозначного значения любого значения.
Затем выбранные имена слоев (многозначная переменная) используются в Iterate Multivalue, где каждое итерированное значение используется в Calculate Value. Слои фильтруются в ToolValidator.

Проблема в том, что Iterate Multivalue не выполняет итерацию значений. Вместо этого он запускает только один цикл и передает одно значение, которое представляет собой строку со всеми выбранными именами слоев, разделенными точкой с запятой.

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) 
Смежные вопросы