1 local pluginKey = "bts/metrics"
3 local sprite = app.sprite
5 local name = app.fs.fileTitle(sprite.filename)
7 local previousExportFilename = sprite.properties(pluginKey).previousExportFilename
9 if previousExportFilename == nil then
10 local defaultPath = app.fs.filePath(sprite.filename)
11 local defaultFilename = name..".lua"
12 previousExportFilename = app.fs.joinPath(defaultPath, defaultFilename)
16 dlg:file{ id="metrics_filename", label="Metrics output:", filename=previousExportFilename, filetypes=".lua", save=true }
17 dlg:button{ id="confirm", text="Confirm" }
18 dlg:button{ id="cancel", text="Cancel" }
23 name = app.fs.fileTitle(data.metrics_filename)
25 local basePath = app.fs.filePath(data.metrics_filename)
26 local imagePath = app.fs.joinPath(basePath, name)
28 local layerLookup = {}
29 local originalLayerVisible = {}
31 for i, layer in ipairs(sprite.layers) do
32 if layer.parent == layer.sprite then
33 originalLayerVisible[layer.name] = layer.isVisible
34 layer.isVisible = false
36 layerLookup[layer.name] = layer
40 local imageDetails = {}
42 for i, slice in ipairs(sprite.slices) do
45 if layerLookup[id] then
46 local layer = layerLookup[id]
47 local filename = app.fs.joinPath(imagePath, id..".png")
49 layer.isVisible = true
50 app.command.SaveFileCopyAs{ ui=false, filename=filename, slice=id }
51 layer.isVisible = false
53 table.insert(imageDetails, id)
57 local metricsDetails = {}
59 for i, slice in ipairs(sprite.slices) do
61 local sliceMetrics = {}
63 sliceMetrics["origin"] = { slice.bounds.x, slice.bounds.y}
64 sliceMetrics["size"] = { slice.bounds.width, slice.bounds.height}
65 sliceMetrics["center"] = { (slice.bounds.x + slice.bounds.width / 2), (slice.bounds.y + slice.bounds.height / 2)}
67 metricsDetails[id] = sliceMetrics
71 local metricsFilename = app.fs.joinPath(metricsPath, name..".ui.metrics.json")
72 local metricsFile = io.open(metricsFilename, "w")
73 local metricsJson = json.encode(metricsDetails)
74 metricsFile:write(metricsJson)
79 --local metricsFilename = app.fs.joinPath(metricsPath, data.metrics_filename)
80 local metricsFile = io.open(data.metrics_filename, "w")
82 metricsFile:write(name.."ImagesTable = {\n")
83 for k,v in ipairs(imageDetails) do
84 metricsFile:write("\t\"" .. v .. "\",\n")
86 metricsFile:write("}\n")
87 metricsFile:write("\n")
89 metricsFile:write(name.."MetricsTable = {\n")
90 for k,v in pairs(metricsDetails) do
91 metricsFile:write("\n")
92 metricsFile:write("\t[\"" .. k .. ".origin\"] = { x=" .. v["origin"][1] .. ", y=" .. v["origin"][2] .. " },\n")
93 metricsFile:write("\t[\"" .. k .. ".size\"] = { w=" .. v["size"][1] .. ", h=" .. v["size"][2] .. " },\n")
94 metricsFile:write("\t[\"" .. k .. ".center\"] = { x=" .. v["center"][1] .. ", y=" .. v["center"][2] .. " },\n")
96 metricsFile:write("\n")
97 metricsFile:write("}\n")
98 metricsFile:write("\n")
99 metricsFile:write("registerMetrics(\""..name.."\", "..name.."ImagesTable, "..name.."MetricsTable)\n")
101 io.close(metricsFile)
104 for k, v in pairs(originalLayerVisible) do
105 local layer = layerLookup[k]
109 sprite.properties(pluginKey).previousExportFilename = data.metrics_filename