2 * model exporter for pmd-file(Ext1)
4 * License : The MIT License
5 * Copyright(c) 2010 MikuToga Partners
8 package jp.sfjp.mikutoga.pmd.model.binio;
10 import java.io.IOException;
11 import java.io.OutputStream;
12 import java.util.List;
14 import jp.sfjp.mikutoga.bin.export.IllegalTextExportException;
15 import jp.sfjp.mikutoga.pmd.IllegalPmdDataException;
16 import jp.sfjp.mikutoga.pmd.MorphType;
17 import jp.sfjp.mikutoga.pmd.PmdConst;
18 import jp.sfjp.mikutoga.pmd.model.BoneGroup;
19 import jp.sfjp.mikutoga.pmd.model.BoneInfo;
20 import jp.sfjp.mikutoga.pmd.model.MorphPart;
21 import jp.sfjp.mikutoga.pmd.model.PmdModel;
24 * PMDファイルのエクスポーター(拡張1:英名対応)。
26 * <p>任意のトゥーンファイル名対応以降のPMDファイルフォーマットを
27 * 使いたくない場合はこのエクスポーターを用いて出力せよ。
29 public class PmdExporterExt1 extends PmdExporterBase{
34 * @param stream 出力ストリーム
35 * @throws NullPointerException 引数がnull
37 public PmdExporterExt1(OutputStream stream)
38 throws NullPointerException{
46 * @param model {@inheritDoc}
47 * @throws IOException {@inheritDoc}
48 * @throws IllegalPmdDataException {@inheritDoc}
51 public void dumpPmdModel(PmdModel model)
52 throws IOException, IllegalPmdDataException{
53 super.dumpPmdModel(model);
55 dumpGlobalInfo(model);
64 * @throws IOException 出力エラー
65 * @throws IllegalPmdDataException 文字列が長すぎる。
67 private void dumpGlobalInfo(PmdModel model)
68 throws IOException, IllegalPmdDataException{
69 boolean hasGlobal = model.hasGlobalText();
71 if(hasGlobal) globalFlag = 0x01;
72 else globalFlag = 0x00;
77 dumpBasicGlobal(model);
78 dumpBoneGlobal(model);
79 dumpMorphGlobal(model);
80 dumpBoneGroupGlobal(model);
81 }catch(IllegalTextExportException e){
82 throw new IllegalPmdDataException(e);
95 * @throws IOException 出力エラー
96 * @throws IllegalTextExportException 文字列が長すぎる。
98 private void dumpBasicGlobal(PmdModel model)
99 throws IOException, IllegalTextExportException{
100 String modelName = model.getModelName().getGlobalText();
101 if(modelName == null) modelName = "";
102 dumpText(modelName, PmdConst.MAXBYTES_MODELNAME);
104 String description = model.getDescription().getGlobalText();
105 if(description == null) description = "";
106 dumpText(description, PmdConst.MAXBYTES_MODELDESC);
114 * @param model モデルデータ
115 * @throws IOException 出力エラー
116 * @throws IllegalTextExportException 文字列が長すぎる。
118 private void dumpBoneGlobal(PmdModel model)
119 throws IOException, IllegalTextExportException{
120 for(BoneInfo bone : model.getBoneList()){
121 String boneName = bone.getBoneName().getGlobalText();
122 if(boneName == null) boneName = "";
123 dumpText(boneName, PmdConst.MAXBYTES_BONENAME);
132 * @param model モデルデータ
133 * @throws IOException 出力エラー
134 * @throws IllegalTextExportException 文字列が長すぎる。
136 private void dumpMorphGlobal(PmdModel model)
137 throws IOException, IllegalTextExportException{
138 Map<MorphType, List<MorphPart>> morphMap = model.getMorphMap();
140 for(MorphType type : MorphType.values()){
141 if(type.isBase()) continue;
142 List<MorphPart> partList = morphMap.get(type);
143 if(partList == null) continue;
144 for(MorphPart part : partList){
145 String morphName = part.getMorphName().getGlobalText();
146 if(morphName == null) morphName = "";
147 dumpText(morphName, PmdConst.MAXBYTES_MORPHNAME);
157 * @param model モデルデータ
158 * @throws IOException 出力エラー
159 * @throws IllegalTextExportException 文字列が長すぎる
161 private void dumpBoneGroupGlobal(PmdModel model)
162 throws IOException, IllegalTextExportException{
163 for(BoneGroup group : model.getBoneGroupList()){
164 if(group.isDefaultBoneGroup()) continue;
165 String groupName = group.getGroupName().getGlobalText();
166 if(groupName == null) groupName = "";
167 dumpText(groupName, PmdConst.MAXBYTES_BONEGROUPNAME);