DYTSrouce/src/effects/DrawDecorate.h
2025-01-04 12:12:51 +08:00

83 lines
2.1 KiB
C++

#pragma once
#include <osg/Geometry>
#include <osg/Vec3d>
#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_;
};