4 * License : The MIT License
5 * Copyright(c) 2013 MikuToga Partners
8 package jp.sfjp.mikutoga.pmd;
10 import java.util.regex.Pattern;
13 * シェーディング情報の各種ユーティリティ。
14 * <p>※ スフィアマップファイルの中身はBMP(DIB)形式。
15 * <p><a href="http://en.wikipedia.org/wiki/BMP_file_format">
16 * BMP file format </a>
18 public final class ShadingUtil {
20 /** スフィアマップファイル名(乗算)拡張子。 */
21 public static final String EXT_SPH = ".sph";
22 /** スフィアマップファイル名(加算)拡張子。 */
23 public static final String EXT_SPA = ".spa";
25 private static final String SEPARATOR = Pattern.quote("*");
26 private static final Pattern SPLITTER = Pattern.compile(SEPARATOR);
32 private ShadingUtil(){
34 throw new AssertionError();
39 * スフィアマップファイル名か否か判定する。
40 * <p>拡張子が「.sph」(乗算)もしくは「.spa」(加算)なら
43 * @return スフィアマップファイルならtrue
45 public static boolean isSpheremapFile(String fname) {
46 if(fname.endsWith(EXT_SPH)) return true;
47 if(fname.endsWith(EXT_SPA)) return true;
53 * テクスチャファイル名とスフィアマップファイル名を分離する。
54 * <p>2つのファイル名は単一の「*」で区切られ、
55 * 前部がテクスチャファイル名、後部がスフィアマップファイル名となる。
56 * 「*」がなく末尾が「.sph」か「.spa」なら
58 * 末尾がどちらでもなければテクスチャファイル名のみとなる。
59 * @param shadingFile シェーディング用ファイル情報
60 * @return [0]:テクスチャファイル名 [1]:スフィアマップファイル名。
63 public static String[] splitShadingFileInfo(String shadingFile) {
66 result = SPLITTER.split(shadingFile, 2);
67 assert result.length == 1 || result.length == 2;
69 if(result.length == 1){
70 String onlyFile = result[0];
71 if (isSpheremapFile(onlyFile)){
72 result = new String[]{ "", onlyFile };
74 result = new String[]{ onlyFile, "" };
78 assert result.length == 2;