Переключить между режимами каркаса - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть 2 функции, одна для входа и выхода из режима каркаса:

void enterWireFrame(const osgGA::GUIEventAdapter& ea, osgViewer::Viewer* viewer)
{
  osg::Node* scene = viewer->getSceneData();

  osg::Group* parent = scene->getParent(0);
  osg::Node* node = parent->getChild(0);

  auto scribe = new osgFX::Scribe();
  scribe->addChild(node);

  parent->replaceChild(node, scribe);
}

А для выхода:

void exitWireFrame(const osgGA::GUIEventAdapter& ea, osgViewer::Viewer* viewer)
{
    osg::Node* scene = viewer->getSceneData();

    osg::Group* parent = scene->getParent(0);
    osg::Node* node = (dynamic_cast<osg::Group*>(scene))->getChild(0);

    parent->replaceChild(parent, node);
}

В основном я запустил программу в следующей последовательности:

enterWireFrame(...);
exitWireFrame(...);

enterWireFrame() хорошо отображает каркас, но я не могу вернуть исходный вид без каркаса, несмотря на выполнение exitWireFrame().

1 Ответ

0 голосов
/ 02 января 2019

Вход и выход из каркасного режима может быть легко достигнут путем добавления атрибута PolygonMode в набор состояний вашего узла. Проверьте osgGA :: StateSetManipulator :: cyclePolygonMode для деталей реализации. На самом деле, клавиша 'w', если она не переопределена, делает это переключением для вас.

...