79 lines
1.6 KiB
C++
79 lines
1.6 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: dxfrenderer.h
|
|
// Purpose: DXF reader and renderer
|
|
// Author: Sandro Sigala
|
|
// Modified by:
|
|
// Created: 2005-11-10
|
|
// Copyright: (c) Sandro Sigala
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _DXFRENDERER_H_
|
|
#define _DXFRENDERER_H_
|
|
|
|
struct DXFVector
|
|
{
|
|
DXFVector() { x = y = z = 0.0f; }
|
|
DXFVector(float _x, float _y, float _z) { x = _x; y = _y; z = _z; }
|
|
float x, y, z;
|
|
};
|
|
|
|
struct DXFEntity
|
|
{
|
|
enum Type { Line, Face } type;
|
|
int colour;
|
|
};
|
|
|
|
struct DXFLine: public DXFEntity
|
|
{
|
|
DXFLine() { type = Line; }
|
|
DXFVector v0;
|
|
DXFVector v1;
|
|
};
|
|
|
|
struct DXFFace: public DXFEntity
|
|
{
|
|
DXFFace() { type = Face; }
|
|
void CalculateNormal();
|
|
DXFVector v0;
|
|
DXFVector v1;
|
|
DXFVector v2;
|
|
DXFVector v3;
|
|
DXFVector n; // normal
|
|
};
|
|
|
|
struct DXFLayer
|
|
{
|
|
DXFLayer() { colour = -1; }
|
|
wxString name;
|
|
int colour;
|
|
};
|
|
|
|
WX_DECLARE_LIST(DXFEntity, DXFEntityList);
|
|
WX_DECLARE_LIST(DXFLayer, DXFLayerList);
|
|
|
|
class DXFRenderer
|
|
{
|
|
public:
|
|
DXFRenderer();
|
|
~DXFRenderer();
|
|
|
|
void Clear();
|
|
bool Load(wxInputStream& stream);
|
|
bool IsOk() const { return m_loaded; }
|
|
void Render() const;
|
|
|
|
private:
|
|
bool ParseHeader(wxInputStream& stream);
|
|
bool ParseTables(wxInputStream& stream);
|
|
bool ParseEntities(wxInputStream& stream);
|
|
int GetLayerColour(const wxString& layer) const;
|
|
void NormalizeEntities();
|
|
|
|
bool m_loaded;
|
|
DXFLayerList m_layers;
|
|
DXFEntityList m_entities;
|
|
};
|
|
|
|
#endif // !_DXFRENDERER_H_
|