You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
2.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package xyz.wbsite.jmacro.base;
import cn.hutool.cache.Cache;
import cn.hutool.cache.CacheUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ReUtil;
import xyz.wbsite.jmacro.util.Logger;
import java.io.File;
import java.util.List;
/**
* 图例
* <p>
* 图例分带坐标和不带坐标图例
* <p>
* 其中带坐标图例,通过将坐标融合进文件名称实现,定义如下
* 以something#L0,0.png为例
* 图例名称something
* 图例坐标:#L0,0在实例化时转为location
*
* @author wangbing
* @version 0.0.1
* @since 1.8
*/
public class Legend {
/**
* 默认图例目录
*/
private static File defaultBase = new File("legend");
/**
* 图例缓存
*/
public static Cache<String, Legend> fileCache = CacheUtil.newLFUCache(999);
/**
* 图例目录
*/
private File base;
/**
* 图例文件
*/
private File file;
/**
* 图例名称
*/
private String name;
/**
* 图例坐标
*/
private ViewPoint location;
public static void setDefaultBase(File base) {
defaultBase = base;
}
public static File getDefaultBase() {
return defaultBase;
}
private Legend() {
}
/**
* 获取图例
*
* @param name 图例名称
* @return 图例
*/
public static Legend inflate(String name) {
Legend legend = fileCache.get(name);
if (legend != null) {
return legend;
}
List<File> files = FileUtil.loopFiles(defaultBase, pathname -> pathname.getName().startsWith(name));
if (files.size() == 0) {
Logger.error(defaultBase.getAbsolutePath() + " not found the legend of " + name);
throw new RuntimeException(defaultBase.getAbsolutePath() + " not found the legend of " + name);
}
File file = files.get(0);
Legend newLegend = new Legend();
newLegend.base = defaultBase;
newLegend.file = file;
newLegend.name = name;
if (!file.getName().matches("[\\S\\s]+#L[0-9]+,[0-9]+\\.png")) {
newLegend.location = null;
} else {
int x = Convert.toInt(ReUtil.get("[\\S\\s]+#L([0-9]+),[0-9]+\\.png", file.getName(), 1), 0);
int y = Convert.toInt(ReUtil.get("[\\S\\s]+#L[0-9]+,([0-9]+)\\.png", file.getName(), 1), 0);
newLegend.location = new ViewPoint(x, y);
}
fileCache.put(name, newLegend);
return newLegend;
}
public File getBase() {
return base;
}
public File getFile() {
return file;
}
public String getName() {
return name;
}
public ViewPoint getLocation() {
return location;
}
}

Powered by TurnKey Linux.