|
本帖最后由 nononono 于 2014-5-9 17:56 编辑
请教高手
- case osgGA::GUIEventAdapter::DOUBLECLICK:
- {
- if(ea.getButton()==1){
- osgUtil::LineSegmentIntersector::Intersections hits;
- if(node!=NULL){//*************************************//
- extractor.setColor(0.0f, 0.0f, 0.0f);
- node->accept(extractor);
- }
- if(view->computeIntersections(ea.getX(),ea.getY(),hits)){
- osgUtil::LineSegmentIntersector::Intersection intersection = *hits.begin();
- osg::NodePath& nodePath = intersection.nodePath;
- node = (nodePath.size()>=1)?nodePath[nodePath.size()-1]:0;
- if(parent.get()&&node.get()){
- extractor.setColor(1.0f, 0.0f, 0.0f);
- node->accept(extractor);
- }
- }
- }
- }
- break;
复制代码
想要实现这样一个功能:1.双击选定一个模型的时候改变他的颜色。
2.如果选定这个模型之前选择过另一个模型,那么把这个已经选择过的模型颜色换成黑色。
3.如果双击没有选中任何模型,则把之前选中的变黑。
使用nodevisitor来改变模型的颜色,代码中的extractor是nodevisitor的一个实例。
现在的状况是,功能1和3都可以完成,但是2却不能实现。
在已经选定一个模型的情况下,如果再选一个新的,那么新选的会变色,而旧选的不会变黑。
感觉问题应该就出在很简单的地方,但就是搞不出来。node指针在双击求交成功之后,确确实实是转而指向了另一个模型。为什么实现功能3的时候星号标记处的代码能工作,但是实现功能2的时候就不起作用呢。 |
|