OSDN Git Service

1.105.3-SNAPSHOT版開発開始
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / pmd / Material.java
index c88161f..17b1f48 100644 (file)
-/*\r
- * material information\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2010 MikuToga Partners\r
- */\r
-\r
-package jp.sourceforge.mikutoga.pmd;\r
-\r
-import java.awt.Color;\r
-import java.awt.Transparency;\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import jp.sourceforge.mikutoga.corelib.I18nText;\r
-\r
-/**\r
- * マテリアル素材情報。\r
- */\r
-public class Material implements Iterable<Surface> {\r
-\r
-    private final I18nText materialName = new I18nText();\r
-\r
-    private Color diffuseColor;\r
-\r
-    private Color specularColor;\r
-    private float shininess;\r
-\r
-    private Color ambientColor;\r
-\r
-    private final ShadeInfo shadeInfo = new ShadeInfo();\r
-\r
-    private boolean edgeAppearance = true;\r
-\r
-    private final List<Surface> surfaceList = new ArrayList<Surface>();\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     */\r
-    public Material(){\r
-        super();\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * 色を不透明化する。\r
-     * @param color 色\r
-     * @return 不透明化した色。引数と同じ場合もありうる。\r
-     */\r
-    private static Color forceOpaque(Color color){\r
-        if(color.getTransparency() == Transparency.OPAQUE){\r
-            return color;\r
-        }\r
-\r
-        float[] rgba = new float[4];\r
-        color.getRGBColorComponents(rgba);\r
-\r
-        Color result = new Color(rgba[0], rgba[1], rgba[2], 1.0f);\r
-\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * マテリアル名を返す。\r
-     * PMDEditorのみでのサポート?\r
-     * @return マテリアル名\r
-     */\r
-    public I18nText getMaterialName(){\r
-        return this.materialName;\r
-    }\r
-\r
-    /**\r
-     * 拡散光を設定する。\r
-     * アルファ成分も反映される。\r
-     * @param color 拡散光\r
-     * @throws NullPointerException 引数がnull\r
-     */\r
-    public void setDiffuseColor(Color color) throws NullPointerException{\r
-        if(color == null) throw new NullPointerException();\r
-        this.diffuseColor = color;\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * 拡散光を返す。\r
-     * @return 拡散光\r
-     */\r
-    public Color getDiffuseColor(){\r
-        return this.diffuseColor;\r
-    }\r
-\r
-    /**\r
-     * 反射光を設定する。\r
-     * 透過成分があれば不透明化される。\r
-     * @param color 反射光\r
-     * @throws NullPointerException 引数がnull\r
-     */\r
-    public void setSpecularColor(Color color)\r
-            throws NullPointerException{\r
-        if(color == null) throw new NullPointerException();\r
-        this.specularColor = forceOpaque(color);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * 反射光を返す。\r
-     * @return 反射光\r
-     */\r
-    public Color getSpecularColor(){\r
-        return this.specularColor;\r
-    }\r
-\r
-    /**\r
-     * 環境光を設定する。\r
-     * 透過成分があれば不透明化される。\r
-     * @param color 環境光\r
-     * @throws NullPointerException 引数がnull\r
-     */\r
-    public void setAmbientColor(Color color)\r
-            throws NullPointerException{\r
-        if(color == null) throw new NullPointerException();\r
-        this.ambientColor = forceOpaque(color);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * 環境光を返す。\r
-     * @return 環境光\r
-     */\r
-    public Color getAmbientColor(){\r
-        return this.ambientColor;\r
-    }\r
-\r
-    /**\r
-     * 光沢強度を設定する。\r
-     * MMDで用いられるのは1.0〜15.0あたり。\r
-     * @param shininess 光沢強度\r
-     */\r
-    public void setShininess(float shininess){\r
-        this.shininess = shininess;\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * 光沢強度を返す。\r
-     * @return 光沢強度\r
-     */\r
-    public float getShininess(){\r
-        return this.shininess;\r
-    }\r
-\r
-    /**\r
-     * シェーディング設定を返す。\r
-     * @return シェーディング設定\r
-     */\r
-    public ShadeInfo getShadeInfo(){\r
-        return this.shadeInfo;\r
-    }\r
-\r
-    /**\r
-     * エッジを表示するか設定する。\r
-     * 頂点単位の設定より優先度は低い。\r
-     * @param show 表示するならtrue\r
-     */\r
-    public void setEdgeAppearance(boolean show){\r
-        this.edgeAppearance = show;\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * エッジを表示するか判定する。\r
-     * 頂点単位の設定より優先度は低い。\r
-     * @return 表示するならtrue\r
-     */\r
-    public boolean getEdgeAppearance(){\r
-        return this.edgeAppearance;\r
-    }\r
-\r
-    /**\r
-     * 面リストを返す。\r
-     * @return 面リスト\r
-     */\r
-    public List<Surface> getSurfaceList(){\r
-        return this.surfaceList;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @return {@inheritDoc}\r
-     */\r
-    public Iterator<Surface> iterator(){\r
-        return this.surfaceList.iterator();\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @return {@inheritDoc}\r
-     */\r
-    @Override\r
-    public String toString(){\r
-        StringBuilder result = new StringBuilder();\r
-\r
-        result.append("Material ");\r
-\r
-        float[] rgba = new float[4];\r
-\r
-        this.diffuseColor.getRGBComponents(rgba);\r
-        result.append("diffuse=[")\r
-              .append(rgba[0]).append(", ")\r
-              .append(rgba[1]).append(", ")\r
-              .append(rgba[2]).append(", ")\r
-              .append(rgba[3]).append(']')\r
-              .append(' ');\r
-\r
-        this.specularColor.getRGBComponents(rgba);\r
-        result.append("specular=[")\r
-              .append(rgba[0]).append(", ")\r
-              .append(rgba[1]).append(", ")\r
-              .append(rgba[2]).append(", ")\r
-              .append(rgba[3]).append(']')\r
-              .append(' ');\r
-\r
-        this.ambientColor.getRGBComponents(rgba);\r
-        result.append("ambient=[")\r
-              .append(rgba[0]).append(", ")\r
-              .append(rgba[1]).append(", ")\r
-              .append(rgba[2]).append(", ")\r
-              .append(rgba[3]).append(']')\r
-              .append(' ');\r
-\r
-        result.append("shininess=")\r
-              .append(this.shininess)\r
-              .append(' ');\r
-        result.append("edge=")\r
-              .append(this.edgeAppearance)\r
-              .append(' ');\r
-        result.append("surfaces=")\r
-              .append(this.surfaceList.size())\r
-              .append(' ');\r
-        result.append(this.shadeInfo);\r
-\r
-        return result.toString();\r
-    }\r
-\r
-}\r
+/*
+ * material information
+ *
+ * License : The MIT License
+ * Copyright(c) 2010 MikuToga Partners
+ */
+
+package jp.sourceforge.mikutoga.pmd;
+
+import java.awt.Color;
+import java.awt.Transparency;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import jp.sourceforge.mikutoga.corelib.I18nText;
+
+/**
+ * マテリアル素材情報。
+ */
+public class Material implements Iterable<Surface> {
+
+    private final I18nText materialName = new I18nText();
+
+    private Color diffuseColor;
+
+    private Color specularColor;
+    private float shininess;
+
+    private Color ambientColor;
+
+    private final ShadeInfo shadeInfo = new ShadeInfo();
+
+    private boolean edgeAppearance = true;
+
+    private final List<Surface> surfaceList = new ArrayList<Surface>();
+
+    /**
+     * コンストラクタ。
+     */
+    public Material(){
+        super();
+        return;
+    }
+
+    /**
+     * 色を不透明化する。
+     * @param color 色
+     * @return 不透明化した色。引数と同じ場合もありうる。
+     */
+    private static Color forceOpaque(Color color){
+        if(color.getTransparency() == Transparency.OPAQUE){
+            return color;
+        }
+
+        float[] rgba = new float[4];
+        color.getRGBColorComponents(rgba);
+
+        Color result = new Color(rgba[0], rgba[1], rgba[2], 1.0f);
+
+        return result;
+    }
+
+    /**
+     * マテリアル名を返す。
+     * PMDEditorのみでのサポート?
+     * @return マテリアル名
+     */
+    public I18nText getMaterialName(){
+        return this.materialName;
+    }
+
+    /**
+     * 拡散光を設定する。
+     * アルファ成分も反映される。
+     * @param color 拡散光
+     * @throws NullPointerException 引数がnull
+     */
+    public void setDiffuseColor(Color color) throws NullPointerException{
+        if(color == null) throw new NullPointerException();
+        this.diffuseColor = color;
+        return;
+    }
+
+    /**
+     * 拡散光を返す。
+     * @return 拡散光
+     */
+    public Color getDiffuseColor(){
+        return this.diffuseColor;
+    }
+
+    /**
+     * 反射光を設定する。
+     * 透過成分があれば不透明化される。
+     * @param color 反射光
+     * @throws NullPointerException 引数がnull
+     */
+    public void setSpecularColor(Color color)
+            throws NullPointerException{
+        if(color == null) throw new NullPointerException();
+        this.specularColor = forceOpaque(color);
+        return;
+    }
+
+    /**
+     * 反射光を返す。
+     * @return 反射光
+     */
+    public Color getSpecularColor(){
+        return this.specularColor;
+    }
+
+    /**
+     * 環境光を設定する。
+     * 透過成分があれば不透明化される。
+     * @param color 環境光
+     * @throws NullPointerException 引数がnull
+     */
+    public void setAmbientColor(Color color)
+            throws NullPointerException{
+        if(color == null) throw new NullPointerException();
+        this.ambientColor = forceOpaque(color);
+        return;
+    }
+
+    /**
+     * 環境光を返す。
+     * @return 環境光
+     */
+    public Color getAmbientColor(){
+        return this.ambientColor;
+    }
+
+    /**
+     * 光沢強度を設定する。
+     * MMDで用いられるのは1.0〜15.0あたり。
+     * @param shininess 光沢強度
+     */
+    public void setShininess(float shininess){
+        this.shininess = shininess;
+        return;
+    }
+
+    /**
+     * 光沢強度を返す。
+     * @return 光沢強度
+     */
+    public float getShininess(){
+        return this.shininess;
+    }
+
+    /**
+     * シェーディング設定を返す。
+     * @return シェーディング設定
+     */
+    public ShadeInfo getShadeInfo(){
+        return this.shadeInfo;
+    }
+
+    /**
+     * エッジを表示するか設定する。
+     * 頂点単位の設定より優先度は低い。
+     * @param show 表示するならtrue
+     */
+    public void setEdgeAppearance(boolean show){
+        this.edgeAppearance = show;
+        return;
+    }
+
+    /**
+     * エッジを表示するか判定する。
+     * 頂点単位の設定より優先度は低い。
+     * @return 表示するならtrue
+     */
+    public boolean getEdgeAppearance(){
+        return this.edgeAppearance;
+    }
+
+    /**
+     * 面リストを返す。
+     * @return 面リスト
+     */
+    public List<Surface> getSurfaceList(){
+        return this.surfaceList;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @return {@inheritDoc}
+     */
+    @Override
+    public Iterator<Surface> iterator(){
+        return this.surfaceList.iterator();
+    }
+
+    /**
+     * {@inheritDoc}
+     * @return {@inheritDoc}
+     */
+    @Override
+    public String toString(){
+        StringBuilder result = new StringBuilder();
+
+        result.append("Material ");
+
+        float[] rgba = new float[4];
+
+        this.diffuseColor.getRGBComponents(rgba);
+        result.append("diffuse=[")
+              .append(rgba[0]).append(", ")
+              .append(rgba[1]).append(", ")
+              .append(rgba[2]).append(", ")
+              .append(rgba[3]).append(']')
+              .append(' ');
+
+        this.specularColor.getRGBComponents(rgba);
+        result.append("specular=[")
+              .append(rgba[0]).append(", ")
+              .append(rgba[1]).append(", ")
+              .append(rgba[2]).append(", ")
+              .append(rgba[3]).append(']')
+              .append(' ');
+
+        this.ambientColor.getRGBComponents(rgba);
+        result.append("ambient=[")
+              .append(rgba[0]).append(", ")
+              .append(rgba[1]).append(", ")
+              .append(rgba[2]).append(", ")
+              .append(rgba[3]).append(']')
+              .append(' ');
+
+        result.append("shininess=")
+              .append(this.shininess)
+              .append(' ');
+        result.append("edge=")
+              .append(this.edgeAppearance)
+              .append(' ');
+        result.append("surfaces=")
+              .append(this.surfaceList.size())
+              .append(' ');
+        result.append(this.shadeInfo);
+
+        return result.toString();
+    }
+
+}