local pluginKey = "bts/metrics" local sprite = app.sprite local name = app.fs.fileTitle(sprite.filename) local previousExportFilename = sprite.properties(pluginKey).previousExportFilename if previousExportFilename == nil then local defaultPath = app.fs.filePath(sprite.filename) local defaultFilename = name..".lua" previousExportFilename = app.fs.joinPath(defaultPath, defaultFilename) end local dlg = Dialog() dlg:file{ id="metrics_filename", label="Metrics output:", filename=previousExportFilename, filetypes=".lua", save=true } dlg:button{ id="confirm", text="Confirm" } dlg:button{ id="cancel", text="Cancel" } dlg:show() local data = dlg.data if data.confirm then name = app.fs.fileTitle(data.metrics_filename) local basePath = app.fs.filePath(data.metrics_filename) local imagePath = app.fs.joinPath(basePath, name) local layerLookup = {} local originalLayerVisible = {} for i, layer in ipairs(sprite.layers) do if layer.parent == layer.sprite then originalLayerVisible[layer.name] = layer.isVisible layer.isVisible = false layerLookup[layer.name] = layer end end local imageDetails = {} for i, slice in ipairs(sprite.slices) do local id = slice.name if layerLookup[id] then local layer = layerLookup[id] local filename = app.fs.joinPath(imagePath, id..".png") layer.isVisible = true app.command.SaveFileCopyAs{ ui=false, filename=filename, slice=id } layer.isVisible = false table.insert(imageDetails, id) end end local metricsDetails = {} for i, slice in ipairs(sprite.slices) do local id = slice.name local sliceMetrics = {} sliceMetrics["origin"] = { slice.bounds.x, slice.bounds.y} sliceMetrics["size"] = { slice.bounds.width, slice.bounds.height} sliceMetrics["center"] = { (slice.bounds.x + slice.bounds.width / 2), (slice.bounds.y + slice.bounds.height / 2)} metricsDetails[id] = sliceMetrics end --[[if false then local metricsFilename = app.fs.joinPath(metricsPath, name..".ui.metrics.json") local metricsFile = io.open(metricsFilename, "w") local metricsJson = json.encode(metricsDetails) metricsFile:write(metricsJson) io.close(metricsFile) end]] if true then --local metricsFilename = app.fs.joinPath(metricsPath, data.metrics_filename) local metricsFile = io.open(data.metrics_filename, "w") metricsFile:write(name.."ImagesTable = {\n") for k,v in ipairs(imageDetails) do metricsFile:write("\t\"" .. v .. "\",\n") end metricsFile:write("}\n") metricsFile:write("\n") metricsFile:write(name.."MetricsTable = {\n") for k,v in pairs(metricsDetails) do metricsFile:write("\n") metricsFile:write("\t[\"" .. k .. ".origin\"] = { x=" .. v["origin"][1] .. ", y=" .. v["origin"][2] .. " },\n") metricsFile:write("\t[\"" .. k .. ".size\"] = { w=" .. v["size"][1] .. ", h=" .. v["size"][2] .. " },\n") metricsFile:write("\t[\"" .. k .. ".center\"] = { x=" .. v["center"][1] .. ", y=" .. v["center"][2] .. " },\n") end metricsFile:write("\n") metricsFile:write("}\n") metricsFile:write("\n") metricsFile:write("registerMetrics(\""..name.."\", "..name.."ImagesTable, "..name.."MetricsTable)\n") io.close(metricsFile) end for k, v in pairs(originalLayerVisible) do local layer = layerLookup[k] layer.isVisible = v end sprite.properties(pluginKey).previousExportFilename = data.metrics_filename end