У меня возникла странная проблема с 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
Суб, который использует многозначный передается от основной модели с инструментом сценария.
Вот выход инструмента в
ли кто-нибудь имеет объяснение этого странного поведения? Что я делаю неправильно?