mirror of
https://github.com/leozide/leocad
synced 2024-12-28 22:23:35 +01:00
127 lines
3.1 KiB
C++
Executable file
127 lines
3.1 KiB
C++
Executable file
#ifndef _CURVE_H_
|
|
#define _CURVE_H_
|
|
|
|
#include "object.h"
|
|
#include "opengl.h"
|
|
#include "array.h"
|
|
|
|
class Curve;
|
|
class CurvePoint;
|
|
class PieceInfo;
|
|
|
|
//#define LC_CURVE_POINT_HIDDEN 0x01
|
|
#define LC_CURVE_POINT_SELECTED 0x02
|
|
#define LC_CURVE_POINT_FOCUSED 0x04
|
|
#define LC_CURVE_POINT_ARROW1_FOCUSED 0x08
|
|
#define LC_CURVE_POINT_ARROW2_FOCUSED 0x10
|
|
#define LC_CURVE_POINT_CONTINUOUS 0x20
|
|
|
|
typedef enum
|
|
{
|
|
LC_CURVE_POINT_KEY_POSITION,
|
|
LC_CURVE_POINT_KEY_DIRECTION1,
|
|
LC_CURVE_POINT_KEY_DIRECTION2,
|
|
LC_CURVE_POINT_KEY_ANGLE,
|
|
LC_CURVE_POINT_KEY_COUNT
|
|
} LC_CURVE_POINT_KEY_TYPES;
|
|
|
|
class CurvePoint : public Object
|
|
{
|
|
public:
|
|
// constructors / destructor
|
|
CurvePoint(Curve *pParent);
|
|
CurvePoint(Curve *pParent, const float *pos, const float *dir);
|
|
virtual ~CurvePoint();
|
|
|
|
// object functions
|
|
bool FileLoad(lcFile& file);
|
|
void FileSave(lcFile& file) const;
|
|
void MinIntersectDist(lcClickLine* ClickLine);
|
|
bool IntersectsVolume(const lcVector4 Planes[6])
|
|
{ return false; }
|
|
void UpdatePosition(unsigned short nTime, bool bAnimation);
|
|
void Move(unsigned short nTime, bool bAnimation, bool bAddKey, float dx, float dy, float dz);
|
|
void Render();
|
|
void Select(bool bSelecting, bool bFocus, bool bMultiple);
|
|
|
|
// query functions
|
|
Curve* GetParent() const
|
|
{ return m_pParent; }
|
|
const float* GetPosition() const
|
|
{ return m_fPos; }
|
|
const float* GetDirection1() const
|
|
{ return m_fDir1; }
|
|
const float* GetDirection2() const
|
|
{ return m_fDir2; }
|
|
float GetAngle () const
|
|
{ return m_fAngle; }
|
|
|
|
protected:
|
|
void Initialize ();
|
|
|
|
Curve* m_pParent;
|
|
static GLuint m_nArrowList;
|
|
static GLuint m_nSphereList;
|
|
|
|
unsigned char m_nState;
|
|
|
|
// temporary
|
|
float m_fPos[3];
|
|
float m_fDir1[3];
|
|
float m_fDir2[3];
|
|
float m_fAngle;
|
|
|
|
unsigned char m_nLastHit; // FIXME: create arrow objects, ugly hack for now
|
|
};
|
|
|
|
// =============================================================================
|
|
|
|
#define LC_CURVE_HIDDEN 0x01
|
|
#define LC_CURVE_SELECTED 0x02
|
|
#define LC_CURVE_FOCUSED 0x04
|
|
#define LC_CURVE_LOOP 0x10
|
|
#define LC_CURVE_FIXED_SIZE 0x20
|
|
|
|
// all the different types of curved objects
|
|
typedef enum
|
|
{
|
|
LC_CURVE_TYPE_HOSE
|
|
} LC_CURVE_TYPE;
|
|
|
|
class Curve : public Object
|
|
{
|
|
public:
|
|
// constructors / destructor
|
|
Curve ();
|
|
Curve (PieceInfo *pInfo, const float *pos, unsigned char color);
|
|
virtual ~Curve ();
|
|
|
|
// object functions
|
|
bool FileLoad(lcFile& file);
|
|
void FileSave(lcFile& file) const;
|
|
void MinIntersectDist(lcClickLine* ClickLine);
|
|
void UpdatePosition(unsigned short nTime, bool bAnimation);
|
|
void Move(unsigned short nTime, bool bAnimation, bool bAddKey, float dx, float dy, float dz);
|
|
void Render();
|
|
void Select(bool bSelecting, bool bFocus, bool bMultiple);
|
|
|
|
// implementation
|
|
void DeselectOtherPoints(CurvePoint *pSender, bool bFocusOnly);
|
|
|
|
protected:
|
|
void Initialize ();
|
|
void TesselateHose ();
|
|
|
|
LC_CURVE_TYPE m_nCurveType;
|
|
unsigned char m_nState;
|
|
unsigned char m_nColor;
|
|
float m_fLength;
|
|
|
|
float m_fUp0[3];
|
|
|
|
GLuint m_nDisplayList;
|
|
|
|
PtrArray<CurvePoint> m_Points;
|
|
};
|
|
|
|
#endif // _CURVE_H_
|