zoukankan      html  css  js  c++  java
  • OSG的节点访问

    OSG中节点的访问使用的是一种访问器模式。

      一个典型的访问器涉及抽象访问者角色(Visitor), 具体访问者(Concrete Visitor), 节点角色(Node)

      OSG中访问者角色为NodeVisitor类,其基本结构如下:

      NodeVisitor(TraversalMode tm)    //构造函数,TraversalMode为节点树的遍历方式

      //TRAVERSE_NONE, 仅当前节点

      //TRAVERSE_PARENTS, 向当前节点的父节点遍历

      //TRAVERSE_ALL_CHILDREN, 向子节点遍历

      void traverse(Node& node)  //向下一个需要访问的节点推进

      void apply(Node& node)   //虚函数,访问各种节点类型,并执行访问器中的自定义操作

      void apply(Group& node)

      void apply(Geode& node)

      …………

      NodeVisitor 只是访问器角色的抽象接口,要使用访问器访问节点并执行自定义操作时,需要继承并重写

      apply(……)函数实现自定义功能。osg::Node类中的访问接口为 void accept(NodeVisitor& nv)。对节点

      的访问从节点接受一个访问器开始,将一个具体的访问器对象传递给节点,节点反过来执行访问器的apply(...)

      函数,并将自己传入访问器。可如下简单表示:

      void Node::accept(NodeVisitor& nv)

      {

      nv.apply(*ths) ;

      }

      遍历节点树:

      osg::Node类中有两个辅助函数:

      void ascend(NodeVisitor& nv)     //虚函数,向上一级节点推进访问器

      void traverse(NodeVisitor& nv)   //虚函数,向下一级节点推进访问器

      NodeVisitortraverse()函数实现如下:

      inline void traverse(Node& node)

      {

      if (_traversalMode == TRAVERSE_PARENTS)

      node.ascend(*this);

      else if (_traversalMode != TRAVERSE_NONE)

      node.traverse(*this);

      }


  • 相关阅读:
    GeoServer 2.2 正式版发布,GIS 服务器
    Spring Shell 1.0.0.RC1 发布
    微软发布支持Windows Desktop和F#的Visual Studio Express版本
    XINS 3.0 正式版发布,远程 API 调用规范
    YUI 3.7.2 补丁版发布
    HTML5 Boilerplate 4:改进了Apache配置和图片替换技术,并采用MIT许可证
    解决Windows Phone平台上不能枚举工程自带资源的问题
    截短 UTF8 字符串
    Spring Data Neo4j 2.1.0 RC4 发布
    GTK+ 3.5.18 发布,GUI 开发工具包
  • 原文地址:https://www.cnblogs.com/kanego/p/2193484.html
Copyright © 2011-2022 走看看