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