📄 dxfrenderer.cpp
字号:
/////////////////////////////////////////////////////////////////////////////// Name: dxfrenderer.cpp// Purpose: DXF reader and renderer// Author: Sandro Sigala// Modified by:// Created: 2005-11-10// RCS-ID: $Id: dxfrenderer.cpp,v 1.5 2006/11/10 15:16:02 VZ 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 __DARWIN__ #include <OpenGL/glu.h>#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 valuesstatic 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 colourinline 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 constructorDXFRenderer::DXFRenderer(){ m_loaded = false;}// DXFReader destructorDXFRenderer::~DXFRenderer(){ Clear();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -