leocad/common/pieceinf.h

118 lines
2.8 KiB
C
Raw Normal View History

2011-09-07 23:06:51 +02:00
#ifndef _PIECEINF_H_
#define _PIECEINF_H_
#include <stdio.h>
2012-06-07 02:08:59 +02:00
#include "lc_math.h"
2014-04-23 16:53:43 +02:00
#include "lc_array.h"
#include "lc_mesh.h"
2011-09-07 23:06:51 +02:00
#define LC_PIECE_HAS_DEFAULT 0x01 // Piece has triangles using the default color
#define LC_PIECE_HAS_SOLID 0x02 // Piece has triangles using a solid color
#define LC_PIECE_HAS_TRANSLUCENT 0x04 // Piece has triangles using a translucent color
#define LC_PIECE_HAS_LINES 0x08 // Piece has lines
2012-11-08 05:05:52 +01:00
#define LC_PIECE_PLACEHOLDER 0x10 // Placeholder for a piece not in the library
#define LC_PIECE_CACHED 0x20 // Piece is saved in the library cache
2014-12-24 16:52:52 +01:00
#define LC_PIECE_MODEL 0x40 // Piece if a model
2011-09-07 23:06:51 +02:00
#define LC_PIECE_NAME_LEN 256
class PieceInfo
{
public:
PieceInfo();
~PieceInfo();
2011-09-07 23:06:51 +02:00
2014-12-26 18:09:11 +01:00
QString GetSaveID() const;
2012-10-12 01:55:55 +02:00
int AddRef()
{
mRefCount++;
if (mRefCount == 1)
Load();
return mRefCount;
}
int Release()
{
mRefCount--;
if (!mRefCount)
Unload();
return mRefCount;
}
void SetZipFile(int ZipFileType, int ZipFileIndex)
{
mZipFileType = ZipFileType;
mZipFileIndex = ZipFileIndex;
}
2011-09-07 23:06:51 +02:00
bool IsPatterned() const
{
const char* Name = m_strName;
while (*Name)
{
if (*Name < '0' || *Name > '9')
break;
Name++;
}
if (*Name == 'P')
return true;
return false;
}
bool IsSubPiece() const
{
return (m_strDescription[0] == '~');
}
2012-06-07 00:34:38 +02:00
lcVector3 GetCenter() const
2011-09-07 23:06:51 +02:00
{
2012-06-07 00:34:38 +02:00
return lcVector3((m_fDimensions[0] + m_fDimensions[3]) * 0.5f,
(m_fDimensions[1] + m_fDimensions[4]) * 0.5f,
(m_fDimensions[2] + m_fDimensions[5]) * 0.5f);
2011-09-07 23:06:51 +02:00
}
// Operations
void ZoomExtents(float Fov, float Aspect, float* EyePos = NULL) const;
void RenderPiece(int nColor);
2014-12-24 16:52:52 +01:00
void AddRenderMeshes(lcScene& Scene, const lcMatrix44& WorldMatrix, int ColorIndex, bool Focused, bool Selected);
void AddRenderMeshes(const lcMatrix44& ViewMatrix, const lcMatrix44& WorldMatrix, int ColorIndex, bool Focused, bool Selected, lcArray<lcRenderMesh>& OpaqueMeshes, lcArray<lcRenderMesh>& TranslucentMeshes);
2011-09-07 23:06:51 +02:00
void CreatePlaceholder(const char* Name);
2011-09-07 23:06:51 +02:00
2014-12-24 16:52:52 +01:00
void SetModel(lcModel* Model);
bool IncludesModel(const lcModel* Model) const;
2014-12-26 16:44:46 +01:00
bool MinIntersectDist(const lcMatrix44& WorldMatrix, const lcVector3& WorldStart, const lcVector3& WorldEnd, float& MinDistance) const;
bool BoxTest(const lcMatrix44& WorldMatrix, const lcVector4 Planes[6]) const;
2014-12-30 17:30:12 +01:00
void GetPartsList(int DefaultColorIndex, lcArray<lcPartsListEntry>& PartsList) const;
void GetModelParts(const lcMatrix44& WorldMatrix, int DefaultColorIndex, lcArray<lcModelPartsEntry>& ModelParts) const;
2014-12-24 16:52:52 +01:00
2011-09-07 23:06:51 +02:00
public:
2012-04-14 01:41:58 +02:00
lcMesh* mMesh;
2011-09-07 23:06:51 +02:00
// Attributes
char m_strName[LC_PIECE_NAME_LEN];
2012-09-29 02:16:43 +02:00
char m_strDescription[128];
2011-09-07 23:06:51 +02:00
float m_fDimensions[6];
int mZipFileType;
int mZipFileIndex;
lcuint32 mFlags;
2011-09-07 23:06:51 +02:00
protected:
2012-10-12 01:55:55 +02:00
int mRefCount;
2014-12-24 16:52:52 +01:00
lcModel* mModel;
2011-09-07 23:06:51 +02:00
2012-10-12 01:55:55 +02:00
void Load();
void Unload();
2011-09-07 23:06:51 +02:00
};
#endif // _PIECEINF_H_