查看: 1723|回复: 10

Vec3Array->erase(iter);?????

[复制链接]

该用户从未签到

发表于 2012-9-6 09:10:25 | 显示全部楼层 |阅读模式
不知道有木有人知道下面的代码为什么会错误,可能错误在Node->asGeode()的转换上,但是我不知道为什么,希望各位指点一二。 TextErase.cpp (1.63 KB, 下载次数: 0)

该用户从未签到

 楼主| 发表于 2012-9-6 09:45:51 | 显示全部楼层
int main()
{
        osg::ref_ptr<osg::Node>model=osgDB::readNodeFile("lz.osg");
        osg::ref_ptr<osg::Group>root=new osg::Group;
        osg::ref_ptr<osgViewer::Viewer>viewer=new osgViewer::Viewer;
        //unsigned int num=model->asGeode()->getNumDrawables();
        for (unsigned int i=0;i<1600;++i)
        {
                osg:rawable* drawable=model->asGeode()->getDrawable(i);
                osg::Vec3Array* vertex=dynamic_cast<osg::Vec3Array*>(drawable->asGeometry()->getVertexArray());
                for (osg::Vec3Array::iterator iter=vertex->begin();iter!=vertex->end();++iter)
                {
                        if (iter->x()<0&&iter->y()<0)
                        {
                                vertex->erase(iter);
                        }
                }
        }
       
        root->addChild(model.get());

        viewer->addEventHandler(new osgGA::StateSetManipulator(viewer->getCamera()->getOrCreateStateSet()));

        viewer->addEventHandler(new osgViewer::WindowSizeHandler);
        viewer->addEventHandler(new osgViewer::StatsHandler);

        osgUtil::Optimizer optimizer;
        optimizer.optimize(root.get());

        viewer->setSceneData(root.get());

        viewer->realize();

        viewer->run();

        return 0;
}
顶下,不要沉了

该用户从未签到

发表于 2012-9-6 10:58:34 | 显示全部楼层
stl 析构不能那样做

该用户从未签到

 楼主| 发表于 2012-9-6 11:07:27 | 显示全部楼层
liuzhiyu123 发表于 2012-9-6 10:58
stl 析构不能那样做

请问能具体一点儿讲么?是我的迭代器不对?但是中断的位置是Node->asGeode()呀

该用户从未签到

 楼主| 发表于 2012-9-6 16:32:05 | 显示全部楼层
Berly 发表于 2012-9-6 11:07
请问能具体一点儿讲么?是我的迭代器不对?但是中断的位置是Node->asGeode()呀

怎么木有人回呢,太新手了是不是听不懂大神说话啊

该用户从未签到

发表于 2012-9-6 16:50:52 | 显示全部楼层
  vertex->erase(iter);
iter++;

该用户从未签到

发表于 2012-9-6 17:04:03 | 显示全部楼层
for (unsigned int i=0;i<1600;++i)
        {
                osg:rawable* drawable=model->asGeode()->getDrawable(i);
                osg::Vec3Array* vertex=dynamic_cast<osg::Vec3Array*>(drawable->asGeometry()->getVertexArray());
                for (osg::Vec3Array::iterator iter=vertex->begin();iter!=vertex->end();)
                {
                        if (iter->x()<0&&iter->y()<0)
                        {
                                vertex->erase(iter);
                        }
                        else ++iter;  //erase以后会自动指向下一个地址,只有在不erase才++iter;
                }
        }

该用户从未签到

 楼主| 发表于 2012-9-6 17:44:01 | 显示全部楼层
彤心 发表于 2012-9-6 17:04
for (unsigned int i=0;iasGeode()->getDrawable(i);
                osg::Vec3Array* vertex=dynamic_ca ...

虽然我没有弄出来,不过还是谢谢了,不弄这个了,都好久了也没有实现,算了……

该用户从未签到

 楼主| 发表于 2012-9-6 17:44:58 | 显示全部楼层
StackSnow 发表于 2012-9-6 16:50
vertex->erase(iter);
iter++;

谢谢回复……

该用户从未签到

发表于 2012-9-7 08:27:33 | 显示全部楼层
遇到问题不要退缩

该用户从未签到

发表于 2012-9-7 08:39:29 | 显示全部楼层
就是一个vector简单的删除问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表