#pragma once #include #include #include "effects/ElectricWave.h" class DrawDecorate : public ElectricWave { public: explicit DrawDecorate(ElectricWave* pElectricWave); virtual ~DrawDecorate(void); public: virtual void InitDrawable(void); // 获得渲染体 virtual void GetDrawable(osg::Geode* pGeode); // 设置颜色数组 virtual void SetColorArray(const osg::Vec4Array* pColorArray); // 获得颜色数组 virtual const osg::Vec4Array* GetColorArray( void) const { return (colorArray_); } // 设置渲染模式 virtual inline void SetWireframe(bool bWireframe) { wireframe_ = bWireframe;} inline bool GetWireframe(void) const { return (wireframe_); } // 获得渲染体 virtual osg::Drawable* GetDrawable(void); // 更新 virtual void UpdataDrawable(void); // 是否为内部渲染 void EnableIn(bool bIn) { in_ = bIn; } // 获得是否为内部渲染 bool IsEnableIn(void) const { return (in_); } public: // 显示开关 virtual void SetState(bool bOpened); // 获得开关状态 virtual bool GetState(void) const { return (state_); } protected: // 设置渲染体 virtual void AddDrawable(osg::Drawable* pDrawable); // 创建渲染体 virtual osg::Drawable* CreateDrawable(void); // 获得顶点法线 virtual void SetNormal(osg::Geometry* pDrawable); // 颜色绑定形式 virtual osg::Geometry::AttributeBinding GetColorBinding(void); // 获得颜色 virtual osg::Vec4Array* GetColorArrays(void) ; // 设置属性 virtual void SetStateSet(osg::StateSet* pStateSet) ; // 获得顶点数组 virtual osg::Vec3dArray* GetVertexArrays(void) = 0; // 获得渲染体 //virtual osg::PrimitiveSet* GetPrimitiveSet(int nStart, int nCount) = 0; virtual void CreatePrimitiveSet(osg::Geometry* pGeometry, int nStart, int nCount) = 0; // 强制重绘数据 virtual void ForceDraw(void) { forceDraw_ = true; } // 强制重新设置颜色 virtual void ForceColor(void) { forceColors_ = true; } // 强制重新设置渲染方式 virtual void ForceDrawStyle(void) { forceDrawStyle_ = true; } private: ElectricWave* electricWave_; osg::Drawable* drawable_; bool create_; osg::Vec4Array* colorArray_; bool wireframe_; bool forceDraw_; bool forceColors_; bool forceDrawStyle_; bool state_; bool in_; };