4 * License : The MIT License
5 * Copyright(c) 2013 MikuToga Partners
8 package jp.sfjp.mikutoga.vmd.model.xml;
10 import java.io.IOException;
11 import java.util.List;
12 import jp.sfjp.mikutoga.math.MkPos3D;
13 import jp.sfjp.mikutoga.vmd.model.BezierParam;
14 import jp.sfjp.mikutoga.vmd.model.CameraMotion;
15 import jp.sfjp.mikutoga.vmd.model.CameraRotation;
16 import jp.sfjp.mikutoga.vmd.model.PosCurve;
17 import jp.sfjp.mikutoga.vmd.model.VmdMotion;
18 import jp.sfjp.mikutoga.xml.ProxyXmlExporter;
23 class CameraXmlExporter extends ProxyXmlExporter {
25 private final ExtraXmlExporter extraExporter;
32 CameraXmlExporter(VmdXmlExporter delegate) {
34 this.extraExporter = new ExtraXmlExporter(delegate);
41 * @param vmdMotion 演出データ
42 * @throws IOException 出力エラー
44 void putCameraSequence(VmdMotion vmdMotion)
46 List<CameraMotion> list = vmdMotion.getCameraMotionList();
47 if( ! list.isEmpty() ){
48 ind().putBlockComment(XmlComment.CAMERA_COMMENT);
49 ind().putBlockComment(XmlComment.BEZIER_COMMENT);
52 ind().putSimpleSTag(VmdTag.CAMERA_SEQUENCE.tag()).ln();
55 if( ! list.isEmpty() ) ln();
56 for(CameraMotion camera : list){
57 putCameraMotion(camera);
61 ind().putETag(VmdTag.CAMERA_SEQUENCE.tag()).ln(2);
68 * @param cameraMotion カメラモーション
69 * @throws IOException 出力エラー
71 private void putCameraMotion(CameraMotion cameraMotion)
73 ind().putOpenSTag(VmdTag.CAMERA_MOTION.tag()).sp();
74 int frameNo = cameraMotion.getFrameNumber();
75 putIntAttr(XmlAttr.ATTR_FRAME, frameNo).sp();
76 if( ! cameraMotion.hasPerspective() ){
77 putAttr(XmlAttr.ATTR_HAS_PERSPECTIVE, "false").sp();
82 putCameraTarget(cameraMotion);
83 putCameraRotation(cameraMotion);
84 putCameraRange(cameraMotion);
85 putProjection(cameraMotion);
88 ind().putETag(VmdTag.CAMERA_MOTION.tag()).ln(2);
95 * @param cameraMotion カメラモーション
96 * @throws IOException 出力エラー
98 private void putCameraTarget(CameraMotion cameraMotion)
100 ind().putOpenSTag(VmdTag.CAMERA_TARGET.tag()).sp();
102 MkPos3D position = cameraMotion.getCameraTarget();
104 float xPos = (float) position.getXpos();
105 float yPos = (float) position.getYpos();
106 float zPos = (float) position.getZpos();
108 putFloatAttr(XmlAttr.ATTR_X_POS, xPos).sp();
109 putFloatAttr(XmlAttr.ATTR_Y_POS, yPos).sp();
110 putFloatAttr(XmlAttr.ATTR_Z_POS, zPos).sp();
112 PosCurve posCurve = cameraMotion.getTargetPosCurve();
113 if(posCurve.isDefaultLinear()){
114 putCloseEmpty().ln();
119 this.extraExporter.putPositionCurve(posCurve);
122 ind().putETag(VmdTag.CAMERA_TARGET.tag()).ln();
130 * @param cameraMotion カメラモーション
131 * @throws IOException 出力エラー
133 private void putCameraRotation(CameraMotion cameraMotion)
135 ind().putOpenSTag(VmdTag.CAMERA_ROTATION.tag()).sp();
137 CameraRotation rotation = cameraMotion.getCameraRotation();
139 float latitude = (float) rotation.getLatitude();
140 float longitude = (float) rotation.getLongitude();
141 float roll = (float) rotation.getRoll();
143 putFloatAttr(XmlAttr.ATTR_X_RAD, latitude) .sp();
144 putFloatAttr(XmlAttr.ATTR_Y_RAD, longitude).sp();
145 putFloatAttr(XmlAttr.ATTR_Z_RAD, roll) .sp();
147 BezierParam rotCurve = cameraMotion.getIntpltRotation();
148 if(rotCurve.isDefaultLinear()){
149 putCloseEmpty().ln();
154 this.extraExporter.putBezierCurve(rotCurve);
157 ind().putETag(VmdTag.CAMERA_ROTATION.tag()).ln();
165 * @param cameraMotion カメラモーション
166 * @throws IOException 出力エラー
168 private void putCameraRange(CameraMotion cameraMotion)
170 ind().putOpenSTag(VmdTag.CAMERA_RANGE.tag()).sp();
172 float range = (float) cameraMotion.getRange();
173 putFloatAttr(XmlAttr.ATTR_RANGE, range).sp();
175 BezierParam rangeCurve = cameraMotion.getIntpltRange();
176 if(rangeCurve.isDefaultLinear()){
177 putCloseEmpty().ln();
182 this.extraExporter.putBezierCurve(rangeCurve);
185 ind().putETag(VmdTag.CAMERA_RANGE.tag()).ln();
193 * @param cameraMotion カメラモーション
194 * @throws IOException 出力エラー
196 private void putProjection(CameraMotion cameraMotion)
198 ind().putOpenSTag(VmdTag.PROJECTION.tag()).sp();
200 int angle = cameraMotion.getProjectionAngle();
201 putIntAttr(XmlAttr.ATTR_VERT_DEG, angle).sp();
203 BezierParam projCurve = cameraMotion.getIntpltProjection();
204 if(projCurve.isDefaultLinear()){
205 putCloseEmpty().ln();
210 this.extraExporter.putBezierCurve(projCurve);
213 ind().putETag(VmdTag.PROJECTION.tag()).ln();