87 lines
2.2 KiB
C++
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;
|
|
};
|
|
|