4 * License : The MIT License
5 * Copyright(c) 2013 MikuToga Partners
8 package jp.sfjp.mikutoga.pmd.model.xml;
10 import java.io.IOException;
11 import java.util.List;
13 import jp.sfjp.mikutoga.corelib.I18nText;
14 import jp.sfjp.mikutoga.math.MkPos3D;
15 import jp.sfjp.mikutoga.pmd.MorphType;
16 import jp.sfjp.mikutoga.pmd.model.MorphPart;
17 import jp.sfjp.mikutoga.pmd.model.MorphVertex;
18 import jp.sfjp.mikutoga.pmd.model.PmdModel;
19 import jp.sfjp.mikutoga.pmd.model.Vertex;
20 import jp.sfjp.mikutoga.xml.ProxyXmlExporter;
25 class ExporterMorph extends ProxyXmlExporter {
27 private static final String MORPHTYPE_COMMENT =
29 + "[1 : EYEBROW : まゆ ]\n"
31 + "[3 : LIP : リップ ]\n"
32 + "[4 : EXTRA : その他 ]\n";
35 private final ExtraExporter exp;
42 ExporterMorph(PmdXmlExporter delegate) {
44 this.exp = new ExtraExporter(delegate);
51 * @throws IOException 出力エラー
53 void putMorphList(PmdModel model) throws IOException{
54 ind().putSimpleSTag(PmdTag.MORPH_LIST.tag()).ln();
57 boolean dumped = false;
58 Map<MorphType, List<MorphPart>> morphMap = model.getMorphMap();
59 for(MorphType type : MorphType.values()){
60 if(type == MorphType.BASE) continue;
61 List<MorphPart> partList = morphMap.get(type);
62 if(partList == null) continue;
63 for(MorphPart part : partList){
65 ln().putBlockComment(MORPHTYPE_COMMENT).ln();
73 ind().putETag(PmdTag.MORPH_LIST.tag()).ln(2);
81 * @throws IOException 出力エラー
83 private void putMorphPart(MorphPart part) throws IOException{
84 I18nText i18nName = part.getMorphName();
85 String primary = i18nName.getPrimaryText();
87 this.exp.putLocalNameComment(i18nName);
89 ind().putOpenSTag(PmdTag.MORPH.tag()).sp();
90 putAttr(PmdAttr.NAME.attr(), primary).sp();
91 putAttr(PmdAttr.TYPE.attr(), part.getMorphType().name());
96 this.exp.putI18nName(i18nName);
98 for(MorphVertex mvertex : part){
99 MkPos3D offset = mvertex.getOffset();
100 Vertex base = mvertex.getBaseVertex();
102 ind().putOpenSTag(PmdTag.MORPH_VERTEX.tag()).sp();
103 this.exp.putNumberedIdAttr(PmdAttr.VERTEX_IDREF,
104 ExtraExporter.PFX_VERTEX, base);
106 putFloatAttr(PmdAttr.XOFF.attr(),
107 (float) offset.getXpos()).sp();
108 putFloatAttr(PmdAttr.YOFF.attr(),
109 (float) offset.getYpos()).sp();
110 putFloatAttr(PmdAttr.ZOFF.attr(),
111 (float) offset.getZpos()).sp();
117 ind().putETag(PmdTag.MORPH.tag()).ln(2);