Введение в OpenSceneGraph: Обработка параметров командной строки
Параметры командной строки передаются через аргументы функции main(). В прошлых примерах мы тщательно помечали эти параметры как неиспользуемые, теперь же воспользуемся ими, чтобы сообщить нашей программе некоторые данные при её запуске.
В OSG есть встроенные средства разбора командной строки.
Создадим следующий пример
main.h
#ifndef MAIN_H
#define MAIN_H
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#endif // MAIN_H
main.cpp
#include "main.h"
int main(int argc, char *argv[])
{
osg::ArgumentParser args(&argc, argv);
std::string filename;
args.read("--model", filename);
osg::ref_ptr<osg::Node> root = osgDB::readNodeFile(filename);
osgViewer::Viewer viewer;
viewer.setSceneData(root.get());
return viewer.run();
}
Задаем параметры запуска программы в QtCreator
Запустив программу на выполнение получаем результат (моделька грузовика взята из того же OpenSceneGraph-Data)
Теперь разберем пример построчно
osg::ArgumentParser args(&argc, argv);
создает экземпляр класса парсера командной строки osg::ArgumentParser. При создании конструктору класса передаются аргументы, принимаемые функцией main() от операционной системы.
std::string filename;
args.read("--model", filename);
выполняем разбор аргументов, а именно ищем среди них ключ “–model”, помещая его значение в строку filename. Таким образом, посредством этого ключа мы передаем в программу имя файла с трехмерной моделью. Далее мы загружаем эту модель и отображаем её
osg::ref_ptr<osg::Node> root = osgDB::readNodeFile(filename);
osgViewer::Viewer viewer;
viewer.setSceneData(root.get());
return viewer.run();
Метод read() класса osg::ArgumentParser имеет массу перегрузок, позволяющих читать из командной строки не только строковые значения, но и целые числа, числа с плавающей запятой, векторы и т.д. Например, можно прочитать некий параметр типа float
float size = 0.0f;
args.read("--size", size);
Если в командной строке не окажется данного параметра, то его значение останется таким, каким было после инициализации переменной size.