#ifndef SELECTIONMANAGER_H #define SELECTIONMANAGER_H #include "XJOSGObject/XJOSGObject.h" #include #define HILIGHTCOLOR_TRANSPARENT osg::Vec4(0.7, 0.0, 0.0, 0.5) #define HILIGHTCOLOR_UNTRANSPARENT osg::Vec4(0.7, 0.0, 0.0, 1.0) //此类中管理选中的对象 class SelectionManager : public osg::Referenced { public: SelectionManager(osgViewer::Viewer* pViewer = NULL); ~SelectionManager(); // if the object is not yet in the selection List, it will be added. //otherwise it will not be added. In default, we need to hilight the selected obj; void AddChild(CXJOSGObject* pobj, bool unhilight = false); //remove all childeren void RemoveAllChildren(); //remove obj from list void RemoveChild(CXJOSGObject* pobj); //return the number of selected list int NbSelected(); //return the selected obj by index CXJOSGObject* GetSelectedObj(int index) const; //Hilight selected obj with color void HilightWithColor(CXJOSGObject* pobj, osg::Vec4& color = HILIGHTCOLOR_UNTRANSPARENT); //unlight selected color; void UnHilightObj(CXJOSGObject* pobj); //unselect and unHilight all obj from list void DeSelectSelList(); //set selected obj's visibility in selList void InvisibleSelList(bool visible); //set selected obj's transparency in selList void TransparentSelList(bool transparent); //set selected obj's wireframe in selList void WireframeSelList(bool wireframe); //添加框选网格面片的网格显示对象 void AddToMeshListWithSelectedFaces(CXJOSGObject* pobj); std::vector& GetMeshListsWithSelectedFaces() {return m_MapOfObjWithSelTriangles;} protected: //check if obj is in selected list , if has ,return true, else return false bool Find(const CXJOSGObject* pobj); private: std::vector m_selObjList; //选中对象列表 std::vector m_MapOfObjWithSelTriangles; //有被拾取到网格面片的显示对象 osgViewer::Viewer* m_pViewer; }; #endif