void SceneEditingData::readData(const String& fileName) { String baseName, path; Ogre::StringUtil::splitFilename(fileName, baseName, path); if (Ogre::StringUtil::endsWith(baseName, ".scene")) baseName.erase(baseName.length() - (sizeof(".scene") - 1)); String editDataFileName = path + baseName + ".SED"; std::ifstream stream; stream.open(editDataFileName.c_str()); if (stream) { Ogre::DataStreamPtr ifStream( new Ogre::FileStreamDataStream(&stream, false) ); String line; while (!ifStream->eof()) { line = ifStream->getLine(); Ogre::StringVector para = Ogre::StringUtil::split(line); if ( para[0] == "ReshapeLeft" ) { mTerrainReshapeSize.left = Ogre::StringConverter::parseInt(para[1]); } else if ( para[0] == "ReshapeRight" ) { mTerrainReshapeSize.right = Ogre::StringConverter::parseInt(para[1]); } else if ( para[0] == "ReshapeTop" ) { mTerrainReshapeSize.top = Ogre::StringConverter::parseInt(para[1]); } else if ( para[0] == "ReshapeBottom" ) { mTerrainReshapeSize.bottom = Ogre::StringConverter::parseInt(para[1]); } } } }
void CameraTrackSettingDialog::OnLoadTrack(wxCommandEvent& event) { wxFileDialog fileDialog(this, _("Load track file"), "", "", "Track files (*.track)|*.track", wxOPEN | wxFILE_MUST_EXIST); if (fileDialog.ShowModal() != wxID_OK) return; // 先清除当前的轨迹 ClearTrack(); std::ifstream stream; stream.open( fileDialog.GetPath().c_str() ); if (stream) { Ogre::DataStreamPtr ifStream( new Ogre::FileStreamDataStream(&stream, false) ); Ogre::String line; line = ifStream->getAsString(); Ogre::StringVector paras = Ogre::StringUtil::split(line, ","); if (paras.size() >= 2) { float length = Ogre::StringConverter::parseReal(paras[0]); if (!mCameraNode) { mCameraNode = mSceneManipulator->getBaseSceneNode()->createChildSceneNode(); } if (mTrackClear) { mCameraAnimation = mSceneManipulator->getSceneManager()->createAnimation("CameraTrack", length); // Spline it for nice curves mCameraAnimation->setInterpolationMode(Ogre::Animation::IM_SPLINE); // Create a track to animate the camera's node mCameraTrack = mCameraAnimation->createNodeTrack(0, mCameraNode); mCameraAnimState = mSceneManipulator->getSceneManager()->createAnimationState("CameraTrack"); mTrackClear = false; } unsigned int keyCount = Ogre::StringConverter::parseUnsignedInt(paras[1]); for (unsigned int i=0; i<keyCount; ++i) { Ogre::Vector3 pos = Ogre::StringConverter::parseVector3(paras[2 + i*3]); Ogre::Quaternion ori = Ogre::StringConverter::parseQuaternion(paras[3 + i*3]); float time = Ogre::StringConverter::parseReal(paras[4 + i*3]); Ogre::TransformKeyFrame* key = mCameraTrack->createNodeKeyFrame(time); // startposition key->setTranslate(pos); key->setRotation(ori); } RefreshCodeText(); } } }