<suppress files="" checks="ImportControl" />
<!-- Javadoc Comments -->
- <suppress files="" checks="JavadocParagraph" />
- <suppress files="" checks="JavadocTagContinuationIndentation" />
<suppress files="" checks="SummaryJavadocCheck" />
<!-- Miscellaneous -->
<suppress files="" checks="FinalParameters" />
+ <suppress files="" checks="OrderedProperties" />
<suppress files="" checks="TrailingComment" />
<!-- Modifier -->
<module name="RequireThis">
<property name="checkMethods" value="false" />
</module>
- <module name="ReturnCount" />
+ <module name="ReturnCount">
+ <property name="max" value="5" />
+ <property name="maxForVoid" value="5" />
+ </module>
<module name="SimplifyBooleanExpression" />
<module name="SimplifyBooleanReturn" />
<module name="StringLiteralEquality" />
/**
* 三次ベジェ曲線による補間カーブを記述する。
+ *
* <p>制御点P0,P1,P2,P3の座標により記述される。
+ *
* <p>P0は(0,0)で固定。P3は(127,127)で固定。
* 残りのP1,P2は、P0,P3を対角線とする正方形の内部に位置しなければならない。
*/
/**
* コンストラクタ。
+ *
* <p>デフォルトの直線補間が設定される。
*/
public BezierParam(){
/**
* 制御点P1のX座標を返す。
+ *
* @return 制御点P1のX座標
*/
public byte getP1x() {
/**
* 制御点P1のY座標を返す。
+ *
* @return 制御点P1のY座標
*/
public byte getP1y() {
/**
* 制御点P2のX座標を返す。
+ *
* @return 制御点P2のX座標
*/
public byte getP2x() {
/**
* 制御点P2のY座標を返す。
+ *
* @return 制御点P2のY座標
*/
public byte getP2y() {
/**
* 制御点P1のX座標を設定する。
+ *
* @param p1x 制御点P1のX座標
*/
public void setP1x(byte p1x) {
/**
* 制御点P1のY座標を設定する。
+ *
* @param p1y 制御点P1のY座標
*/
public void setP1y(byte p1y) {
/**
* 制御点P2のX座標を設定する。
+ *
* @param p2x 制御点P2のX座標
*/
public void setP2x(byte p2x) {
/**
* 制御点P2のY座標を設定する。
+ *
* @param p2y 制御点P2のY座標
*/
public void setP2y(byte p2y) {
/**
* 制御点P1の座標を設定する。
+ *
* @param p1xArg 制御点P1のX座標
* @param p1yArg 制御点P1のY座標
*/
/**
* 制御点P2の座標を設定する。
+ *
* @param p2xArg 制御点P2のX座標
* @param p2yArg 制御点P2のY座標
*/
/**
* 直線補間か判定する。
+ *
* <p>P1,P2双方がP0-P3対角線上に存在する場合を直線補間とする。
+ *
* @return 直線補間ならtrue
*/
public boolean isLinear(){
/**
* MMDデフォルトの直線補間か判定する。
+ *
* @return MMDデフォルトの直線補間ならtrue
*/
public boolean isDefaultLinear(){
/**
* MMDデフォルトのEaseInOutカーブか判定する。
+ *
* @return MMDデフォルトのEaseInOutカーブならtrue
*/
public boolean isDefaultEaseInOut(){
/**
* {@inheritDoc}
+ *
* @return {@inheritDoc}
*/
@Override
/**
* ボーンのモーション情報。
+ *
* <p>ボーン名、ボーン位置、ボーン回転量、及び補間カーブ情報を持つ。
*/
public class BoneMotion extends AbstractNumbered {
/**
* ボーン名を返す。
+ *
* @return ボーン名
*/
public String getBoneName(){
/**
* ボーン名を設定する。
+ *
* @param boneName ボーン名
*/
public void setBoneName(String boneName){
/**
* ボーン回転量を返す。
+ *
* @return ボーン回転量
*/
public MkQuat getRotation(){
/**
* ボーン回転の補間曲線情報を返す。
+ *
* @return ボーン回転の補間曲線情報
*/
public BezierParam getIntpltRotation(){
/**
* ボーン位置を返す。
+ *
* @return ボーン位置
*/
public MkPos3D getPosition(){
/**
* ボーン位置移動の補間情報を返す。
+ *
* @return ボーン位置移動の補間情報
*/
public PosCurve getPosCurve(){
/**
* このモーションが暗黙の位置情報を持つか判定する。
+ *
* <p>ボーン位置が原点(0,0,0)にあり、
* XYZ3軸の移動補間カーブがデフォルト直線補間の場合、
* 暗黙の位置情報と見なされる。
+ *
* <p>MMDは、位置情報を持たないボーンのモーションに対し
* 便宜的にこの暗黙の位置情報を割り当てる。
+ *
* <p>通常の位置モーションが暗黙の位置情報と一致する場合もありうる。
+ *
* @return 暗黙の位置情報であるならtrue
*/
public boolean hasImplicitPosition(){
/**
* {@inheritDoc}
+ *
* @return {@inheritDoc}
*/
@Override
/**
* カメラモーション情報。
+ *
* <p>カメラの回転は極座標で表される。
+ *
* <p>カメラ-ターゲット間の距離は球座標(極座標)の動径に相当する。
* 通常はターゲットより手前に位置するカメラまでの距離が負の値で表される。
* カメラ位置がターゲットを突き抜けた場合は正の値もとりうる。
* ※MMDのUIと符号が逆なので注意。
+ *
* <p>パースペクティブモードがOFFの場合、
* 画角は無視され遠近感処理が行われなくなる。(平行投影?)
*/
/**
* ターゲット位置情報を返す。
+ *
* @return ターゲット位置情報
*/
public MkPos3D getCameraTarget(){
/**
* ターゲット位置移動の補間情報を返す。
+ *
* @return ターゲット位置移動の補間情報
*/
public PosCurve getTargetPosCurve(){
/**
* カメラ回転情報を返す。
+ *
* @return カメラ回転情報
*/
public CameraRotation getCameraRotation(){
/**
* カメラ回転の補間曲線情報を返す。
+ *
* @return カメラ回転の補間曲線情報
*/
public BezierParam getIntpltRotation(){
/**
* カメラ-ターゲット間の距離を返す。
+ *
* @return カメラ-ターゲット間の距離
*/
public double getRange(){
/**
* カメラ-ターゲット間の距離を設定する。
+ *
* @param range カメラ-ターゲット間の距離
*/
public void setRange(double range){
/**
* カメラ-ターゲット間距離の補間曲線情報を返す。
+ *
* @return カメラ-ターゲット間距離の補間曲線情報
*/
public BezierParam getIntpltRange(){
/**
* パースペクティブが有効か判定する。
+ *
* @return パースペクティブが有効ならtrue
*/
public boolean hasPerspective(){
/**
* パースペクティブモードを設定する。
+ *
* @param mode trueを渡すとパースペクティブが有効になる。
*/
public void setPerspectiveMode(boolean mode){
/**
* 投影角度(スクリーン縦画角)を返す。
+ *
* @return 投影角度(度数法)
*/
public int getProjectionAngle(){
/**
* 投影角度(スクリーン縦画角)を設定する。
+ *
* @param angle 投影角度(度数法)
*/
public void setProjectionAngle(int angle){
/**
* スクリーン投射の補間曲線情報を返す。
+ *
* @return スクリーン投射の補間曲線情報
*/
public BezierParam getIntpltProjection(){
/**
* {@inheritDoc}
+ *
* @return {@inheritDoc}
*/
@Override
* 左手系空間でターゲットの周りを回るカメラの回転情報。
* いずれもカメラ姿勢ではなくカメラ運動量を示すため、
* 回転量0と2Πの区別には意味がある。
+ *
* <p>latitudeはターゲットから見たカメラの仰俯角(≒緯度)。
* 単位はラジアン。
* Y軸回転量が0の時のZ正軸がY正軸へ倒れる方向が正回転。
* (MMDのUIとは符号が逆になるので注意)
* 仰俯角が0の場合、
* カメラはターゲットに対しXZ平面(水平)と平行な箇所に位置する。
+ *
* <p>longitudeはY軸周りの回転量(≒経度)。
* 単位はラジアン。
* X正軸がZ正軸へ倒れる方向が正回転。(ボーン回転と逆)
* 仰俯角およびY軸回転量が0の場合、
* カメラレンズはZ軸-∞方向からZ軸+∞方向を向く。
+ *
* <p>rollはレンズをターゲットを向けたカメラのロール回転量。
* 単位はラジアン。
* 仰俯角とY軸回転量が0の時にY正軸がX正軸に倒れる方向が正回転。
/**
* ターゲットから見たカメラの仰俯角(≒緯度)を返す。
+ *
* @return ターゲットから見たカメラの仰俯角(≒緯度)
*/
public double getLatitude(){
/**
* ターゲットから見たカメラの仰俯角(≒緯度)を設定する。
+ *
* @param latitude ターゲットから見たカメラの仰俯角(≒緯度)
*/
public void setLatitude(double latitude){
/**
* Y軸周りの回転量(≒経度)を返す。
+ *
* @return Y軸周りの回転量(≒経度)
*/
public double getLongitude(){
/**
* Y軸周りの回転量(≒経度)を設定する。
+ *
* @param longitude Y軸周りの回転量(≒経度)
*/
public void setLongitude(double longitude){
/**
* レンズをターゲットを向けたカメラのロール回転量を返す。
+ *
* @return レンズをターゲットを向けたカメラのロール回転量
*/
public double getRoll(){
/**
* レンズをターゲットを向けたカメラのロール回転量を設定する。
+ *
* @param roll レンズをターゲットを向けたカメラのロール回転量
*/
public void setRoll(double roll){
/**
* {@inheritDoc}
+ *
* @return {@inheritDoc}
*/
@Override
/**
* 光源の色設定。
+ *
* <p>色情報はRGB色空間で記述される。
+ *
* <p>MMDのUI上の各色成分指定0~255定義域に便宜上256を追加したものが、
* 0.0以上1.0以下にマップされる。
+ *
* <ul>
* <li>0は正しく0.0にマップされる。
* <li>128は正しく0.5にマップされる。
/**
* コンストラクタ。
+ *
* <p>MMDデフォルトの光源色(154,154,154)が設定される。
*/
public LuminousColor(){
/**
* 光源の赤成分を設定する。
+ *
* @param colR 赤成分
*/
public void setColR(float colR) {
/**
* 光源の緑成分を設定する。
+ *
* @param colG 緑成分
*/
public void setColG(float colG) {
/**
* 光源の青成分を設定する。
+ *
* @param colB 青成分
*/
public void setColB(float colB) {
/**
* 光源の赤成分を返す。
+ *
* @return 赤成分
*/
public float getColR(){
/**
* 光源の緑成分を返す。
+ *
* @return 緑成分
*/
public float getColG(){
/**
* 光源の青成分を返す。
+ *
* @return 青成分
*/
public float getColB(){
/**
* {@inheritDoc}
+ *
* @return {@inheritDoc}
*/
@Override
/**
* 光源演出情報。
+ *
* <p>照明方向は、
* ワールド座標原点から伸びる方向ベクトルとして記述される。
* この方向ベクトルに向けて、無限遠の光源から照明が当たる。
+ *
* <p>MMDのスライダUI上では
* 方向ベクトル各軸成分の定義域は-1.0以上+1.0以下だが、
* さらに絶対値の大きな値を指定することも可能。
+ *
* <p>方向ベクトルの長さは演出上の意味を持たないが、
* キーフレーム間の照明方向の補間に影響を及ぼすかもしれない。
+ *
* <p>方向ベクトルが零ベクトル(0,0,0)の場合、MMDでは全ポリゴンに影が落ちる。
+ *
*/
public class LuminousMotion extends AbstractNumbered {
/**
* 光源の色情報を返す。
+ *
* @return 光源の色情報
*/
public LuminousColor getColor(){
/**
* 光源からの照射方向情報を返す。
+ *
* @return 光源からの照射方向情報
*/
public MkVec3D getDirection(){
/**
* {@inheritDoc}
+ *
* @return {@inheritDoc}
*/
@Override
/**
* モーフ情報。
+ *
* <p>通常、モーフ量は0.0以上1.0以下の値をとる。
*/
public class MorphMotion extends AbstractNumbered {
/**
* モーフ名を設定する。
+ *
* @param morphName モーフ名
*/
public void setMorphName(String morphName) {
/**
* モーフ名を返す。
+ *
* @return モーフ名
*/
public String getMorphName() {
/**
* モーフ変量を設定する。
+ *
* @param flex 変量
*/
public void setFlex(float flex) {
/**
* モーフ変量を返す。
+ *
* @return 変量
*/
public float getFlex() {
/**
* {@inheritDoc}
+ *
* @return {@inheritDoc}
*/
@Override
/**
* コンストラクタ。
+ *
* <p>モデル表示ありの状態で初期化される。
*/
public NumberedVmdFlag(){
/**
* モデルを表示するか否か返す。
+ *
* @return 表示するならtrue
*/
public boolean isModelShown(){
/**
* モデルを表示するか否か設定する。
+ *
* @param shownArg 表示するならtrue
*/
public void setModelShown(boolean shownArg){
/**
* 個別IKボーンフラグのリストを返す。
+ *
* @return 個別IKボーンフラグのリスト
*/
public List<IkSwitch> getIkSwitchList(){
/**
* {@inheritDoc}
+ *
* @return {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
+ *
* @return {@inheritDoc}
*/
@Override
/**
* 3次元位置移動のモーション補間曲線情報。
+ *
* <p>XYZ3軸それぞれに対応するベジェ曲線を3本持つ。
*/
public class PosCurve implements Iterable<BezierParam> {
/**
* {@inheritDoc}
- * X軸、Y軸、Z軸の順で補間曲線情報を列挙する。
+ *
+ * <p>X軸、Y軸、Z軸の順で補間曲線情報を列挙する。
+ *
* @return {@inheritDoc} 3要素を返す列挙子
*/
@Override
/**
* ボーンX軸移動の補間曲線情報を返す。
+ *
* @return ボーンX軸移動の補間曲線情報
*/
public BezierParam getIntpltXpos(){
/**
* ボーンY軸移動の補間曲線情報を返す。
+ *
* @return ボーンY軸移動の補間曲線情報
*/
public BezierParam getIntpltYpos(){
/**
* ボーンZ軸移動の補間曲線情報を返す。
+ *
* @return ボーンZ軸移動の補間曲線情報
*/
public BezierParam getIntpltZpos(){
/**
* 3軸ともMMDデフォルトの直線補間か判定する。
+ *
* @return 3軸ともMMDデフォルトの直線補間ならtrue
*/
public boolean isDefaultLinear(){
/**
* {@inheritDoc}
+ *
* @return {@inheritDoc}
*/
@Override
/**
* シャドウ描画の質がカメラからの距離の影響をあまり受けないモード。
+ *
* <p>※MMDのUIにおけるデフォルト。
*/
MODE_1(0x01),
/**
* コンストラクタ。
+ *
* @param code 割り当て番号(byte)
*/
- private ShadowMode(byte code){
+ ShadowMode(byte code){
this.code = code;
return;
}
/**
* コンストラクタ。
+ *
* @param iVal 割り当て番号(int)
- * ※上位24bitは捨てられる。
+ * ※上位24bitは捨てられる。
*/
- private ShadowMode(int iVal){
+ ShadowMode(int iVal){
this((byte)(iVal & MASK_8));
return;
}
/**
* byte型値に符号化された時の値を返す。
+ *
* @return byte型値に符号化された時の値
*/
public byte getEncodedByte(){
/**
* byte型値から描画モードを復号する。
+ *
* @param bVal byte型値
* @return 描画モード。未定義の値が与えられた場合はnull。
*/
/**
* int型値から描画モードを復号する。
+ *
* <p>上位24bitは無視される。
+ *
* @param iVal int型値
* @return 描画モード。未定義の値が与えられた場合はnull。
*/
/**
* 影(セルフシャドウ)演出情報。
+ *
* <p>カメラからの距離情報(幾何距離の100倍?)による影演出対象の範囲指定は、
* MMDのスライダUI上では0から9999までが指定可能。
+ *
* <p>MMDのスライダUI値SからVMDファイル上の生パラメターへの変換式は、
* 「 0.1 - (S / 1.0E+5) 」
* となる。
/**
* デフォルトの範囲指定生パラメータ。
+ *
* <p>MMDのスライダUI値「8875」にほぼ相当。
*/
public static final double DEF_SCOPE = 0.01125;
/**
* VMDファイル上の生パラメータ数値による演出対象範囲指定を、
* MMDのUI上の距離情報(カメラからの幾何距離×100倍?)に変換する。
+ *
* @param param 生パラメータ
* @return MMDのスライダUI上の距離情報
*/
/**
* MMDのUI上の距離情報(カメラからの幾何距離×100倍?)を、
* VMDファイル上の生パラメータ数値に変換する。
+ *
* @param scope MMDのスライダUI上の距離情報
* @return 生パラメータ
*/
/**
* 影演出の範囲指定の生パラメータを設定する。
+ *
* @param rawScopeParam 生パラメータ
*/
public void setRawScopeParam(double rawScopeParam) {
/**
* 影演出の範囲指定の生パラメータを返す。
+ *
* @return 生パラメータ
*/
public double getRawScopeParam() {
/**
* 影演出の範囲指定のスライダUI値を設定する。
+ *
* @param scope スライダUI値
*/
public void setScope(double scope){
/**
* 影演出の範囲指定のスライダUI値を返す。
+ *
* @return スライダUI値
*/
public double getScope(){
/**
* 影描画モードを設定する。
+ *
* @param shadowMode 影描画モード
* @throws NullPointerException 引数がnull
*/
/**
* 影描画モードを返す。
+ *
* @return 影描画モード
*/
public ShadowMode getShadowMode(){
/**
* {@inheritDoc}
+ *
* @return {@inheritDoc}
*/
@Override
/**
* モデル名を返す。
+ *
* @return モデル名
*/
public String getModelName(){
/**
* モデル名を設定する。
+ *
* <p>このモーションがモデルモーションかステージ演出情報かは、
* このモデル名で判別される。
+ *
* @param modelName モデル名
* @throws NullPointerException 引数がnull
* @see jp.sfjp.mikutoga.vmd.VmdUniq#MODELNAME_STAGEACT
/**
* モデルモーションか否か判別する。
+ *
* <p>判別は特殊なモデル名を持つか否かで決定される。
* @return モデルモーションならtrue
+ *
* @see jp.sfjp.mikutoga.vmd.VmdUniq#MODELNAME_STAGEACT
*/
public boolean isModelMotion(){
/**
* フラグモーションが存在するか否か判定する。
+ *
* <p>フラグモーションは、
* MMD Ver7.40以降のVMDフォーマットでなければ記録できない。
+ *
* @return 存在するならtrue
*/
public boolean hasFlagMotion(){
/**
* 順序保証されたボーンモーションマップを返す。
+ *
* @return ボーンモーションマップ
* @see java.util.LinkedHashMap
*/
/**
* 順序保証されたモーフモーションマップを返す。
+ *
* @return モーフモーションマップ
* @see java.util.LinkedHashMap
*/
/**
* カメラモーションのリストを返す。
+ *
* @return カメラモーションのリスト
*/
public List<CameraMotion> getCameraMotionList(){
/**
* 照明モーションのリストを返す。
+ *
* @return 照明モーションのリスト
*/
public List<LuminousMotion> getLuminousMotionList(){
/**
* シャドウモーションのリストを返す。
+ *
* @return シャドウモーションのリスト
*/
public List<ShadowMotion> getShadowMotionList(){
/**
* 各種フレーム番号付きフラグのリストを返す。
+ *
* @return フレーム番号付きフラグのリスト
*/
public List<NumberedVmdFlag> getNumberedFlagList(){
/**
* ボーンモーションを追加する。
* 追加順は保持される。
+ *
* @param motion ボーンモーション
* @see java.util.LinkedHashMap
*/
/**
* モーフモーションを追加する。
* 追加順は保持される。
+ *
* @param motion モーフモーション
* @see java.util.LinkedHashMap
*/
/**
* {@inheritDoc}
+ *
* @return {@inheritDoc}
*/
@Override
/**
* コンストラクタ。
+ *
* @param stream 出力ストリーム
*/
BasicExporter(OutputStream stream){
/**
* ヘッダ情報を出力する。
+ *
* @param motion モーションデータ
* @throws IOException 出力エラー
*/
/**
* モデル名を出力する。
+ *
* <p>演出データのモデル名には
* 便宜的に
* {@link jp.sfjp.mikutoga.vmd.VmdUniq#MODELNAME_STAGEACT}
* が使われる。
+ *
* @param motion モーションデータ
* @throws IOException 出力エラー
* @throws IllegalTextExportException 不正なモデル名の出現
/**
* ボーンモーション情報を出力する。
+ *
* @param motion モーションデータ
* @throws IOException 出力エラー
* @throws IllegalTextExportException 不正なボーン名の出現
/**
* ボーン位置情報を出力する。
+ *
* @param position ボーン位置情報
* @throws IOException 出力エラー
*/
/**
* ボーン回転情報を出力する。
+ *
* @param rotation ボーン回転情報
* @throws IOException 出力エラー
*/
/**
* ボーンモーションの補間情報を出力する。
+ *
* @param boneMotion ボーンモーション
* @throws IOException 出力エラー
*/
/**
* 補間情報冗長部の組み立て。
+ *
* <p>※ MMDの版によって若干出力内容が異なる。
*/
private void redundantCopy(){
/**
* モーフ情報を出力する。
+ *
* @param motion モーションデータ
* @throws IOException 出力エラー
* @throws IllegalTextExportException 不正なモーフ名の出現
/**
* フラグ情報のエクスポーター。
+ *
* <p>MikuMikuDance Ver7.40以降でサポート
*/
class BoolExporter extends BinaryExporter{
/**
* コンストラクタ。
+ *
* @param stream 出力ストリーム
*/
BoolExporter(OutputStream stream){
/**
* フラグ情報を出力する。
+ *
* @param motion モーションデータ
* @throws IOException 出力エラー
* @throws IllegalTextExportException 不正な文字列が指定された。
/**
* IK有効フラグを出力する。
+ *
* @param flag フラグ情報
* @throws IOException 出力エラー
* @throws IllegalTextExportException 不正な文字列が指定された。
/**
* フラグ情報のビルダ。
+ *
* <p>MikuMikuDance Ver7.40以降でサポート
*/
class BoolLoader implements VmdBoolHandler{
/**
* コンストラクタ。
+ *
* @param vmdMotion モーションデータの格納先。
*/
BoolLoader(VmdMotion vmdMotion){
/**
* {@inheritDoc}
+ *
* @param stage {@inheritDoc}
* @param loops {@inheritDoc}
* @throws MmdFormatException {@inheritDoc}
/**
* {@inheritDoc}
+ *
* @param stage {@inheritDoc}
* @throws MmdFormatException {@inheritDoc}
*/
/**
* {@inheritDoc}
+ *
* @param stage {@inheritDoc}
* @throws MmdFormatException {@inheritDoc}
*/
/**
* {@inheritDoc}
+ *
* @param show {@inheritDoc}
* @param keyFrameNo {@inheritDoc}
* @throws MmdFormatException {@inheritDoc}
/**
* {@inheritDoc}
+ *
* @param boneName {@inheritDoc}
* @param validIk {@inheritDoc}
* @param keyFrameNo {@inheritDoc}
/**
* モーションデータをVMDファイル形式で出力する。
+ *
* <p>異常時には出力データのフラッシュが試みられる。
+ *
* @param motion モーションデータ
* @param ostream 出力先ストリーム
* @throws IOException 出力エラー
/**
* モーションデータをVMDファイル形式で出力する。
+ *
* @param motion モーションデータ
* @throws IOException 出力エラー
* @throws IllegalVmdDataException モーションデータに不備が発見された
/**
* 正常パース時に読み残したデータがあったか判定する。
+ *
* @return 読み残したデータがあればtrue
* @throws IllegalStateException まだパースを試みていない。
*/
/**
* ボーンモーション補間情報冗長部のチェックを行うか否か設定する。
* デフォルトではチェックを行わない。
+ *
* <p>※MMDVer7.30前後のVMD出力不具合を回避したい場合は、
* オフにするとパースに成功する場合がある。
+ *
* <p>※MMD Ver7.39x64以降はチェック回避必須。
+ *
* @param mode チェックさせたければtrue
*/
public void setRedundantCheck(boolean mode){
/**
* VMDファイルの読み込みを行いモーション情報を返す。
* 1インスタンスにつき一度しかロードできない。
+ *
* @param source VMDファイル入力ソース
* @return モーション情報
* @throws IOException 入力エラー
/**
* XML出力機構の共通部。
+ *
* <p>主にベジェ補間パラメータ出力部。
*/
class ExtraXmlExporter extends ProxyXmlExporter {
/**
* コンストラクタ。
+ *
* @param delegate 委譲先
*/
ExtraXmlExporter(XmlExporter delegate){
/**
* 位置移動補間カーブを出力する。
+ *
* @param posCurve 移動補間情報
* @throws IOException 出力エラー
*/
/**
* ベジェ曲線による補間曲線情報を出力する。
+ *
* @param bezier ベジェ曲線
* @throws IOException 出力エラー
*/
public static final String LOCAL_SCHEMA_VMDXML =
"resources/vmdxml-110820.xsd";
+ /** schema URI. */
public static final URI URI_SCHEMA_VMDXML = URI.create(SCHEMA_VMDXML);
+ /** local resource URI. */
public static final URI RES_SCHEMA_VMDXML;
private static final Class<?> THISCLASS = Schema110820.class;
/**
* 130609形式XML各種リソースの定義。
+ *
* <p>MikuMikuDance Ver7.40 の新VMDファイルフォーマット対応。
*/
public final class Schema130609{
public static final String LOCAL_SCHEMA_VMDXML =
"resources/vmdxml-130609.xsd";
+ /** schema URI. */
public static final URI URI_SCHEMA_VMDXML = URI.create(SCHEMA_VMDXML);
+ /** local resource URI. */
public static final URI RES_SCHEMA_VMDXML;
private static final Class<?> THISCLASS = Schema130609.class;
* コンストラクタ。
* @param tagName 要素名
*/
- private VmdTag(String tagName){
+ VmdTag(String tagName){
this.tagName = tagName.intern();
return;
}
/**
* 出力XMLファイル種別を設定する。
+ *
* @param type ファイル種別
*/
public void setXmlFileType(XmlMotionFileType type){
/**
* 出力XMLファイル種別を返す。
+ *
* @return ファイル種別
*/
public XmlMotionFileType getXmlFileType(){
/**
* ボーン回転量をクォータニオンで出力するか否か設定する。
+ *
* <p>デフォルトではtrue
+ *
* @param mode trueだとクォータニオン、falseだとオイラー角で出力される。
*/
public void setQuaternionMode(boolean mode){
/**
* ボーン回転量をクォータニオンで出力するか否か返す。
+ *
* @return クォータニオンで出力するならtrue
*/
public boolean isQuaternionMode(){
/**
* Generatorメタ情報を設定する。
+ *
* @param generatorArg Generatorメタ情報。nullならXML出力しない。
*/
public void setGenerator(String generatorArg){
/**
* Generatorメタ情報を取得する。
+ *
* @return Generatorメタ情報。XML出力しないならnullを返す。
*/
public String getGenerator(){
/**
* VMDモーションデータをXML形式で出力する。
+ *
* @param vmdMotion VMDモーションデータ
* @param xmlOut 出力先
* @throws IOException 出力エラー
/**
* VMDモーションデータをXML形式で出力する。
+ *
* @param vmdMotion VMDモーションデータ
* @throws IOException 出力エラー
* @throws IllegalVmdDataException 不正なモーションデータを検出
/**
* ルート要素がオープンするまでの各種宣言を出力する。
+ *
* @throws IOException 出力エラー
*/
private void putVmdRootOpen() throws IOException{
/**
* ジェネレータ名を出力する。
+ *
* @throws IOException 出力エラー
*/
private void putGenerator() throws IOException{
/**
* モデル名を出力する。
+ *
* @param vmdMotion モーションデータ
* @throws IOException 出力エラー
*/
/**
* ボーンモーションデータを出力する。
+ *
* @param vmdMotion モーションデータ
* @throws IOException 出力エラー
*/
/**
* ボーン別モーションデータを出力する。
+ *
* @param boneName ボーン名
* @param list ボーンモーションのリスト
* @throws IOException 出力エラー
/**
* ボーンモーションを出力する。
+ *
* @param boneMotion ボーンモーション
* @throws IOException 出力エラー
*/
/**
* ボーン位置を出力する。
+ *
* @param boneMotion ボーンモーション
* @throws IOException 出力エラー
*/
/**
* ボーン回転を出力する。
+ *
* @param boneMotion ボーンモーション
* @throws IOException 出力エラー
*/
/**
* ボーン回転を出力する。
+ *
* @param boneMotion ボーンモーション
* @throws IOException 出力エラー
*/
/**
* モーフデータを出力する。
+ *
* @param vmdMotion モーションデータ
* @throws IOException 出力エラー
*/
/**
* 箇所別モーフデータを出力する。
+ *
* @param listMap モーフデータの名前付きリストマップ
* @throws IOException 出力エラー
*/
/**
* 個別のモーフモーションを出力する。
+ *
* @param morphMotion モーフモーション
* @throws IOException 出力エラー
*/
/**
* XMLモーションファイルパース用SAXハンドラ。
+ *
* <p>下位リスナに各種通知が振り分けられる。
*/
class XmlHandler implements ContentHandler{
/**
* ビルド対象のモーションを返す。
+ *
* @return ビルド対象のモーション
*/
VmdMotion getVmdMotion(){
/**
* {@inheritDoc}
+ *
* @throws SAXException {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
+ *
* @throws SAXException {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
+ *
* @param prefix {@inheritDoc}
* @param uri {@inheritDoc}
* @throws SAXException {@inheritDoc}
@Override
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
- if( Schema110820.NS_VMDXML.equals(uri)
- || Schema130609.NS_VMDXML.equals(uri) ){
+ if( Schema110820.NS_VMDXML.equals(uri)
+ || Schema130609.NS_VMDXML.equals(uri) ){
this.nspfx = prefix;
this.nsuri = uri;
}
/**
* {@inheritDoc}
+ *
* @param prefix {@inheritDoc}
* @throws SAXException {@inheritDoc}
*/
/**
* {@inheritDoc}
+ *
* @param uri {@inheritDoc}
* @param localName {@inheritDoc}
* @param qName {@inheritDoc}
/**
* タグ出現に従い通知リスナを切り替える。
+ *
* @param tag タグ種別
*/
private void switchListener(VmdTag tag){
/**
* {@inheritDoc}
+ *
* @param uri {@inheritDoc}
* @param localName {@inheritDoc}
* @param qName {@inheritDoc}
/**
* {@inheritDoc}
+ *
* @param locator {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
+ *
* @param target {@inheritDoc}
* @param data {@inheritDoc}
* @throws SAXException {@inheritDoc}
/**
* {@inheritDoc}
+ *
* @param ch {@inheritDoc}
* @param start {@inheritDoc}
* @param length {@inheritDoc}
/**
* {@inheritDoc}
+ *
* @param ch {@inheritDoc}
* @param start {@inheritDoc}
* @param length {@inheritDoc}
/**
* {@inheritDoc}
+ *
* @param name {@inheritDoc}
* @throws SAXException {@inheritDoc}
*/
/**
* XMLファイル(自動判別)。
+ *
* <p>読み込み時のスキーマ判別は自動。
+ *
* <p>書き込み時のスキーマは最新。
*/
XML_AUTO,
*/
XML_130609,
- ;
-
}
/**
* コンストラクタ。
+ *
* <p>XMLリーダは名前空間をサポートしていなければならない。
+ *
* @param reader XMLリーダ
* @throws NullPointerException 引数がnull
*/
/**
* XMLのパースを開始する。
+ *
* @param source XML入力
* @return モーションデータ
* @throws SAXException 構文エラー
/**
* コマンドライン解析を行う。
+ *
* @param args コマンドライン
* @return 解析されたコマンドライン並び
*/
/**
* コマンドライン解析を行う。
+ *
* @param argList コマンドライン
* @return 解析されたコマンドライン並び
*/
/**
* オプション識別子を返す。
+ *
* @return オプション識別子。
- * オプションを伴わない単純なコマンドライン引数の場合はnullを返す。
+ * オプションを伴わない単純なコマンドライン引数の場合はnullを返す。
*/
OptSwitch getOptSwitch() {
return this.opt;
/**
* オプションに付随する引数群を返す。
+ *
* @return オプションに付随する引数群。
- * 先頭要素はオプション識別子。
- * 単純なコマンドライン引数の場合は自身が1要素のみを占める。
+ * 先頭要素はオプション識別子。
+ * 単純なコマンドライン引数の場合は自身が1要素のみを占める。
*/
List<String> getOptArgs() {
return this.optArgs;
/**
* XMLファイル(自動判別)。
+ *
* <p>読み込み時のスキーマ判別は自動。
+ *
* <p>書き込み時のスキーマは最新。
*/
XML_AUTO,
/**
* コンストラクタ。
*/
- private MotionFileType(){
+ MotionFileType(){
return;
}
/**
* ファイル種別をXMLファイル種別に変換する。
+ *
* <p>未定義の場合はXML_AUTOを返す。
+ *
* @return XMLファイル種別
*/
public XmlMotionFileType toXmlType(){
/**
* ファイル種別がXMLか判定する。
+ *
* @return XMLならtrue
*/
public boolean isXml(){
/**
* ファイル種別がVMDか判定する。
+ *
* @return VMDならtrue
*/
public boolean isVmd(){
/**
* フォーマット種別指定子をデコードする。
+ *
* @param arg 文字列
* @return デコード結果。
* @throws CmdLineException 不正なフォーマット種別
/**
* 改行文字指定子をデコードする。
+ *
* @param arg 文字列
* @return デコード結果。
* @throws CmdLineException 不正なフォーマット種別
/**
* ブール指定子をデコードする。
+ *
* @param arg 文字列
* @return デコード結果。
* @throws CmdLineException 不正なフォーマット種別
throws CmdLineException{
boolean result;
- if( "on" .equals(arg)
- || "true".equals(arg)
- || "yes" .equals(arg) ){
+ if( "on" .equals(arg)
+ || "true".equals(arg)
+ || "yes" .equals(arg) ){
result = true;
- }else if( "off" .equals(arg)
- || "false".equals(arg)
- || "no" .equals(arg) ){
+ }else if( "off" .equals(arg)
+ || "false".equals(arg)
+ || "no" .equals(arg) ){
result = false;
}else{
String errMsg = MessageFormat.format(ERRMSG_INVBOOL, arg);
/**
* ファイル名からファイル種別を類推する。
+ *
* <p>拡張子が「.vmd」ならVMDファイル、「.xml」ならXMLファイル。
+ *
* @param fileName ファイル名
* @return ファイル種別。識別不可ならNONE。
*/
/**
* ヘルプ要求があるかコマンドライン列を調べる。
+ *
* @param cmds コマンドライン列
* @return ヘルプ要求があればtrue
*/
/**
* 個別のオプション情報を格納する。
+ *
* @param opt オプション識別子
* @param exArg 引数。なければnull
* @param result オプション情報格納先
/**
* コマンドラインを解析する。
+ *
* @param args コマンドライン
* @return オプション情報
* @throws CmdLineException 不正なコマンドライン
/**
* 単純なコマンドラインエラーを検出する。
+ *
* <p>検出項目は未知のオプションおよび不正な引数の個数
+ *
* @param cmdLines コマンドライン
* @throws CmdLineException 異常系
*/
/**
* ファイルフォーマット情報の推測を行う。
+ *
* @param result オプション情報
*/
private static void fixFormat(OptInfo result){
/**
* オプション整合性の事後検査。
+ *
* @param result オプション情報
* @throws CmdLineException 不正なオプション設定
*/
/**
* ヘルプ表示が必要か否か判定する。
+ *
* @return 必要ならtrue
*/
boolean needHelp(){
/**
* 入力ファイル種別を返す。
+ *
* @return 入力ファイル種別
*/
MotionFileType getInFileType(){
/**
* 出力ファイル種別を返す。
+ *
* @return 出力ファイル種別
*/
MotionFileType getOutFileType(){
/**
* 入力ファイル名を返す。
+ *
* @return 入力ファイル名
*/
String getInFilename(){
/**
* 出力ファイル名を返す。
+ *
* @return 出力ファイル名
*/
String getOutFilename(){
/**
* 上書きモードか否か返す。
+ *
* @return 上書きモードならtrue
*/
boolean overwriteMode(){
/**
* XML改行文字を返す。
+ *
* @return 改行文字
*/
String getNewline(){
/**
* ジェネレータ名を返す。
+ *
* @return ジェネレータ名。表示したくない時はnull
*/
String getGenerator(){
/**
* 回転情報のXML出力形式を得る。
+ *
* @return クォータニオン形式ならtrue、YXZオイラー角形式ならfalse。
*/
boolean isQuaterniomMode(){
/**
* コンストラクタ。
+ *
* @param argnum 必要な引数の数
* @param cmdopts オプションスイッチパターン群
*/
- private OptSwitch(int argnum, String... cmdopts) {
+ OptSwitch(int argnum, String... cmdopts) {
this.exArgNum = argnum;
List<String> optlist;
/**
* コンソール提示用ヘルプ出力文字列を返す。
+ *
* @return オプションヘルプ文字列
*/
static String getConsoleHelp(){
/**
* 文字列に合致するオプションを返す。
+ *
* <p>一つのオプションが複数の表記に合致する場合がある。
+ *
* @param cmd 文字列
* @return オプション種別。合致する物が見つからなければnull
*/
/**
* 各オプションに後続する引数の数を返す。
+ *
* <p>引数をとらないオプションは0を返す。
+ *
* @return 引数の数
*/
int getExArgNum(){
/**
* VMを終了させる。
+ *
* @param code 終了コード
* @see java.lang.System#exit(int)
*/
/**
* 共通エラーメッセージを出力する。
+ *
* @param text 個別メッセージ
*/
private static void errMsg(String text){
/**
* 標準エラー出力へ例外情報出力。
+ *
* @param ex 例外
* @param dumpStack スタックトレースを出力するならtrue
*/
/**
* 標準エラー出力へ例外情報出力。
+ *
* @param ex 例外
*/
private static void thPrintln(Throwable ex){
/**
* 入出力エラー処理。
* 例外を出力してVM終了する。
+ *
* @param ex 例外
*/
private static void ioError(IOException ex){
/**
* XML構文エラー処理。
* 例外を出力してVM終了する。
+ *
* @param ex 例外
*/
private static void xmlError(Throwable ex){
/**
* VMDファイルフォーマットエラー処理。
* 例外を出力してVM終了する。
+ *
* @param ex 例外
*/
private static void vmdError(MmdFormatException ex){
/**
* 内部エラー処理。
* 例外を出力してVM終了する。
+ *
* @param ex 例外
*/
private static void internalError(Throwable ex){
/**
* ファイルサイズを0に切り詰める。
+ *
* <p>ファイルが存在しなければなにもしない。
+ *
* <p>通常ファイルでなければなにもしない。
+ *
* @param file ファイル
* @throws IOException 入出力エラー
*/
/**
* 入力ソースを準備する。
+ *
* <p>入力ファイルが通常ファイルとして存在しなければエラー終了。
+ *
* @param optInfo オプション情報
* @return 入力ソース
*/
/**
* 出力ストリームを準備する。
+ *
* <p>出力ファイルが通常ファイルでない場合はエラー終了。
+ *
* <p>既存の出力ファイルに上書き指示が伴っていなければエラー終了。
+ *
* @param optInfo オプション情報
* @return 出力ストリーム
*/
/**
* オプション情報に従いコンバータを生成する。
+ *
* @param optInfo オプション情報
* @return コンバータ
*/
/**
* 実際のコンバート作業と異常系処理を行う。
+ *
* <p>異常系が起きた場合、このメソッドは制御を戻さない。
+ *
* @param converter コンバータ
* @param source 入力ソース
* @param ostream 出力ストリーム
/**
* コマンドライン文字列をオプション情報としてパースする。
+ *
* <p>異常系が起きた場合、このメソッドは制御を戻さない。
+ *
* @param args コマンドライン文字列群
* @return オプション情報
*/
/**
* Mainエントリ。
+ *
* @param args コマンドパラメータ
*/
public static void main(String[] args){
/**
* 入力ファイル種別を設定する。
+ *
* @param type ファイル種別
* @throws IllegalArgumentException 具体的な種別を渡さなかった
*/
/**
* 入力ファイル種別を返す。
+ *
* @return ファイル種別
*/
public MotionFileType getInTypes(){
/**
* 出力ファイル種別を設定する。
+ *
* @param type ファイル種別
* @throws IllegalArgumentException 具体的な種別を渡さなかった
*/
/**
* 出力ファイル種別を返す。
+ *
* @return ファイル種別
*/
public MotionFileType getOutTypes(){
/**
* XML出力用改行文字列を設定する。
+ *
* @param newline 改行文字
*/
public void setNewline(String newline){
/**
* XML出力用改行文字列を返す。
+ *
* @return 改行文字
*/
public String getNewline(){
/**
* ジェネレータ名を設定する。
+ *
* @param generator ジェネレータ名。表示したくない場合はnull
*/
public void setGenerator(String generator){
/**
* ジェネレータ名を返す。
+ *
* @return ジェネレータ名。非表示の場合はnullを返す。
*/
public String getGenerator(){
/**
* 回転情報をクォータニオン形式でXML出力するか設定する。
+ *
* @param sw クォータニオン形式ならtrue、
- * YXZオイラー角で出力したければfalse。
+ * YXZオイラー角で出力したければfalse。
*/
public void setQuaterniomMode(boolean sw){
this.isQuaternionMode = sw;
/**
* 回転情報のXML出力形式を得る。
+ *
* @return クォータニオン形式ならtrue、YXZオイラー角形式ならfalse。
*/
public boolean isQuaterniomMode(){
/**
* ファイル変換を行う。
+ *
* <p>XML入力の場合は{@link #convert(InputSource, OutputStream)}を
* 推奨する。
+ *
* @param is 入力ストリーム
* @param os 出力ストリーム
* @throws IOException 入力エラー
/**
* ファイル変換を行う。
+ *
* <p>VMD入力の場合は{@link InputStream}に
* バイトストリームが直接設定されていなければならない。
+ *
* <p>XML入力の場合は{@link InputStream}に
* URL(systemId)のみの設定を推奨する。
+ *
* @param source 入力ソース
* @param os 出力ストリーム
* @throws IOException 入力エラー
/**
* モーションファイルを読み込む。
+ *
* <p>XML読み込みの場合は、
* こちらより{@link #readMotion(InputSource)}版を推奨する。
+ *
* @param is 入力ストリーム
* @return モーションデータ
* @throws IOException 入力エラー
/**
* モーションファイルを読み込む。
+ *
* <p>VMD入力の場合は、{@link InputStream}に
* 納められたバイトストリームかSystemId-URLから読み込む。
+ *
* @param source 入力ソース
* @return モーションデータ
* @throws IOException 入力エラー
/**
* モーションファイルを出力する。
+ *
* @param motion モーションデータ
* @param os 出力ストリーム
* @throws IOException 出力エラー
/**
* VMDファイルからモーションデータを読み込む。
+ *
* <p>入力ストリームは最後に閉じられる。
+ *
* @param is 入力ストリーム
* @return モーションデータ
* @throws IOException 入力エラー
/**
* XMLファイルからモーションデータを読み込む。
+ *
* @param source 入力ソース
* @return モーションデータ
* @throws IOException 入力エラー
/**
* モーションデータをVMDファイルに出力する。
+ *
* @param motion モーションデータ
* @param ostream 出力ストリーム
* @throws IOException 出力エラー
/**
* モーションデータをXMLファイルに出力する。
+ *
* @param motion モーションデータ
* @param ostream 出力ストリーム
* @throws IOException 出力エラー
/**
* 実在ファイルからXML入力ソースを得る。
+ *
* @param file 実在ファイル
* @return XML入力ソース
*/
/**
* InputSourceからInputStreamを得る。
+ *
* <p>入力ソースには、少なくともバイトストリームか
* URL文字列(SystemId)のいずれかが設定されていなければならない。
+ *
* @param source 入力ソース
* @return 入力バイトストリーム
* @throws IllegalArgumentException 入力ソースの設定が足りない。
/**
* SAXパーサファクトリを生成する。
+ *
* <ul>
* <li>XML名前空間機能は有効になる。
* <li>DTDによる形式検証は無効となる。
* <li>XIncludeによる差し込み機能は無効となる。
* </ul>
+ *
* @param schema スキーマ
* @return ファクトリ
*/
factory.setFeature(F_LOAD_EXTERNAL_DTD, false);
}catch( ParserConfigurationException
| SAXNotRecognizedException
- | SAXNotSupportedException e
- ){
+ | SAXNotSupportedException e ){
assert false;
throw new AssertionError(e);
}
/**
* SAXパーサを生成する。
+ *
* @param schema スキーマ
* @return SAXパーサ
*/
/**
* スキーマを生成する。
- * @param resolver リゾルバ
+ *
* @param xmlInType 入力XML種別
* @return スキーマ
*/
/**
* XMLリーダを生成する。
+ *
* <p>エラーハンドラには{@link BotherHandler}が指定される。
+ *
* @param xmlInType 入力XML種別
* @return XMLリーダ
*/