camera.cpp
#include <windows.h>
#include <Fl/gl.h>
#include <gl/glu.h>
#include <fstream>
...
bool Camera::saveKeyframes(const char* szFileName) const
{
std::ofstream ofsFile;
ofsFile.open(szFileName, std::ios::out);
if (!ofsFile.fail()) {
ofsFile << mNumKeyframes << std::endl;
ofsFile << NUM_KEY_CURVES << std::endl;
if (mKeyframes[0])
for (int i = 0; i < NUM_KEY_CURVES; ++i) {
mKeyframes[i]->toStream(ofsFile);
}
return true;
}
return false;
}
bool Camera::loadKeyframes(const char* szFileName)
{
std::ifstream ifsFile;
ifsFile.open(szFileName, std::ios::in);
if (!ifsFile.fail()) {
int iCurveCount;
int iNumKeyframes;
ifsFile >> iNumKeyframes;
if (iNumKeyframes <= 0)
return false;
mNumKeyframes = iNumKeyframes;
ifsFile >> iCurveCount;
if (iCurveCount != NUM_KEY_CURVES) {
return false;
}
deleteCurves();
createCurves(0.0f, 1.0f);
for (int i = 0; i < iCurveCount; ++i) {
mKeyframes[i]->fromStream(ifsFile);
}
return true;
}
return false;
}
float Camera::keyframeTime(int keyframe) const
{
if (mKeyframes[0]) {
Point ptCtrlPt;
mKeyframes[0]->getControlPoint(keyframe, ptCtrlPt);
return ptCtrlPt.x;
}
return 0.0f;
}
modelerui.cpp
inline void ModelerUI::cb_openAniScript_i(Fl_Menu_*, void*)
{
char *szFileName = fl_file_chooser("Open Animation Script", "*.ani", NULL);
if (szFileName) {
if (m_pwndGraphWidget->loadScript(szFileName)) {
endTime(m_pwndGraphWidget->endTime());
activeCurvesChanged();
// load the camera keyframes
string strCamKeyframeFileName = szFileName;
strCamKeyframeFileName += ".cam";
m_pwndModelerView->m_curve_camera->loadKeyframes(strCamKeyframeFileName.c_str());
// synchronize the indicator window with the loaded keyframes
m_pwndIndicatorWnd->clearIndicators();
for (int ikf = 0; ikf < m_pwndModelerView->m_curve_camera->numKeyframes(); ++ikf)
m_pwndIndicatorWnd->addIndicator(m_pwndModelerView->m_curve_camera->keyframeTime(ikf));
}
else {
fl_alert("Sorry! I can't load the animation script!");
}
}
}
...
inline void ModelerUI::cb_saveAniScript_i(Fl_Menu_*, void*)
{
char *szFileName = fl_file_chooser("Save Animation Script As", "*.ani", NULL);
if (szFileName) {
string strFileName = szFileName;
// Append the default extension
char szExt[_MAX_EXT];
_splitpath(strFileName.c_str(), NULL, NULL, NULL, szExt);
if (strlen(szExt) == 0)
strFileName += ".ani";
if (m_pwndGraphWidget->saveScript(strFileName.c_str())) {
// save the camera keyframes
string strCamKeyframeFileName = strFileName + ".cam";
m_pwndModelerView->m_curve_camera->saveKeyframes(strCamKeyframeFileName.c_str());
}
else {
fl_alert("Sorry! I can't save the animation script!");
}
}
}