2
Copyright (c) 2008-2009 NetAllied Systems GmbH
4
This file is part of COLLADAStreamWriter.
6
Licensed under the MIT Open Source License,
7
for details please see LICENSE file or the website
8
http://www.opensource.org/licenses/mit-license.php
11
#include "COLLADASWStreamWriter.h"
12
#include "COLLADASWCameraOptic.h"
13
#include "COLLADASWConstants.h"
18
// ---------------------------------------------------
19
BaseOptic::BaseOptic ( StreamWriter* streamWriter )
20
: ElementWriter ( streamWriter )
21
, BaseExtraTechnique ( )
26
, mHasAspectRatio ( false )
36
// ---------------------------------------------------
37
void BaseOptic::add () const
39
mSW->openElement ( CSWC::CSW_ELEMENT_OPTICS );
40
mSW->openElement ( CSWC::CSW_ELEMENT_TECHNIQUE_COMMON );
42
addExtraTechniques ( mSW );
44
this->addTypeSpecificInfos ();
46
mSW->closeElement(); // COLLADASW_ELEMENT_TECHNIQUE_COMMON
47
mSW->closeElement(); // COLLADASW_ELEMENT_OPTICS
50
// --------------------------------------------
51
void BaseOptic::setZFar( const float val, const bool useDefaultSid /*= false*/, const String& sid/*="" */ )
54
if ( useDefaultSid ) mZFarSid = CSWC::CSW_ELEMENT_ZFAR;
59
// --------------------------------------------
60
void BaseOptic::setZNear( const float val, const bool useDefaultSid /*= false*/, const String& sid/*="" */ )
63
if ( useDefaultSid ) mZNearSid = CSWC::CSW_ELEMENT_ZNEAR;
68
// --------------------------------------------
69
void BaseOptic::setAspectRatio( float val, const bool useDefaultSid /*= false*/, const String& sid/*="" */ )
72
if ( useDefaultSid ) mAspectRatioSid = CSWC::CSW_ELEMENT_ASPECT_RATIO;
73
else mAspectRatioSid = sid;
74
mHasAspectRatio = true;
77
// --------------------------------------------
78
void BaseOptic::setXFov( float val, const bool useDefaultSid /*= false*/, const String& sid/*="" */ )
81
if ( useDefaultSid ) mXFovSid = CSWC::CSW_ELEMENT_XFOV;
86
// --------------------------------------------
87
void BaseOptic::setYFov( float val, const bool useDefaultSid /*= false*/, const String& sid/*="" */ )
90
if ( useDefaultSid ) mYFovSid = CSWC::CSW_ELEMENT_YFOV;
95
// --------------------------------------------
96
void BaseOptic::setXMag( float val, bool useDefaultSid /*= false*/, const String& sid/*="" */ )
99
if ( useDefaultSid ) mXMagSid = CSWC::CSW_ELEMENT_XMAG;
104
// --------------------------------------------
105
void BaseOptic::setYMag( float val, const bool useDefaultSid /*= false*/, const String& sid/*="" */ )
108
if ( useDefaultSid ) mYMagSid = CSWC::CSW_ELEMENT_YMAG;
113
// --------------------------------------------
114
void PerspectiveOptic::addTypeSpecificInfos() const
116
mSW->openElement ( CSWC::CSW_ELEMENT_CAMERA_PERSPECTIVE );
118
COLLADABU_ASSERT ( !( !mHasXFov && !mHasYFov) );
119
COLLADABU_ASSERT ( !( mHasAspectRatio && mHasXFov && mHasYFov) );
120
COLLADABU_ASSERT ( mHasZNear );
121
COLLADABU_ASSERT ( mHasZFar );
125
mSW->openElement ( CSWC::CSW_ELEMENT_XFOV );
126
if ( !mXFovSid.empty() )
127
mSW->appendAttribute( CSWC::CSW_ATTRIBUTE_SID, mXFovSid );
128
mSW->appendValues ( mXFov );
129
mSW->closeElement(); // COLLADASW_ELEMENT_XFOV
134
mSW->openElement ( CSWC::CSW_ELEMENT_YFOV );
135
if ( !mYFovSid.empty() )
136
mSW->appendAttribute( CSWC::CSW_ATTRIBUTE_SID, mYFovSid );
137
mSW->appendValues ( mYFov );
138
mSW->closeElement(); // COLLADASW_ELEMENT_YFOV
141
if ( mHasAspectRatio )
143
mSW->openElement ( CSWC::CSW_ELEMENT_ASPECT_RATIO );
144
mSW->appendValues ( mAspectRatio );
145
mSW->closeElement(); // COLLADASW_ELEMENT_ASPECT_RATIO
148
mSW->openElement ( CSWC::CSW_ELEMENT_ZNEAR );
149
if ( !mZNearSid.empty() )
150
mSW->appendAttribute( CSWC::CSW_ATTRIBUTE_SID, mZNearSid );
151
mSW->appendValues ( mZNear );
152
mSW->closeElement(); // COLLADASW_ELEMENT_ZNEAR
154
mSW->openElement ( CSWC::CSW_ELEMENT_ZFAR );
155
if ( !mZFarSid.empty() )
156
mSW->appendAttribute( CSWC::CSW_ATTRIBUTE_SID, mZFarSid );
157
mSW->appendValues ( mZFar );
158
mSW->closeElement(); // COLLADASW_ELEMENT_ZFAR
160
mSW->closeElement(); // COLLADASW_ELEMENT_CAMERA_PERSPECTIVE
163
// --------------------------------------------
164
void OrthographicOptic::addTypeSpecificInfos() const
166
mSW->openElement ( CSWC::CSW_ELEMENT_CAMERA_ORTHOGRAPHIC );
168
COLLADABU_ASSERT ( !( !mHasXMag && !mHasYMag ) );
169
COLLADABU_ASSERT ( !( mHasAspectRatio && mHasXMag && mHasYMag ) );
170
COLLADABU_ASSERT ( mHasZNear );
171
COLLADABU_ASSERT ( mHasZFar );
175
mSW->openElement ( CSWC::CSW_ELEMENT_XMAG );
176
if ( !mXMagSid.empty() )
177
mSW->appendAttribute( CSWC::CSW_ATTRIBUTE_SID, mXMagSid );
178
mSW->appendValues ( mXMag );
179
mSW->closeElement(); // COLLADASW_ELEMENT_XMAG
184
mSW->openElement ( CSWC::CSW_ELEMENT_YMAG );
185
mSW->appendValues ( mYMag );
186
mSW->closeElement(); // COLLADASW_ELEMENT_YMAG
189
if ( mHasAspectRatio )
191
mSW->openElement ( CSWC::CSW_ELEMENT_ASPECT_RATIO );
192
mSW->appendValues ( mAspectRatio );
193
mSW->closeElement(); // COLLADASW_ELEMENT_ASPECT_RATIO
196
mSW->openElement ( CSWC::CSW_ELEMENT_ZNEAR );
197
if ( !mZNearSid.empty() )
198
mSW->appendAttribute( CSWC::CSW_ATTRIBUTE_SID, mZNearSid );
199
mSW->appendValues ( mZNear );
200
mSW->closeElement(); // COLLADASW_ELEMENT_ZNEAR
202
mSW->openElement ( CSWC::CSW_ELEMENT_ZFAR );
203
if ( !mZFarSid.empty() )
204
mSW->appendAttribute( CSWC::CSW_ATTRIBUTE_SID, mZFarSid );
205
mSW->appendValues ( mZFar );
206
mSW->closeElement(); // COLLADASW_ELEMENT_ZFAR
208
mSW->closeElement(); // COLLADASW_ELEMENT_CAMERA_ORTHOGRAPHIC
212
} //namespace COLLADASW