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

87 lines
2.2 KiB
C++

#pragma once
#include <osg/Matrix>
#include <osg/Array>
#include <osg/Geometry>
#include "effects/DrawDecorate.h"
class TrackWave : public DrawDecorate {
public:
explicit TrackWave(ElectricWave* pElectricWave);
virtual ~TrackWave(void);
// 设置起始点和终止点
virtual void SetStartAndEnd(const osg::Vec3d& vStart, const osg::Vec3d& vEnd);
// 设置起始点和终止点
void GetStartAndEnd(osg::Vec3d& vStart, osg::Vec3d& vEnd);
// 设置半径
void SetRadius(const double fTopRadius, const double fBottonRadius);
// 获得半径
void GetRadius(double& fTopRadius, double& fBottonRadius);
// 设置环高度
void SetLoopHeight(const double fLoopHeight);
// 获得环高度
double GetLoopHeight(void) const { return (m_fLoopHeight); }
// 设置间隔高度
void SetSpaceHeight(const double fSpaceHeight);
// 获得间隔高度
double GetSpaceHeight(void) { return (m_fSpaceHeight); }
// 设置更新速度
void SetUpdateSpeed(const double fSpeed);
// 获得更新速度
double GetUpdateSpeed(void) const {return (m_fUpdateValue);}
// 是否是放大波
void SetWaveStyle(bool bZ);
// 获得是否放大波
bool GetWaveSytle(void) const;
protected:
// 创建渲染体
virtual osg::Drawable* CreateDrawable(void);
// 获得顶点数组
virtual osg::Vec3dArray* GetVertexArrays(void);
// 获得渲染体
// virtual osg::PrimitiveSet* GetPrimitiveSet(int nStart, int nCount);
virtual void CreatePrimitiveSet(osg::Geometry* pGeometry, int nStart, int nCount);
public:
// 更新
virtual void UpdataDrawable(void);
protected:
// 创建圆环
virtual void CreateSingleVertex(double index, osg::Vec3dArray* pVertexArray);
// 计算顶部半径
double CreateTopRadius(double fHeight);
// 计算底部半径
double CreateBottonRadius(double fHeight);
// 获取两点间的距离
double GetDis(void);
// 计算半径斜率
double ComputeDRadius(void);
// 获得环的个数
int GetCount(void);
protected:
double m_fHeight; // 高度
double m_fBottomRadius; // 底部半径
double m_fTopRadius; // 顶部半径
double m_fSpaceHeight; // 间隔高度
double m_fLoopHeight; // 环高度
double m_fdRadius; // 半径变化率
double m_fdHeight; // 高度变化率
double m_fUpdateValue; // 更新速度
osg::Vec3d m_vStart; // 起始点
osg::Vec3d m_vEnd; // 终止点
int m_nCount; // 环的个数
osg::Matrix m_matrix; // 用于计算旋转
bool m_bZ;
friend class CUpdataTrackWave;
};