⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxfrenderer.cpp

📁 Wxpython Implemented on Windows CE, Source code
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////////
// Name:        dxfrenderer.cpp
// Purpose:     DXF reader and renderer
// Author:      Sandro Sigala
// Modified by:
// Created:     2005-11-10
// RCS-ID:      $Id: dxfrenderer.cpp,v 1.3 2006/01/26 19:06:04 ABX Exp $
// Copyright:   (c) Sandro Sigala
// Licence:     wxWindows licence
/////////////////////////////////////////////////////////////////////////////

// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"

#ifdef __BORLANDC__
#pragma hdrstop
#endif

#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif

#include "wx/wfstream.h"
#include "wx/txtstrm.h"

#if !wxUSE_GLCANVAS
    #error "OpenGL required: set wxUSE_GLCANVAS to 1 and rebuild the library"
#endif

#ifdef __WXMAC__
#  ifdef __DARWIN__
#    include <OpenGL/glu.h>
#  else
#    include <glu.h>
#  endif
#else
#  include <GL/glu.h>
#endif

#include "dxfrenderer.h"

#include "wx/listimpl.cpp"
WX_DEFINE_LIST(DXFEntityList)
WX_DEFINE_LIST(DXFLayerList)

// Conversion table from AutoCAD ACI colours to RGB values
static const struct { unsigned char r, g, b; } aci_to_rgb[256] = {
/*   0 */ 255, 255, 255,
/*   1 */ 255,   0,   0,
/*   2 */ 255, 255,   0,
/*   3 */   0, 255,   0,
/*   4 */   0, 255, 255,
/*   5 */   0,   0, 255,
/*   6 */ 255,   0, 255,
/*   7 */ 255, 255, 255,
/*   8 */ 128, 128, 128,
/*   9 */ 192, 192, 192,
/*  10 */ 255,   0,   0,
/*  11 */ 255, 127, 127,
/*  12 */ 204,   0,   0,
/*  13 */ 204, 102, 102,
/*  14 */ 153,   0,   0,
/*  15 */ 153,  76,  76,
/*  16 */ 127,   0,   0,
/*  17 */ 127,  63,  63,
/*  18 */  76,   0,   0,
/*  19 */  76,  38,  38,
/*  20 */ 255,  63,   0,
/*  21 */ 255, 159, 127,
/*  22 */ 204,  51,   0,
/*  23 */ 204, 127, 102,
/*  24 */ 153,  38,   0,
/*  25 */ 153,  95,  76,
/*  26 */ 127,  31,   0,
/*  27 */ 127,  79,  63,
/*  28 */  76,  19,   0,
/*  29 */  76,  47,  38,
/*  30 */ 255, 127,   0,
/*  31 */ 255, 191, 127,
/*  32 */ 204, 102,   0,
/*  33 */ 204, 153, 102,
/*  34 */ 153,  76,   0,
/*  35 */ 153, 114,  76,
/*  36 */ 127,  63,   0,
/*  37 */ 127,  95,  63,
/*  38 */  76,  38,   0,
/*  39 */  76,  57,  38,
/*  40 */ 255, 191,   0,
/*  41 */ 255, 223, 127,
/*  42 */ 204, 153,   0,
/*  43 */ 204, 178, 102,
/*  44 */ 153, 114,   0,
/*  45 */ 153, 133,  76,
/*  46 */ 127,  95,   0,
/*  47 */ 127, 111,  63,
/*  48 */  76,  57,   0,
/*  49 */  76,  66,  38,
/*  50 */ 255, 255,   0,
/*  51 */ 255, 255, 127,
/*  52 */ 204, 204,   0,
/*  53 */ 204, 204, 102,
/*  54 */ 153, 153,   0,
/*  55 */ 153, 153,  76,
/*  56 */ 127, 127,   0,
/*  57 */ 127, 127,  63,
/*  58 */  76,  76,   0,
/*  59 */  76,  76,  38,
/*  60 */ 191, 255,   0,
/*  61 */ 223, 255, 127,
/*  62 */ 153, 204,   0,
/*  63 */ 178, 204, 102,
/*  64 */ 114, 153,   0,
/*  65 */ 133, 153,  76,
/*  66 */  95, 127,   0,
/*  67 */ 111, 127,  63,
/*  68 */  57,  76,   0,
/*  69 */  66,  76,  38,
/*  70 */ 127, 255,   0,
/*  71 */ 191, 255, 127,
/*  72 */ 102, 204,   0,
/*  73 */ 153, 204, 102,
/*  74 */  76, 153,   0,
/*  75 */ 114, 153,  76,
/*  76 */  63, 127,   0,
/*  77 */  95, 127,  63,
/*  78 */  38,  76,   0,
/*  79 */  57,  76,  38,
/*  80 */  63, 255,   0,
/*  81 */ 159, 255, 127,
/*  82 */  51, 204,   0,
/*  83 */ 127, 204, 102,
/*  84 */  38, 153,   0,
/*  85 */  95, 153,  76,
/*  86 */  31, 127,   0,
/*  87 */  79, 127,  63,
/*  88 */  19,  76,   0,
/*  89 */  47,  76,  38,
/*  90 */   0, 255,   0,
/*  91 */ 127, 255, 127,
/*  92 */   0, 204,   0,
/*  93 */ 102, 204, 102,
/*  94 */   0, 153,   0,
/*  95 */  76, 153,  76,
/*  96 */   0, 127,   0,
/*  97 */  63, 127,  63,
/*  98 */   0,  76,   0,
/*  99 */  38,  76,  38,
/* 100 */   0, 255,  63,
/* 101 */ 127, 255, 159,
/* 102 */   0, 204,  51,
/* 103 */ 102, 204, 127,
/* 104 */   0, 153,  38,
/* 105 */  76, 153,  95,
/* 106 */   0, 127,  31,
/* 107 */  63, 127,  79,
/* 108 */   0,  76,  19,
/* 109 */  38,  76,  47,
/* 110 */   0, 255, 127,
/* 111 */ 127, 255, 191,
/* 112 */   0, 204, 102,
/* 113 */ 102, 204, 153,
/* 114 */   0, 153,  76,
/* 115 */  76, 153, 114,
/* 116 */   0, 127,  63,
/* 117 */  63, 127,  95,
/* 118 */   0,  76,  38,
/* 119 */  38,  76,  57,
/* 120 */   0, 255, 191,
/* 121 */ 127, 255, 223,
/* 122 */   0, 204, 153,
/* 123 */ 102, 204, 178,
/* 124 */   0, 153, 114,
/* 125 */  76, 153, 133,
/* 126 */   0, 127,  95,
/* 127 */  63, 127, 111,
/* 128 */   0,  76,  57,
/* 129 */  38,  76,  66,
/* 130 */   0, 255, 255,
/* 131 */ 127, 255, 255,
/* 132 */   0, 204, 204,
/* 133 */ 102, 204, 204,
/* 134 */   0, 153, 153,
/* 135 */  76, 153, 153,
/* 136 */   0, 127, 127,
/* 137 */  63, 127, 127,
/* 138 */   0,  76,  76,
/* 139 */  38,  76,  76,
/* 140 */   0, 191, 255,
/* 141 */ 127, 223, 255,
/* 142 */   0, 153, 204,
/* 143 */ 102, 178, 204,
/* 144 */   0, 114, 153,
/* 145 */  76, 133, 153,
/* 146 */   0,  95, 127,
/* 147 */  63, 111, 127,
/* 148 */   0,  57,  76,
/* 149 */  38,  66,  76,
/* 150 */   0, 127, 255,
/* 151 */ 127, 191, 255,
/* 152 */   0, 102, 204,
/* 153 */ 102, 153, 204,
/* 154 */   0,  76, 153,
/* 155 */  76, 114, 153,
/* 156 */   0,  63, 127,
/* 157 */  63,  95, 127,
/* 158 */   0,  38,  76,
/* 159 */  38,  57,  76,
/* 160 */   0,  63, 255,
/* 161 */ 127, 159, 255,
/* 162 */   0,  51, 204,
/* 163 */ 102, 127, 204,
/* 164 */   0,  38, 153,
/* 165 */  76,  95, 153,
/* 166 */   0,  31, 127,
/* 167 */  63,  79, 127,
/* 168 */   0,  19,  76,
/* 169 */  38,  47,  76,
/* 170 */   0,   0, 255,
/* 171 */ 127, 127, 255,
/* 172 */   0,   0, 204,
/* 173 */ 102, 102, 204,
/* 174 */   0,   0, 153,
/* 175 */  76,  76, 153,
/* 176 */   0,   0, 127,
/* 177 */  63,  63, 127,
/* 178 */   0,   0,  76,
/* 179 */  38,  38,  76,
/* 180 */  63,   0, 255,
/* 181 */ 159, 127, 255,
/* 182 */  51,   0, 204,
/* 183 */ 127, 102, 204,
/* 184 */  38,   0, 153,
/* 185 */  95,  76, 153,
/* 186 */  31,   0, 127,
/* 187 */  79,  63, 127,
/* 188 */  19,   0,  76,
/* 189 */  47,  38,  76,
/* 190 */ 127,   0, 255,
/* 191 */ 191, 127, 255,
/* 192 */ 102,   0, 204,
/* 193 */ 153, 102, 204,
/* 194 */  76,   0, 153,
/* 195 */ 114,  76, 153,
/* 196 */  63,   0, 127,
/* 197 */  95,  63, 127,
/* 198 */  38,   0,  76,
/* 199 */  57,  38,  76,
/* 200 */ 191,   0, 255,
/* 201 */ 223, 127, 255,
/* 202 */ 153,   0, 204,
/* 203 */ 178, 102, 204,
/* 204 */ 114,   0, 153,
/* 205 */ 133,  76, 153,
/* 206 */  95,   0, 127,
/* 207 */ 111,  63, 127,
/* 208 */  57,   0,  76,
/* 209 */  66,  38,  76,
/* 210 */ 255,   0, 255,
/* 211 */ 255, 127, 255,
/* 212 */ 204,   0, 204,
/* 213 */ 204, 102, 204,
/* 214 */ 153,   0, 153,
/* 215 */ 153,  76, 153,
/* 216 */ 127,   0, 127,
/* 217 */ 127,  63, 127,
/* 218 */  76,   0,  76,
/* 219 */  76,  38,  76,
/* 220 */ 255,   0, 191,
/* 221 */ 255, 127, 223,
/* 222 */ 204,   0, 153,
/* 223 */ 204, 102, 178,
/* 224 */ 153,   0, 114,
/* 225 */ 153,  76, 133,
/* 226 */ 127,   0,  95,
/* 227 */ 127,  63, 111,
/* 228 */  76,   0,  57,
/* 229 */  76,  38,  66,
/* 230 */ 255,   0, 127,
/* 231 */ 255, 127, 191,
/* 232 */ 204,   0, 102,
/* 233 */ 204, 102, 153,
/* 234 */ 153,   0,  76,
/* 235 */ 153,  76, 114,
/* 236 */ 127,   0,  63,
/* 237 */ 127,  63,  95,
/* 238 */  76,   0,  38,
/* 239 */  76,  38,  57,
/* 240 */ 255,   0,  63,
/* 241 */ 255, 127, 159,
/* 242 */ 204,   0,  51,
/* 243 */ 204, 102, 127,
/* 244 */ 153,   0,  38,
/* 245 */ 153,  76,  95,
/* 246 */ 127,   0,  31,
/* 247 */ 127,  63,  79,
/* 248 */  76,   0,  19,
/* 249 */  76,  38,  47,
/* 250 */  51,  51,  51,
/* 251 */  91,  91,  91,
/* 252 */ 132, 132, 132,
/* 253 */ 173, 173, 173,
/* 254 */ 214, 214, 214,
/* 255 */ 255, 255, 255,
};

inline DXFVector Cross(const DXFVector& v1, const DXFVector& v2)
{
    return DXFVector(v1.y*v2.z - v1.z*v2.y, v1.z*v2.x - v1.x*v2.z, v1.x*v2.y - v1.y*v2.x);
}

void DXFFace::CalculateNormal()
{
    DXFVector v01, v02;
    v01.x = v0.x - v1.x;
    v01.y = v0.y - v1.y;
    v01.z = v0.z - v1.z;
    v02.x = v0.x - v2.x;
    v02.y = v0.y - v2.y;
    v02.z = v0.z - v2.z;
    n = Cross(v01, v02);
    float mod = sqrt(n.x*n.x + n.y*n.y + n.z*n.z);
    n.x /= mod;
    n.y /= mod;
    n.z /= mod;
}

// convert an AutoCAD ACI colour to wxWidgets RGB colour
inline wxColour ACIColourToRGB(int col)
{
    wxASSERT(col >= 0 && col <= 255);
    return wxColour(aci_to_rgb[col].r, aci_to_rgb[col].g, aci_to_rgb[col].b);
}

// DXFReader constructor
DXFRenderer::DXFRenderer()
{
    m_loaded = false;
}

// DXFReader destructor
DXFRenderer::~DXFRenderer()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -