osgDB.DatabaseRevisions(数据库修订)类提供了一种在场景文件或模型中使用版本控制的方法。通过使用数据库修订类,用户可以通过对场景进行修改并存储每个版本来跟踪场景的演变。每一个版本都可以被命名并用来查找或还原该版本的状态。
class osgDB::DatabaseRevisions;
DatabaseRevisions();
DatabaseRevisions(const std::string& revisionFileName);
bool read(std::istream& is);
bool write(std::ostream& os) const;
bool writeToFile(const std::string& fileName) const;
bool readFromfile(const std::string& fileName);
const Revision* getRevision(const std::string& name) const;
Revision* getRevision(const std::string& name);
const Revision* getFirstRevision() const;
Revision* getFirstRevision();
const Revision* getLastRevision() const;
Revision* getLastRevision();
const Revision* operator[](unsigned int i) const;
Revision* operator[](unsigned int i);
unsigned int getNumRevisions() const;
bool addRevision(Revision* revision, bool makeCurrent);
bool addRevision(const std::string& name, const std::string& description, bool makeCurrent);
bool deleteRevision(Revision* revision);
bool deleteRevision(const std::string& name);
Revision* getCurrentRevision();
const Revision* getCurrentRevision() const;
bool setCurrentRevisionByIndex(unsigned int index);
bool setCurrentRevisionByName(const std::string& name);
osg::ref_ptr<osgDB::DatabaseRevisions> revisions = new osgDB::DatabaseRevisions();
// 创建一个名为“initial”的修订版本,并将其作为当前版本
if (revisions->addRevision("initial", "Initial version", true))
{
std::cout << "Successfully added the initial revision." << std::endl;
}
// 添加一个新版本及其描述
if (revisions->addRevision("second", "Second version", false))
{
// 在新版本中修改场景
mySceneNode->setPosition(osg::Vec3(10.0f, 0.0f, 0.0f));
revisions->getCurrentRevision()->writeChanges(mySceneNode);
std::cout << "Successfully added the second revision." << std::endl;
}
// 保存修订版本到文件
if (revisions->writeToFile("revisions.txt"))
{
std::cout << "Successfully saved revisions to file." << std::endl;
}
osg::ref_ptr<osgDB::DatabaseRevisions> revisions = new osgDB::DatabaseRevisions();
// 从文件读取修订版本
if (revisions->readFromFile("revisions.txt"))
{
std::cout << "Successfully read revisions from file." << std::endl;
}