OSGCopy例子解析

转载 2015年11月18日 18:37:41
例子演示了osg中的拷贝,深拷贝和浅拷贝。
浅拷贝只拷贝指针,指向同一个内容。
深拷贝,指针和所指向的内容都拷贝。

拷贝的全部内容都在CopyOp中,看看这个类吧:
enum Options
        {
            SHALLOW_COPY                = 0,
        
DEEP_COPY_OBJECTS           = 1<<0,
            DEEP_COPY_NODES             = 1<<1,
           
 DEEP_COPY_DRAWABLES         = 1<<2,
            DEEP_COPY_STATESETS         = 1<<3,
          


  DEEP_COPY_STATEATTRIBUTES   = 1<<4,
            DEEP_COPY_TEXTURES          = 1<<5,
         
   DEEP_COPY_IMAGES            = 1<<6,
            DEEP_COPY_ARRAYS            = 1<<7,
        
    DEEP_COPY_PRIMITIVES        = 1<<8,
            DEEP_COPY_SHAPES            = 1<<9,
       


     DEEP_COPY_UNIFORMS          = 1<<10,
            DEEP_COPY_CALLBACKS         = 1<<11,
    


        DEEP_COPY_USERDATA          = 1<<12,
            DEEP_COPY_ALL               = 
0x7FFFFFFF
        };
定义了一个枚举,可以进行浅拷贝,以上内容的深拷贝。
来看看它是怎么实现拷贝的,
定义了很多的operator()方法,CopyFlags _flags;代表着CopyOp可以拷贝的内容。
在CopyOp.cpp文件中定义了一个宏
#define COPY_OP( TYPE, FLAG ) \
TYPE* CopyOp::operator() (const TYPE* obj) const \
{ \
    if 

(obj && _flags&FLAG) \
        return osg::clone(obj, *this); \
    else \
        return 
const_cast<TYPE*>(obj); \


用于类型的拷贝,下面还分别定义了Referenced、StateAttribute、NodeCallback的拷贝,
但是实现的内容大体相同。看看这个宏吧:
如果参数有效,并且CopyOp可以拷贝,则对指定的类型进行osg::clone(obj, *this);操作,否则直接返
回类型的指针。
这里说一下const_cast,就是一个类型的转换,但返回的内容不受const限制。
来看看这个osg::clone(obj, *this);
通过这个实现的深拷贝,它的实现在osg::ref_ptr<osg::Object> obj = t->clone(copyop);这句话,这
句话直接指向了指定类型的clone方法。以Node为例,看看Node干了,现了深拷贝。
回到例子中,这个例子就没有其他可以过多说明的了,MyCopyOp继承CopyOp,打印出拷贝的内容信息。

相关文章推荐

osgcopy例子

例子演示了osg中的拷贝,深拷贝和浅拷贝。 浅拷贝只拷贝指针,指向同一个内容。 深拷贝,指针和所指向的内容都拷贝。 拷贝的全部内容都在CopyOp中,看看这个类吧: enum Options ...
  • yungis
  • yungis
  • 2013年01月28日 07:45
  • 1112

Java DOM解析XML的几个例子

Sample1: 1:新建XML文档 books.xml,放到项目的根目录下。 Thinking in JAVA ...
  • kalision
  • kalision
  • 2012年04月27日 11:31
  • 20333

一个反射型XSS例子的解析

我们在访问一个网页的时候,在URL后面加上参数,服务器根据请求的参数值构造不同的HTML返回。 如http://localhost:8080/prjWebSec/xss/reflectedXSS.js...
  • kkdelta
  • kkdelta
  • 2013年12月17日 15:43
  • 17286

[原]as3 flash web 应用 (1) 批量上传之Adobe官方FileReferenceList例子解析

2010年06月06日 星期日 17:24 搬离写了5年的渣度空间,准备把技术性的文章定在CSDN了。这些都是文章备份。勿怪。。 (鉴于最近有些抓取机器和抄袭者,把标题的【原】字都复制,我...

高效解析json例子,Jackson框架

Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。 前面有介绍过json-lib这个框架,在线博文:http://www.cnbl...

高效解析json例子,Jackson框架

Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。 前面有介绍过json-lib这个框架,在线博文:http://www.cn...

Qt简单的解析Json数据例子(一)

要解析的json的格式为:{ "rootpath": "001", "usernum": 111, "childdep": [ { "d...

TensorFlow的卷积神经网络例子解析

TensorFlow教程地址:https://www.tensorflow.org/tutorials/mnist/pros/  讲的是经典的机器学习问题MNIST。  使用卷积神经网络进行训练。...

深度学习BP算法 BackPropagation以及详细例子解析

反向传播算法是多层神经网络的训练中举足轻重的算法,本文着重讲解方向传播算法的原理和推导过程。因此对于一些基本的神经网络的知识,本文不做介绍。在理解反向传播算法前,先要理解神经网络中的前馈神经网络算法。...

Java解析证书的例子(包括基本项目、扩展项目)

import java.io.*;import org.bouncycastle.asn1.*;import org.bouncycastle.asn1.util.*;import org.bounc...
  • jinhill
  • jinhill
  • 2011年06月22日 18:09
  • 5057
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OSGCopy例子解析
举报原因:
原因补充:

(最多只允许输入30个字)