URL
https://opencores.org/ocsvn/orsoc_graphics_accelerator/orsoc_graphics_accelerator/trunk
Subversion Repositories orsoc_graphics_accelerator
Compare Revisions
- This comparison shows the changes necessary to convert path
/orsoc_graphics_accelerator/trunk
- from Rev 5 to Rev 4
- ↔ Reverse comparison
Rev 5 → Rev 4
/sw/drivers/gfx/bare/orgfx.c
File deleted
/sw/drivers/gfx/bare/orgfx_bitmap_font.c
File deleted
/sw/drivers/gfx/bare/orgfx_plus.c
File deleted
/sw/drivers/gfx/bare/orgfx.h
File deleted
/sw/drivers/gfx/bare/orgfx_regs.h
File deleted
/sw/drivers/gfx/bare/orgfx_3d.c
File deleted
/sw/drivers/gfx/bare/orgfx_bitmap_font.h
File deleted
/sw/drivers/gfx/bare/orgfx_vector_font.c
File deleted
/sw/drivers/gfx/bare/orgfx_plus.h
File deleted
/sw/drivers/gfx/bare/orgfx_sw.c
File deleted
/sw/drivers/gfx/bare/orgfx_tileset.c
File deleted
/sw/drivers/gfx/bare/orgfx_3d.h
File deleted
/sw/drivers/gfx/bare/orgfx_debug.h
File deleted
/sw/drivers/gfx/bare/orgfx_vector_font.h
File deleted
/sw/drivers/gfx/bare/orgfx_tileset.h
File deleted
/sw/examples/bare/Bahamut8.png.h
File deleted
/sw/examples/bare/test_font.h
File deleted
/sw/examples/bare/vgatest.c
File deleted
/sw/examples/bare/Bahamut_cc.png.h
File deleted
/sw/examples/bare/interptest.bmp.h
File deleted
/sw/examples/bare/plustest.c
File deleted
/sw/examples/bare/ocgfxmesh.c
File deleted
/sw/examples/bare/demo.c
File deleted
/sw/examples/bare/build.sh
File deleted
/sw/examples/bare/pixtest.png.h
File deleted
/sw/examples/bare/Bahamut.gif.h
File deleted
/sw/examples/bare/drivertest.c
File deleted
/sw/examples/bare/franklin.png.h
File deleted
/sw/examples/bare/cube.obj.h
File deleted
/sw/examples/bare/Makefile
File deleted
/sw/examples/bare/ocgfx3d.c
File deleted
/sw/examples/bare/franklin_font.h
File deleted
/sw/examples/bare/humanoid_tri.obj.h
File deleted
/sw/utils/regger/regger.pro
File deleted
/sw/utils/regger/regger.cpp
File deleted
/sw/utils/regger/Makefile
File deleted
/sw/utils/regger/test.c
File deleted
/sw/utils/regger/regger.h
File deleted
/sw/utils/regger/test.v
File deleted
/sw/utils/regger/main.cpp
File deleted
/sw/utils/fonter/example.txt
File deleted
/sw/utils/fonter/test.ttf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
sw/utils/fonter/test.ttf
Property changes :
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: sw/utils/fonter/font.h
===================================================================
--- sw/utils/fonter/font.h (revision 5)
+++ sw/utils/fonter/font.h (nonexistent)
@@ -1,3317 +0,0 @@
-#ifndef FONT_H
-#define FONT_H
-
-#include "orgfx_vector_font.h"
-
-//Glyph: A
-int glyph_A_index = 65;
-int glyph_A_advance_x = 814;
-int glyph_A_advance_y = 0;
-int glyph_A_size = 29;
-Bezier_write glyph_A[] = {
-{{793, -148}, {793, -88}, {788, -55},1 },
-{{788, -55}, {778, 4}, {725, 4},1 },
-{{725, 4}, {698, 4}, {681, -13},1 },
-{{681, -13}, {664, -31}, {664, -58},1 },
-{{664, -58}, {664, -71}, {666, -97},1 },
-{{669, -136}, {669, -123}, {666, -97},0 },
-{{669, -136}, {669, -145}, {669, -154},1 },
-{{669, -154}, {564, -105}, {408, -105},1 },
-{{408, -105}, {250, -105}, {146, -154},1 },
-{{148, -106}, {146, -138}, {146, -154},0 },
-{{148, -106}, {151, -74}, {151, -58},1 },
-{{151, -58}, {151, -31}, {133, -13},1 },
-{{133, -13}, {116, 4}, {89, 4},1 },
-{{89, 4}, {37, 4}, {28, -55},1 },
-{{28, -55}, {22, -91}, {22, -148},1 },
-{{22, -148}, {22, -341}, {116, -512},1 },
-{{116, -512}, {214, -690}, {375, -787},1 },
-{{375, -787}, {390, -796}, {407, -796},1 },
-{{407, -796}, {425, -796}, {441, -787},1 },
-{{441, -787}, {599, -692}, {700, -512},1 },
-{{700, -512}, {793, -344}, {793, -148},1 },
-{{476, -575}, {505, -547}, {505, -508},0 },
-{{408, -604}, {447, -604}, {476, -575},0 },
-{{339, -576}, {368, -604}, {408, -604},0 },
-{{311, -508}, {311, -548}, {339, -576},0 },
-{{339, -439}, {311, -468}, {311, -508},0 },
-{{408, -411}, {367, -411}, {339, -439},0 },
-{{476, -439}, {448, -411}, {408, -411},0 },
-{{505, -508}, {505, -468}, {476, -439},0 },
-};
-int glyph_A_triangle_size = 39;
-Triangle_write glyph_A_triangles[] = {
-{{148, -106}, {28, -55}, {22, -148}},
-{{148, -106}, {22, -148}, {146, -138}},
-{{22, -148}, {146, -154}, {146, -138}},
-{{22, -148}, {116, -512}, {146, -154}},
-{{146, -154}, {116, -512}, {311, -468}},
-{{116, -512}, {311, -508}, {311, -468}},
-{{116, -512}, {311, -548}, {311, -508}},
-{{339, -576}, {311, -548}, {116, -512}},
-{{375, -787}, {339, -576}, {116, -512}},
-{{368, -604}, {339, -576}, {375, -787}},
-{{368, -604}, {375, -787}, {408, -604}},
-{{408, -604}, {375, -787}, {441, -787}},
-{{441, -787}, {375, -787}, {407, -796}},
-{{408, -604}, {441, -787}, {447, -604}},
-{{476, -575}, {447, -604}, {441, -787}},
-{{441, -787}, {505, -547}, {476, -575}},
-{{441, -787}, {700, -512}, {505, -547}},
-{{505, -508}, {505, -547}, {700, -512}},
-{{505, -468}, {505, -508}, {700, -512}},
-{{669, -154}, {505, -468}, {700, -512}},
-{{669, -154}, {700, -512}, {793, -148}},
-{{669, -136}, {669, -154}, {793, -148}},
-{{669, -123}, {669, -136}, {793, -148}},
-{{788, -55}, {669, -123}, {793, -148}},
-{{666, -97}, {669, -123}, {788, -55}},
-{{664, -58}, {666, -97}, {788, -55}},
-{{788, -55}, {725, 4}, {664, -58}},
-{{725, 4}, {681, -13}, {664, -58}},
-{{476, -439}, {505, -468}, {669, -154}},
-{{448, -411}, {476, -439}, {669, -154}},
-{{448, -411}, {669, -154}, {408, -105}},
-{{408, -105}, {408, -411}, {448, -411}},
-{{367, -411}, {408, -411}, {408, -105}},
-{{367, -411}, {408, -105}, {146, -154}},
-{{146, -154}, {339, -439}, {367, -411}},
-{{146, -154}, {311, -468}, {339, -439}},
-{{28, -55}, {148, -106}, {151, -58}},
-{{151, -58}, {89, 4}, {28, -55}},
-{{133, -13}, {89, 4}, {151, -58}},
-};
-//Glyph: B
-int glyph_B_index = 66;
-int glyph_B_advance_x = 679;
-int glyph_B_advance_y = 0;
-int glyph_B_size = 20;
-Bezier_write glyph_B[] = {
-{{658, -283}, {658, -165}, {575, -82},1 },
-{{575, -82}, {492, 1}, {374, 1},1 },
-{{178, 1}, {106, 1}, {62, -52},1 },
-{{62, -52}, {21, -102}, {21, -175},1 },
-{{21, -175}, {21, -249}, {64, -300},1 },
-{{64, -300}, {107, -351}, {180, -351},1 },
-{{180, -660}, {125, -667}, {125, -721},1 },
-{{125, -721}, {125, -750}, {143, -767},1 },
-{{143, -767}, {162, -784}, {191, -784},1 },
-{{395, -784}, {468, -784}, {521, -734},1 },
-{{521, -734}, {575, -685}, {575, -613},1 },
-{{575, -613}, {575, -558}, {541, -513},1 },
-{{541, -513}, {658, -426}, {658, -283},1 },
-{{434, -647}, {451, -634}, {451, -613},0 },
-{{395, -660}, {417, -660}, {434, -647},0 },
-{{432, -580}, {414, -567}, {393, -567},0 },
-{{451, -613}, {451, -593}, {432, -580},0 },
-{{374, -442}, {451, -442}, {451, -397},0 },
-{{432, -364}, {414, -351}, {393, -351},0 },
-{{451, -397}, {451, -377}, {432, -364},0 },
-};
-int glyph_B_triangle_size = 38;
-Triangle_write glyph_B_triangles[] = {
-{{180, -351}, {62, -52}, {21, -175}},
-{{64, -300}, {180, -351}, {21, -175}},
-{{178, 1}, {62, -52}, {180, -351}},
-{{178, 1}, {180, -351}, {304, -351}},
-{{180, -351}, {304, -442}, {304, -351}},
-{{304, -442}, {180, -351}, {304, -567}},
-{{180, -351}, {180, -660}, {304, -567}},
-{{180, -660}, {304, -660}, {304, -567}},
-{{304, -660}, {180, -660}, {191, -784}},
-{{180, -660}, {125, -721}, {191, -784}},
-{{191, -784}, {125, -721}, {143, -767}},
-{{395, -784}, {304, -660}, {191, -784}},
-{{304, -660}, {395, -784}, {395, -660}},
-{{417, -660}, {395, -660}, {395, -784}},
-{{521, -734}, {417, -660}, {395, -784}},
-{{434, -647}, {417, -660}, {521, -734}},
-{{451, -634}, {434, -647}, {521, -734}},
-{{575, -613}, {451, -634}, {521, -734}},
-{{575, -613}, {451, -613}, {451, -634}},
-{{451, -593}, {451, -613}, {575, -613}},
-{{541, -513}, {451, -593}, {575, -613}},
-{{541, -513}, {432, -580}, {451, -593}},
-{{451, -442}, {432, -580}, {541, -513}},
-{{451, -397}, {451, -442}, {541, -513}},
-{{658, -283}, {451, -397}, {541, -513}},
-{{658, -283}, {451, -377}, {451, -397}},
-{{658, -283}, {432, -364}, {451, -377}},
-{{658, -283}, {414, -351}, {432, -364}},
-{{575, -82}, {414, -351}, {658, -283}},
-{{374, 1}, {414, -351}, {575, -82}},
-{{374, 1}, {393, -351}, {414, -351}},
-{{374, 1}, {304, -351}, {393, -351}},
-{{374, 1}, {178, 1}, {304, -351}},
-{{414, -567}, {432, -580}, {451, -442}},
-{{451, -442}, {374, -442}, {414, -567}},
-{{374, -442}, {393, -567}, {414, -567}},
-{{393, -567}, {374, -442}, {304, -567}},
-{{374, -442}, {304, -442}, {304, -567}},
-};
-//Glyph: C
-int glyph_C_index = 67;
-int glyph_C_advance_x = 695;
-int glyph_C_advance_y = 0;
-int glyph_C_size = 21;
-Bezier_write glyph_C[] = {
-{{673, -145}, {673, -112}, {654, -93},1 },
-{{654, -93}, {643, -83}, {619, -66},1 },
-{{619, -66}, {522, 1}, {405, 1},1 },
-{{405, 1}, {246, 1}, {134, -115},1 },
-{{134, -115}, {22, -231}, {22, -391},1 },
-{{22, -391}, {22, -544}, {130, -662},1 },
-{{130, -662}, {241, -784}, {393, -784},1 },
-{{393, -784}, {520, -784}, {595, -694},1 },
-{{595, -694}, {614, -671}, {614, -648},1 },
-{{614, -648}, {614, -623}, {595, -605},1 },
-{{595, -605}, {577, -587}, {553, -587},1 },
-{{553, -587}, {531, -587}, {489, -623},1 },
-{{399, -660}, {448, -660}, {489, -623},0 },
-{{289, -615}, {333, -660}, {399, -660},0 },
-{{246, -505}, {246, -570}, {289, -615},0 },
-{{289, -397}, {246, -443}, {246, -505},0 },
-{{395, -351}, {333, -351}, {289, -397},0 },
-{{465, -370}, {430, -351}, {395, -351},0 },
-{{465, -370}, {501, -390}, {515, -390},1 },
-{{515, -390}, {556, -390}, {573, -357},1 },
-{{669, -168}, {673, -158}, {673, -145},1 },
-};
-int glyph_C_triangle_size = 26;
-Triangle_write glyph_C_triangles[] = {
-{{289, -397}, {134, -115}, {22, -391}},
-{{289, -397}, {22, -391}, {246, -443}},
-{{246, -443}, {22, -391}, {246, -505}},
-{{22, -391}, {130, -662}, {246, -505}},
-{{130, -662}, {246, -570}, {246, -505}},
-{{246, -570}, {130, -662}, {289, -615}},
-{{289, -615}, {130, -662}, {333, -660}},
-{{333, -660}, {130, -662}, {393, -784}},
-{{333, -660}, {393, -784}, {399, -660}},
-{{448, -660}, {399, -660}, {393, -784}},
-{{595, -694}, {448, -660}, {393, -784}},
-{{489, -623}, {448, -660}, {595, -694}},
-{{595, -694}, {553, -587}, {489, -623}},
-{{595, -605}, {553, -587}, {595, -694}},
-{{614, -648}, {595, -605}, {595, -694}},
-{{134, -115}, {289, -397}, {333, -351}},
-{{134, -115}, {333, -351}, {405, 1}},
-{{333, -351}, {395, -351}, {405, 1}},
-{{405, 1}, {395, -351}, {430, -351}},
-{{619, -66}, {405, 1}, {430, -351}},
-{{669, -168}, {619, -66}, {430, -351}},
-{{573, -357}, {669, -168}, {430, -351}},
-{{465, -370}, {573, -357}, {430, -351}},
-{{465, -370}, {515, -390}, {573, -357}},
-{{654, -93}, {619, -66}, {669, -168}},
-{{654, -93}, {669, -168}, {673, -145}},
-};
-//Glyph: D
-int glyph_D_index = 68;
-int glyph_D_advance_x = 704;
-int glyph_D_advance_y = 0;
-int glyph_D_size = 15;
-Bezier_write glyph_D[] = {
-{{684, -391}, {684, -231}, {571, -115},1 },
-{{571, -115}, {459, 1}, {300, 1},1 },
-{{177, 1}, {105, 1}, {61, -52},1 },
-{{61, -52}, {20, -102}, {20, -175},1 },
-{{20, -175}, {20, -240}, {53, -287},1 },
-{{53, -287}, {89, -338}, {151, -348},1 },
-{{151, -660}, {78, -660}, {78, -721},1 },
-{{78, -721}, {78, -750}, {97, -767},1 },
-{{97, -767}, {116, -784}, {145, -784},1 },
-{{313, -784}, {466, -784}, {577, -663},1 },
-{{577, -663}, {684, -546}, {684, -391},1 },
-{{416, -615}, {459, -570}, {459, -505},0 },
-{{308, -660}, {373, -660}, {416, -615},0 },
-{{416, -397}, {373, -351}, {311, -351},0 },
-{{459, -505}, {459, -443}, {416, -397},0 },
-};
-int glyph_D_triangle_size = 25;
-Triangle_write glyph_D_triangles[] = {
-{{177, 1}, {61, -52}, {20, -175}},
-{{177, 1}, {20, -175}, {151, -348}},
-{{151, -348}, {20, -175}, {53, -287}},
-{{177, 1}, {151, -348}, {275, -351}},
-{{151, -348}, {151, -660}, {275, -351}},
-{{151, -660}, {275, -660}, {275, -351}},
-{{275, -660}, {151, -660}, {145, -784}},
-{{151, -660}, {78, -721}, {145, -784}},
-{{78, -721}, {97, -767}, {145, -784}},
-{{313, -784}, {275, -660}, {145, -784}},
-{{308, -660}, {275, -660}, {313, -784}},
-{{313, -784}, {373, -660}, {308, -660}},
-{{577, -663}, {373, -660}, {313, -784}},
-{{416, -615}, {373, -660}, {577, -663}},
-{{459, -570}, {416, -615}, {577, -663}},
-{{459, -505}, {459, -570}, {577, -663}},
-{{684, -391}, {459, -505}, {577, -663}},
-{{684, -391}, {459, -443}, {459, -505}},
-{{684, -391}, {416, -397}, {459, -443}},
-{{571, -115}, {416, -397}, {684, -391}},
-{{373, -351}, {416, -397}, {571, -115}},
-{{300, 1}, {373, -351}, {571, -115}},
-{{300, 1}, {311, -351}, {373, -351}},
-{{300, 1}, {275, -351}, {311, -351}},
-{{177, 1}, {275, -351}, {300, 1}},
-};
-//Glyph: E
-int glyph_E_index = 69;
-int glyph_E_advance_x = 530;
-int glyph_E_advance_y = 0;
-int glyph_E_size = 18;
-Bezier_write glyph_E[] = {
-{{510, -175}, {510, -102}, {469, -52},1 },
-{{469, -52}, {425, 1}, {353, 1},1 },
-{{65, 0}, {35, -4}, {26, -22},1 },
-{{26, -22}, {20, -33}, {20, -61},1 },
-{{20, -721}, {20, -745}, {39, -764},1 },
-{{39, -764}, {59, -784}, {82, -784},1 },
-{{418, -784}, {441, -784}, {460, -764},1 },
-{{460, -764}, {480, -745}, {480, -721},1 },
-{{480, -677}, {480, -647}, {462, -630},1 },
-{{462, -630}, {445, -613}, {420, -612},1 },
-{{420, -612}, {396, -611}, {377, -624},1 },
-{{377, -624}, {358, -638}, {357, -660},1 },
-{{323, -574}, {354, -574}, {373, -554},1 },
-{{373, -554}, {389, -537}, {389, -512},1 },
-{{389, -512}, {389, -487}, {373, -469},1 },
-{{373, -469}, {354, -449}, {323, -449},1 },
-{{353, -351}, {425, -351}, {469, -298},1 },
-{{469, -298}, {510, -248}, {510, -175},1 },
-};
-int glyph_E_triangle_size = 26;
-Triangle_write glyph_E_triangles[] = {
-{{65, 0}, {26, -22}, {20, -61}},
-{{65, 0}, {20, -61}, {144, -351}},
-{{20, -61}, {20, -721}, {144, -351}},
-{{20, -721}, {144, -449}, {144, -351}},
-{{20, -721}, {144, -574}, {144, -449}},
-{{144, -449}, {144, -574}, {323, -574}},
-{{323, -449}, {144, -449}, {323, -574}},
-{{389, -512}, {323, -449}, {323, -574}},
-{{389, -512}, {323, -574}, {373, -554}},
-{{389, -512}, {373, -469}, {323, -449}},
-{{20, -721}, {144, -660}, {144, -574}},
-{{144, -660}, {20, -721}, {82, -784}},
-{{20, -721}, {39, -764}, {82, -784}},
-{{144, -660}, {82, -784}, {418, -784}},
-{{357, -660}, {144, -660}, {418, -784}},
-{{480, -721}, {357, -660}, {418, -784}},
-{{480, -721}, {418, -784}, {460, -764}},
-{{480, -677}, {357, -660}, {480, -721}},
-{{480, -677}, {420, -612}, {357, -660}},
-{{420, -612}, {377, -624}, {357, -660}},
-{{480, -677}, {462, -630}, {420, -612}},
-{{353, 1}, {65, 0}, {144, -351}},
-{{353, -351}, {353, 1}, {144, -351}},
-{{510, -175}, {353, 1}, {353, -351}},
-{{510, -175}, {353, -351}, {469, -298}},
-{{510, -175}, {469, -52}, {353, 1}},
-};
-//Glyph: F
-int glyph_F_index = 70;
-int glyph_F_advance_x = 530;
-int glyph_F_advance_y = 0;
-int glyph_F_size = 13;
-Bezier_write glyph_F[] = {
-{{510, -608}, {510, -535}, {469, -485},1 },
-{{469, -485}, {424, -432}, {352, -432},1 },
-{{323, -377}, {354, -377}, {373, -358},1 },
-{{373, -358}, {389, -340}, {389, -315},1 },
-{{389, -315}, {389, -290}, {373, -272},1 },
-{{373, -272}, {354, -253}, {323, -253},1 },
-{{144, -61}, {144, -30}, {125, -12},1 },
-{{125, -12}, {107, 5}, {81, 5},1 },
-{{81, 5}, {57, 5}, {38, -12},1 },
-{{38, -12}, {20, -30}, {20, -61},1 },
-{{20, -728}, {20, -784}, {81, -784},1 },
-{{352, -784}, {424, -784}, {469, -731},1 },
-{{469, -731}, {510, -681}, {510, -608},1 },
-};
-int glyph_F_triangle_size = 18;
-Triangle_write glyph_F_triangles[] = {
-{{20, -61}, {81, 5}, {38, -12}},
-{{20, -61}, {144, -61}, {81, 5}},
-{{144, -61}, {125, -12}, {81, 5}},
-{{20, -61}, {144, -253}, {144, -61}},
-{{144, -253}, {20, -61}, {144, -377}},
-{{20, -61}, {20, -728}, {144, -377}},
-{{20, -728}, {144, -432}, {144, -377}},
-{{20, -728}, {81, -784}, {144, -432}},
-{{144, -432}, {81, -784}, {352, -784}},
-{{352, -432}, {144, -432}, {352, -784}},
-{{510, -608}, {352, -432}, {352, -784}},
-{{510, -608}, {352, -784}, {469, -731}},
-{{510, -608}, {469, -485}, {352, -432}},
-{{144, -253}, {144, -377}, {323, -377}},
-{{323, -253}, {144, -253}, {323, -377}},
-{{389, -315}, {323, -253}, {323, -377}},
-{{389, -315}, {323, -377}, {373, -358}},
-{{389, -315}, {373, -272}, {323, -253}},
-};
-//Glyph: G
-int glyph_G_index = 71;
-int glyph_G_advance_x = 765;
-int glyph_G_advance_y = 0;
-int glyph_G_size = 24;
-Bezier_write glyph_G[] = {
-{{731, -61}, {731, -35}, {711, -17},1 },
-{{711, -17}, {692, 0}, {666, 0},1 },
-{{666, 0}, {646, 0}, {631, -12},1 },
-{{592, -42}, {510, 1}, {419, 1},1 },
-{{419, 1}, {259, 1}, {147, -115},1 },
-{{147, -115}, {35, -231}, {35, -391},1 },
-{{35, -391}, {35, -533}, {126, -644},1 },
-{{126, -644}, {218, -755}, {358, -779},1 },
-{{358, -779}, {382, -783}, {406, -783},1 },
-{{406, -783}, {542, -783}, {624, -677},1 },
-{{624, -677}, {639, -656}, {639, -634},1 },
-{{639, -634}, {639, -609}, {621, -590},1 },
-{{621, -590}, {603, -572}, {578, -572},1 },
-{{578, -572}, {547, -572}, {525, -601},1 },
-{{409, -659}, {479, -659}, {525, -601},0 },
-{{379, -656}, {394, -659}, {409, -659},0 },
-{{292, -602}, {326, -646}, {379, -656},0 },
-{{259, -505}, {259, -559}, {292, -602},0 },
-{{294, -405}, {259, -449}, {259, -505},0 },
-{{385, -353}, {330, -361}, {294, -405},0 },
-{{385, -430}, {385, -453}, {404, -472},1 },
-{{404, -472}, {424, -491}, {448, -491},1 },
-{{669, -491}, {691, -491}, {711, -471},1 },
-{{711, -471}, {731, -452}, {731, -430},1 },
-};
-int glyph_G_triangle_size = 32;
-Triangle_write glyph_G_triangles[] = {
-{{294, -405}, {147, -115}, {35, -391}},
-{{294, -405}, {35, -391}, {259, -449}},
-{{259, -449}, {35, -391}, {259, -505}},
-{{35, -391}, {126, -644}, {259, -505}},
-{{126, -644}, {259, -559}, {259, -505}},
-{{259, -559}, {126, -644}, {292, -602}},
-{{292, -602}, {126, -644}, {326, -646}},
-{{326, -646}, {126, -644}, {358, -779}},
-{{326, -646}, {358, -779}, {379, -656}},
-{{379, -656}, {358, -779}, {394, -659}},
-{{394, -659}, {358, -779}, {406, -783}},
-{{409, -659}, {394, -659}, {406, -783}},
-{{406, -783}, {479, -659}, {409, -659}},
-{{624, -677}, {479, -659}, {406, -783}},
-{{525, -601}, {479, -659}, {624, -677}},
-{{525, -601}, {624, -677}, {639, -634}},
-{{639, -634}, {578, -572}, {525, -601}},
-{{621, -590}, {578, -572}, {639, -634}},
-{{147, -115}, {294, -405}, {330, -361}},
-{{147, -115}, {330, -361}, {385, -353}},
-{{385, -353}, {419, 1}, {147, -115}},
-{{592, -42}, {419, 1}, {385, -353}},
-{{731, -430}, {592, -42}, {385, -353}},
-{{385, -353}, {669, -491}, {731, -430}},
-{{731, -430}, {669, -491}, {711, -471}},
-{{448, -491}, {669, -491}, {385, -353}},
-{{448, -491}, {385, -353}, {385, -430}},
-{{448, -491}, {385, -430}, {404, -472}},
-{{731, -61}, {592, -42}, {731, -430}},
-{{731, -61}, {631, -12}, {592, -42}},
-{{711, -17}, {631, -12}, {731, -61}},
-{{666, 0}, {631, -12}, {711, -17}},
-};
-//Glyph: H
-int glyph_H_index = 72;
-int glyph_H_advance_x = 588;
-int glyph_H_advance_y = 0;
-int glyph_H_size = 16;
-Bezier_write glyph_H[] = {
-{{562, -61}, {562, -30}, {543, -12},1 },
-{{543, -12}, {524, 5}, {499, 5},1 },
-{{499, 5}, {474, 5}, {455, -12},1 },
-{{455, -12}, {437, -30}, {437, -61},1 },
-{{150, -61}, {150, -30}, {131, -12},1 },
-{{131, -12}, {113, 5}, {88, 5},1 },
-{{88, 5}, {62, 5}, {44, -12},1 },
-{{44, -12}, {27, -30}, {27, -61},1 },
-{{27, -721}, {27, -753}, {44, -770},1 },
-{{44, -770}, {62, -788}, {88, -788},1 },
-{{88, -788}, {113, -788}, {131, -770},1 },
-{{131, -770}, {150, -753}, {150, -721},1 },
-{{437, -721}, {437, -753}, {455, -770},1 },
-{{455, -770}, {474, -788}, {499, -788},1 },
-{{499, -788}, {524, -788}, {543, -770},1 },
-{{543, -770}, {562, -753}, {562, -721},1 },
-};
-int glyph_H_triangle_size = 22;
-Triangle_write glyph_H_triangles[] = {
-{{27, -61}, {150, -572}, {44, -12}},
-{{150, -211}, {44, -12}, {150, -572}},
-{{150, -211}, {150, -572}, {437, -572}},
-{{150, -211}, {437, -572}, {437, -211}},
-{{437, -211}, {437, -572}, {562, -721}},
-{{562, -721}, {437, -572}, {437, -721}},
-{{543, -770}, {562, -721}, {437, -721}},
-{{543, -770}, {437, -721}, {499, -788}},
-{{437, -721}, {455, -770}, {499, -788}},
-{{562, -61}, {437, -211}, {562, -721}},
-{{562, -61}, {437, -61}, {437, -211}},
-{{437, -61}, {562, -61}, {499, 5}},
-{{562, -61}, {543, -12}, {499, 5}},
-{{437, -61}, {499, 5}, {455, -12}},
-{{150, -61}, {44, -12}, {150, -211}},
-{{150, -61}, {88, 5}, {44, -12}},
-{{131, -12}, {88, 5}, {150, -61}},
-{{88, -788}, {150, -572}, {27, -61}},
-{{88, -788}, {27, -61}, {27, -721}},
-{{44, -770}, {88, -788}, {27, -721}},
-{{88, -788}, {150, -721}, {150, -572}},
-{{88, -788}, {131, -770}, {150, -721}},
-};
-//Glyph: I
-int glyph_I_index = 73;
-int glyph_I_advance_x = 174;
-int glyph_I_advance_y = 0;
-int glyph_I_size = 8;
-Bezier_write glyph_I[] = {
-{{149, -61}, {149, -30}, {130, -12},1 },
-{{130, -12}, {112, 5}, {87, 5},1 },
-{{87, 5}, {61, 5}, {43, -12},1 },
-{{43, -12}, {26, -30}, {26, -61},1 },
-{{26, -721}, {26, -753}, {43, -770},1 },
-{{43, -770}, {61, -788}, {87, -788},1 },
-{{87, -788}, {112, -788}, {130, -770},1 },
-{{130, -770}, {149, -753}, {149, -721},1 },
-};
-int glyph_I_triangle_size = 8;
-Triangle_write glyph_I_triangles[] = {
-{{26, -61}, {149, -721}, {43, -12}},
-{{149, -61}, {43, -12}, {149, -721}},
-{{149, -61}, {87, 5}, {43, -12}},
-{{130, -12}, {87, 5}, {149, -61}},
-{{87, -788}, {149, -721}, {26, -61}},
-{{87, -788}, {26, -61}, {26, -721}},
-{{43, -770}, {87, -788}, {26, -721}},
-{{130, -770}, {149, -721}, {87, -788}},
-};
-//Glyph: J
-int glyph_J_index = 74;
-int glyph_J_advance_x = 537;
-int glyph_J_advance_y = 0;
-int glyph_J_size = 12;
-Bezier_write glyph_J[] = {
-{{513, -391}, {513, -224}, {447, -122},1 },
-{{447, -122}, {368, 1}, {210, 1},1 },
-{{181, 1}, {109, 1}, {65, -52},1 },
-{{65, -52}, {24, -102}, {24, -175},1 },
-{{24, -175}, {24, -248}, {66, -299},1 },
-{{66, -299}, {109, -351}, {181, -351},1 },
-{{388, -505}, {388, -351}, {296, -351},0 },
-{{388, -660}, {315, -660}, {315, -721},1 },
-{{315, -721}, {315, -747}, {332, -765},1 },
-{{332, -765}, {350, -784}, {382, -784},1 },
-{{451, -784}, {474, -784}, {493, -764},1 },
-{{493, -764}, {513, -745}, {513, -721},1 },
-};
-int glyph_J_triangle_size = 16;
-Triangle_write glyph_J_triangles[] = {
-{{181, 1}, {65, -52}, {24, -175}},
-{{24, -175}, {210, 1}, {181, 1}},
-{{181, -351}, {210, 1}, {24, -175}},
-{{24, -175}, {66, -299}, {181, -351}},
-{{181, -351}, {296, -351}, {210, 1}},
-{{447, -122}, {210, 1}, {296, -351}},
-{{447, -122}, {296, -351}, {388, -351}},
-{{447, -122}, {388, -351}, {513, -391}},
-{{513, -391}, {388, -351}, {388, -505}},
-{{388, -505}, {513, -721}, {513, -391}},
-{{388, -505}, {388, -660}, {513, -721}},
-{{513, -721}, {388, -660}, {451, -784}},
-{{388, -660}, {382, -784}, {451, -784}},
-{{388, -660}, {315, -721}, {382, -784}},
-{{315, -721}, {332, -765}, {382, -784}},
-{{513, -721}, {451, -784}, {493, -764}},
-};
-//Glyph: K
-int glyph_K_index = 75;
-int glyph_K_advance_x = 656;
-int glyph_K_advance_y = 0;
-int glyph_K_size = 16;
-Bezier_write glyph_K[] = {
-{{584, -76}, {526, 0}, {444, 0},1 },
-{{444, 0}, {395, 0}, {353, -32},1 },
-{{154, -61}, {154, -30}, {135, -12},1 },
-{{135, -12}, {117, 5}, {92, 5},1 },
-{{92, 5}, {67, 5}, {48, -12},1 },
-{{48, -12}, {30, -30}, {30, -61},1 },
-{{30, -721}, {30, -753}, {48, -770},1 },
-{{48, -770}, {66, -788}, {92, -788},1 },
-{{92, -788}, {117, -788}, {135, -770},1 },
-{{135, -770}, {154, -753}, {154, -721},1 },
-{{361, -758}, {383, -788}, {413, -788},1 },
-{{413, -788}, {438, -788}, {456, -769},1 },
-{{456, -769}, {475, -750}, {475, -726},1 },
-{{475, -726}, {475, -705}, {461, -685},1 },
-{{566, -311}, {626, -265}, {626, -193},1 },
-{{626, -193}, {626, -132}, {584, -76},1 },
-};
-int glyph_K_triangle_size = 21;
-Triangle_write glyph_K_triangles[] = {
-{{30, -61}, {154, -479}, {48, -12}},
-{{154, -183}, {48, -12}, {154, -479}},
-{{154, -183}, {154, -479}, {321, -497}},
-{{321, -497}, {154, -479}, {361, -758}},
-{{321, -497}, {361, -758}, {461, -685}},
-{{475, -726}, {461, -685}, {361, -758}},
-{{475, -726}, {361, -758}, {456, -769}},
-{{361, -758}, {413, -788}, {456, -769}},
-{{154, -183}, {321, -497}, {566, -311}},
-{{353, -32}, {154, -183}, {566, -311}},
-{{566, -311}, {584, -76}, {353, -32}},
-{{444, 0}, {353, -32}, {584, -76}},
-{{584, -76}, {566, -311}, {626, -193}},
-{{154, -61}, {48, -12}, {154, -183}},
-{{154, -61}, {92, 5}, {48, -12}},
-{{135, -12}, {92, 5}, {154, -61}},
-{{92, -788}, {154, -479}, {30, -61}},
-{{92, -788}, {30, -61}, {30, -721}},
-{{48, -770}, {92, -788}, {30, -721}},
-{{92, -788}, {154, -721}, {154, -479}},
-{{92, -788}, {135, -770}, {154, -721}},
-};
-//Glyph: L
-int glyph_L_index = 76;
-int glyph_L_advance_x = 470;
-int glyph_L_advance_y = 0;
-int glyph_L_size = 10;
-Bezier_write glyph_L[] = {
-{{449, -175}, {449, -102}, {408, -52},1 },
-{{408, -52}, {364, 1}, {291, 1},1 },
-{{83, 1}, {60, 1}, {40, -18},1 },
-{{40, -18}, {21, -38}, {21, -61},1 },
-{{21, -721}, {21, -753}, {40, -771},1 },
-{{40, -771}, {59, -789}, {84, -789},1 },
-{{84, -789}, {109, -789}, {127, -772},1 },
-{{127, -772}, {146, -752}, {146, -721},1 },
-{{291, -351}, {364, -351}, {408, -298},1 },
-{{408, -298}, {449, -248}, {449, -175},1 },
-};
-int glyph_L_triangle_size = 12;
-Triangle_write glyph_L_triangles[] = {
-{{21, -61}, {83, 1}, {40, -18}},
-{{21, -61}, {291, 1}, {83, 1}},
-{{408, -52}, {291, 1}, {21, -61}},
-{{146, -351}, {408, -52}, {21, -61}},
-{{84, -789}, {146, -351}, {21, -61}},
-{{84, -789}, {21, -61}, {21, -721}},
-{{40, -771}, {84, -789}, {21, -721}},
-{{84, -789}, {146, -721}, {146, -351}},
-{{84, -789}, {127, -772}, {146, -721}},
-{{291, -351}, {408, -52}, {146, -351}},
-{{408, -52}, {291, -351}, {449, -175}},
-{{449, -175}, {291, -351}, {408, -298}},
-};
-//Glyph: M
-int glyph_M_index = 77;
-int glyph_M_advance_x = 861;
-int glyph_M_advance_y = 0;
-int glyph_M_size = 29;
-Bezier_write glyph_M[] = {
-{{840, -249}, {840, -144}, {813, -46},1 },
-{{813, -46}, {798, 5}, {752, 5},1 },
-{{752, 5}, {726, 5}, {708, -12},1 },
-{{708, -12}, {690, -30}, {690, -56},1 },
-{{690, -56}, {690, -66}, {693, -77},1 },
-{{706, -172}, {706, -128}, {693, -77},0 },
-{{629, -353}, {706, -273}, {706, -172},0 },
-{{629, -353}, {620, -337}, {609, -318},1 },
-{{609, -318}, {554, -226}, {473, -149},1 },
-{{473, -149}, {457, -134}, {430, -134},1 },
-{{430, -134}, {403, -134}, {388, -149},1 },
-{{388, -149}, {305, -228}, {252, -318},1 },
-{{252, -318}, {241, -336}, {232, -353},1 },
-{{155, -169}, {155, -273}, {232, -353},0 },
-{{168, -77}, {155, -126}, {155, -169},0 },
-{{168, -77}, {170, -66}, {170, -56},1 },
-{{170, -56}, {170, -30}, {152, -12},1 },
-{{152, -12}, {135, 5}, {109, 5},1 },
-{{109, 5}, {62, 5}, {49, -46},1 },
-{{49, -46}, {22, -151}, {22, -249},1 },
-{{22, -249}, {22, -555}, {227, -781},1 },
-{{227, -781}, {244, -800}, {273, -800},1 },
-{{273, -800}, {301, -800}, {319, -781},1 },
-{{319, -781}, {386, -707}, {430, -622},1 },
-{{430, -622}, {479, -712}, {542, -781},1 },
-{{542, -781}, {559, -800}, {587, -800},1 },
-{{587, -800}, {616, -800}, {634, -781},1 },
-{{634, -781}, {732, -673}, {786, -534},1 },
-{{786, -534}, {840, -395}, {840, -249},1 },
-};
-int glyph_M_triangle_size = 31;
-Triangle_write glyph_M_triangles[] = {
-{{49, -46}, {22, -249}, {155, -169}},
-{{22, -249}, {155, -273}, {155, -169}},
-{{232, -353}, {155, -273}, {22, -249}},
-{{232, -353}, {22, -249}, {227, -781}},
-{{227, -781}, {430, -622}, {232, -353}},
-{{252, -318}, {232, -353}, {430, -622}},
-{{430, -622}, {609, -318}, {252, -318}},
-{{388, -149}, {252, -318}, {609, -318}},
-{{473, -149}, {388, -149}, {609, -318}},
-{{430, -134}, {388, -149}, {473, -149}},
-{{629, -353}, {609, -318}, {430, -622}},
-{{629, -353}, {430, -622}, {786, -534}},
-{{430, -622}, {634, -781}, {786, -534}},
-{{634, -781}, {430, -622}, {542, -781}},
-{{634, -781}, {542, -781}, {587, -800}},
-{{706, -273}, {629, -353}, {786, -534}},
-{{706, -273}, {786, -534}, {840, -249}},
-{{706, -172}, {706, -273}, {840, -249}},
-{{706, -128}, {706, -172}, {840, -249}},
-{{813, -46}, {706, -128}, {840, -249}},
-{{693, -77}, {706, -128}, {813, -46}},
-{{690, -56}, {693, -77}, {813, -46}},
-{{813, -46}, {752, 5}, {690, -56}},
-{{752, 5}, {708, -12}, {690, -56}},
-{{430, -622}, {227, -781}, {319, -781}},
-{{319, -781}, {227, -781}, {273, -800}},
-{{155, -126}, {49, -46}, {155, -169}},
-{{49, -46}, {155, -126}, {168, -77}},
-{{49, -46}, {168, -77}, {170, -56}},
-{{170, -56}, {109, 5}, {49, -46}},
-{{152, -12}, {109, 5}, {170, -56}},
-};
-//Glyph: N
-int glyph_N_index = 78;
-int glyph_N_advance_x = 575;
-int glyph_N_advance_y = 0;
-int glyph_N_size = 14;
-Bezier_write glyph_N[] = {
-{{555, -61}, {555, -36}, {535, -18},1 },
-{{535, -18}, {516, -1}, {490, -1},1 },
-{{490, -1}, {469, -1}, {453, -14},1 },
-{{143, -61}, {143, -30}, {125, -12},1 },
-{{125, -12}, {107, 5}, {81, 5},1 },
-{{81, 5}, {56, 5}, {38, -12},1 },
-{{38, -12}, {20, -30}, {20, -61},1 },
-{{20, -721}, {20, -747}, {39, -765},1 },
-{{39, -765}, {58, -783}, {83, -783},1 },
-{{83, -783}, {105, -783}, {122, -769},1 },
-{{430, -721}, {430, -753}, {450, -771},1 },
-{{450, -771}, {467, -788}, {492, -788},1 },
-{{492, -788}, {517, -788}, {536, -770},1 },
-{{536, -770}, {555, -753}, {555, -721},1 },
-};
-int glyph_N_triangle_size = 18;
-Triangle_write glyph_N_triangles[] = {
-{{81, 5}, {38, -12}, {20, -61}},
-{{20, -61}, {143, -61}, {81, 5}},
-{{125, -12}, {81, 5}, {143, -61}},
-{{20, -61}, {143, -275}, {143, -61}},
-{{20, -61}, {20, -721}, {143, -275}},
-{{143, -275}, {20, -721}, {122, -769}},
-{{122, -769}, {20, -721}, {39, -765}},
-{{39, -765}, {83, -783}, {122, -769}},
-{{143, -275}, {122, -769}, {430, -508}},
-{{430, -508}, {453, -14}, {143, -275}},
-{{453, -14}, {430, -508}, {555, -61}},
-{{430, -508}, {555, -721}, {555, -61}},
-{{430, -721}, {555, -721}, {430, -508}},
-{{555, -721}, {430, -721}, {536, -770}},
-{{536, -770}, {430, -721}, {450, -771}},
-{{450, -771}, {492, -788}, {536, -770}},
-{{555, -61}, {490, -1}, {453, -14}},
-{{535, -18}, {490, -1}, {555, -61}},
-};
-//Glyph: O
-int glyph_O_index = 79;
-int glyph_O_advance_x = 810;
-int glyph_O_advance_y = 0;
-int glyph_O_size = 16;
-Bezier_write glyph_O[] = {
-{{791, -228}, {791, -134}, {722, -66},1 },
-{{722, -66}, {654, 1}, {561, 1},1 },
-{{250, 1}, {156, 1}, {87, -66},1 },
-{{87, -66}, {19, -134}, {19, -228},1 },
-{{19, -228}, {19, -330}, {68, -457},1 },
-{{68, -457}, {120, -594}, {202, -682},1 },
-{{202, -682}, {297, -783}, {405, -783},1 },
-{{405, -783}, {513, -783}, {608, -682},1 },
-{{608, -682}, {690, -595}, {742, -457},1 },
-{{742, -457}, {791, -330}, {791, -228},1 },
-{{296, -602}, {346, -659}, {405, -659},0 },
-{{247, -486}, {247, -545}, {296, -602},0 },
-{{318, -432}, {247, -432}, {247, -486},0 },
-{{564, -487}, {564, -432}, {493, -432},0 },
-{{513, -602}, {564, -546}, {564, -487},0 },
-{{405, -659}, {462, -659}, {513, -602},0 },
-};
-int glyph_O_triangle_size = 24;
-Triangle_write glyph_O_triangles[] = {
-{{87, -66}, {19, -228}, {247, -432}},
-{{247, -432}, {19, -228}, {68, -457}},
-{{68, -457}, {247, -486}, {247, -432}},
-{{247, -486}, {68, -457}, {247, -545}},
-{{68, -457}, {202, -682}, {247, -545}},
-{{247, -545}, {202, -682}, {296, -602}},
-{{296, -602}, {202, -682}, {346, -659}},
-{{346, -659}, {202, -682}, {405, -783}},
-{{405, -659}, {346, -659}, {405, -783}},
-{{405, -783}, {462, -659}, {405, -659}},
-{{608, -682}, {462, -659}, {405, -783}},
-{{513, -602}, {462, -659}, {608, -682}},
-{{564, -546}, {513, -602}, {608, -682}},
-{{742, -457}, {564, -546}, {608, -682}},
-{{742, -457}, {564, -487}, {564, -546}},
-{{564, -432}, {564, -487}, {742, -457}},
-{{791, -228}, {564, -432}, {742, -457}},
-{{791, -228}, {722, -66}, {564, -432}},
-{{722, -66}, {561, 1}, {564, -432}},
-{{561, 1}, {493, -432}, {564, -432}},
-{{318, -432}, {493, -432}, {561, 1}},
-{{250, 1}, {318, -432}, {561, 1}},
-{{250, 1}, {247, -432}, {318, -432}},
-{{87, -66}, {247, -432}, {250, 1}},
-};
-//Glyph: P
-int glyph_P_index = 80;
-int glyph_P_advance_x = 723;
-int glyph_P_advance_y = 0;
-int glyph_P_size = 20;
-Bezier_write glyph_P[] = {
-{{708, -451}, {708, -315}, {610, -217},1 },
-{{610, -217}, {513, -119}, {377, -119},1 },
-{{377, -119}, {352, -119}, {323, -124},1 },
-{{323, -61}, {323, -38}, {303, -18},1 },
-{{303, -18}, {284, 1}, {262, 1},1 },
-{{203, 1}, {175, 1}, {156, -16},1 },
-{{156, -16}, {137, -34}, {137, -61},1 },
-{{137, -61}, {137, -88}, {154, -105},1 },
-{{154, -105}, {172, -123}, {199, -124},1 },
-{{172, -432}, {100, -432}, {56, -485},1 },
-{{56, -485}, {16, -535}, {16, -608},1 },
-{{16, -608}, {16, -681}, {56, -731},1 },
-{{56, -731}, {100, -784}, {172, -784},1 },
-{{377, -784}, {513, -784}, {610, -686},1 },
-{{610, -686}, {708, -588}, {708, -451},1 },
-{{427, -412}, {468, -387}, {468, -338},0 },
-{{341, -432}, {393, -432}, {427, -412},0 },
-{{355, -247}, {338, -247}, {323, -251},0 },
-{{431, -270}, {399, -247}, {355, -247},0 },
-{{468, -338}, {468, -296}, {431, -270},0 },
-};
-int glyph_P_triangle_size = 32;
-Triangle_write glyph_P_triangles[] = {
-{{172, -432}, {56, -485}, {16, -608}},
-{{199, -432}, {172, -432}, {16, -608}},
-{{172, -784}, {199, -432}, {16, -608}},
-{{172, -784}, {16, -608}, {56, -731}},
-{{377, -784}, {199, -432}, {172, -784}},
-{{610, -686}, {199, -432}, {377, -784}},
-{{610, -686}, {323, -432}, {199, -432}},
-{{199, -432}, {323, -432}, {323, -251}},
-{{323, -251}, {199, -124}, {199, -432}},
-{{199, -124}, {323, -251}, {323, -124}},
-{{323, -124}, {323, -251}, {338, -247}},
-{{323, -124}, {338, -247}, {355, -247}},
-{{377, -119}, {323, -124}, {355, -247}},
-{{377, -119}, {355, -247}, {399, -247}},
-{{377, -119}, {399, -247}, {431, -270}},
-{{610, -217}, {377, -119}, {431, -270}},
-{{610, -217}, {431, -270}, {468, -296}},
-{{610, -217}, {468, -296}, {468, -338}},
-{{708, -451}, {610, -217}, {468, -338}},
-{{468, -338}, {468, -387}, {708, -451}},
-{{708, -451}, {468, -387}, {610, -686}},
-{{610, -686}, {468, -387}, {427, -412}},
-{{610, -686}, {427, -412}, {393, -432}},
-{{610, -686}, {393, -432}, {341, -432}},
-{{610, -686}, {341, -432}, {323, -432}},
-{{199, -124}, {323, -124}, {323, -61}},
-{{323, -61}, {262, 1}, {199, -124}},
-{{199, -124}, {262, 1}, {203, 1}},
-{{137, -61}, {199, -124}, {203, 1}},
-{{137, -61}, {203, 1}, {156, -16}},
-{{137, -61}, {154, -105}, {199, -124}},
-{{323, -61}, {303, -18}, {262, 1}},
-};
-//Glyph: Q
-int glyph_Q_index = 81;
-int glyph_Q_advance_x = 806;
-int glyph_Q_advance_y = 0;
-int glyph_Q_size = 28;
-Bezier_write glyph_Q[] = {
-{{648, -149}, {676, -86}, {676, -25},1 },
-{{676, -25}, {676, 6}, {657, 24},1 },
-{{657, 24}, {639, 42}, {614, 42},1 },
-{{614, 42}, {588, 42}, {570, 24},1 },
-{{570, 24}, {552, 6}, {552, -25},1 },
-{{550, -49}, {552, -33}, {552, -25},0 },
-{{550, -49}, {482, 1}, {403, 1},1 },
-{{403, 1}, {295, 1}, {200, -100},1 },
-{{200, -100}, {118, -188}, {66, -325},1 },
-{{66, -325}, {17, -452}, {17, -554},1 },
-{{17, -554}, {17, -647}, {85, -715},1 },
-{{85, -715}, {153, -783}, {248, -783},1 },
-{{559, -783}, {653, -783}, {721, -715},1 },
-{{721, -715}, {789, -647}, {789, -554},1 },
-{{789, -554}, {789, -467}, {744, -343},1 },
-{{744, -343}, {701, -225}, {648, -149},1 },
-{{491, -349}, {567, -349}, {562, -286},0 },
-{{246, -286}, {239, -349}, {316, -349},0 },
-{{297, -177}, {251, -227}, {246, -286},0 },
-{{403, -124}, {346, -124}, {297, -177},0 },
-{{484, -153}, {445, -124}, {403, -124},0 },
-{{397, -180}, {444, -180}, {484, -153},0 },
-{{397, -180}, {365, -180}, {348, -198},1 },
-{{348, -198}, {331, -217}, {331, -242},1 },
-{{331, -242}, {331, -267}, {348, -285},1 },
-{{348, -285}, {365, -304}, {397, -304},1 },
-{{397, -304}, {484, -304}, {554, -255},1 },
-{{562, -286}, {560, -271}, {554, -255},0 },
-};
-int glyph_Q_triangle_size = 38;
-Triangle_write glyph_Q_triangles[] = {
-{{66, -325}, {17, -554}, {239, -349}},
-{{17, -554}, {85, -715}, {239, -349}},
-{{239, -349}, {85, -715}, {248, -783}},
-{{316, -349}, {239, -349}, {248, -783}},
-{{248, -783}, {559, -783}, {316, -349}},
-{{559, -783}, {491, -349}, {316, -349}},
-{{559, -783}, {567, -349}, {491, -349}},
-{{567, -349}, {559, -783}, {721, -715}},
-{{789, -554}, {567, -349}, {721, -715}},
-{{744, -343}, {567, -349}, {789, -554}},
-{{744, -343}, {562, -286}, {567, -349}},
-{{744, -343}, {560, -271}, {562, -286}},
-{{648, -149}, {560, -271}, {744, -343}},
-{{554, -255}, {560, -271}, {648, -149}},
-{{484, -153}, {554, -255}, {648, -149}},
-{{550, -49}, {484, -153}, {648, -149}},
-{{648, -149}, {676, -25}, {550, -49}},
-{{676, -25}, {552, -33}, {550, -49}},
-{{676, -25}, {552, -25}, {552, -33}},
-{{676, -25}, {657, 24}, {552, -25}},
-{{657, 24}, {570, 24}, {552, -25}},
-{{614, 42}, {570, 24}, {657, 24}},
-{{445, -124}, {484, -153}, {550, -49}},
-{{403, 1}, {445, -124}, {550, -49}},
-{{403, 1}, {403, -124}, {445, -124}},
-{{346, -124}, {403, -124}, {403, 1}},
-{{403, 1}, {200, -100}, {346, -124}},
-{{200, -100}, {297, -177}, {346, -124}},
-{{200, -100}, {251, -227}, {297, -177}},
-{{251, -227}, {200, -100}, {66, -325}},
-{{251, -227}, {66, -325}, {246, -286}},
-{{66, -325}, {239, -349}, {246, -286}},
-{{484, -153}, {444, -180}, {554, -255}},
-{{554, -255}, {444, -180}, {397, -304}},
-{{444, -180}, {397, -180}, {397, -304}},
-{{397, -180}, {331, -242}, {397, -304}},
-{{397, -304}, {331, -242}, {348, -285}},
-{{397, -180}, {348, -198}, {331, -242}},
-};
-//Glyph: R
-int glyph_R_index = 82;
-int glyph_R_advance_x = 737;
-int glyph_R_advance_y = 0;
-int glyph_R_size = 26;
-Bezier_write glyph_R[] = {
-{{716, -451}, {716, -369}, {677, -296},1 },
-{{677, -296}, {639, -224}, {572, -177},1 },
-{{572, -177}, {616, -127}, {616, -61},1 },
-{{616, -61}, {616, -33}, {598, -14},1 },
-{{598, -14}, {580, 5}, {553, 5},1 },
-{{553, 5}, {525, 5}, {508, -14},1 },
-{{508, -14}, {491, -33}, {491, -61},1 },
-{{469, -105}, {491, -86}, {491, -61},0 },
-{{422, -124}, {447, -124}, {469, -105},0 },
-{{330, -61}, {330, -38}, {310, -18},1 },
-{{310, -18}, {291, 1}, {268, 1},1 },
-{{210, 1}, {181, 1}, {162, -16},1 },
-{{162, -16}, {144, -33}, {144, -61},1 },
-{{144, -61}, {144, -88}, {161, -105},1 },
-{{161, -105}, {179, -123}, {206, -124},1 },
-{{179, -432}, {107, -432}, {63, -485},1 },
-{{63, -485}, {22, -535}, {22, -608},1 },
-{{22, -608}, {22, -681}, {64, -732},1 },
-{{64, -732}, {107, -784}, {179, -784},1 },
-{{384, -784}, {520, -784}, {618, -686},1 },
-{{618, -686}, {716, -588}, {716, -451},1 },
-{{433, -412}, {474, -387}, {474, -338},0 },
-{{348, -432}, {400, -432}, {433, -412},0 },
-{{362, -247}, {345, -247}, {330, -251},0 },
-{{438, -270}, {406, -247}, {362, -247},0 },
-{{474, -338}, {474, -296}, {438, -270},0 },
-};
-int glyph_R_triangle_size = 41;
-Triangle_write glyph_R_triangles[] = {
-{{179, -432}, {63, -485}, {22, -608}},
-{{22, -608}, {206, -432}, {179, -432}},
-{{179, -784}, {206, -432}, {22, -608}},
-{{22, -608}, {64, -732}, {179, -784}},
-{{384, -784}, {206, -432}, {179, -784}},
-{{618, -686}, {206, -432}, {384, -784}},
-{{618, -686}, {330, -432}, {206, -432}},
-{{206, -432}, {330, -432}, {330, -251}},
-{{330, -251}, {206, -124}, {206, -432}},
-{{206, -124}, {330, -251}, {330, -124}},
-{{330, -124}, {330, -251}, {345, -247}},
-{{330, -124}, {345, -247}, {362, -247}},
-{{422, -124}, {330, -124}, {362, -247}},
-{{362, -247}, {406, -247}, {422, -124}},
-{{447, -124}, {422, -124}, {406, -247}},
-{{406, -247}, {438, -270}, {447, -124}},
-{{572, -177}, {447, -124}, {438, -270}},
-{{572, -177}, {438, -270}, {474, -296}},
-{{572, -177}, {474, -296}, {677, -296}},
-{{677, -296}, {474, -296}, {474, -338}},
-{{677, -296}, {474, -338}, {474, -387}},
-{{474, -387}, {716, -451}, {677, -296}},
-{{716, -451}, {474, -387}, {618, -686}},
-{{618, -686}, {474, -387}, {433, -412}},
-{{618, -686}, {433, -412}, {400, -432}},
-{{618, -686}, {400, -432}, {348, -432}},
-{{618, -686}, {348, -432}, {330, -432}},
-{{469, -105}, {447, -124}, {572, -177}},
-{{491, -86}, {469, -105}, {572, -177}},
-{{616, -61}, {491, -86}, {572, -177}},
-{{616, -61}, {491, -61}, {491, -86}},
-{{616, -61}, {598, -14}, {491, -61}},
-{{598, -14}, {553, 5}, {491, -61}},
-{{491, -61}, {553, 5}, {508, -14}},
-{{206, -124}, {330, -124}, {330, -61}},
-{{330, -61}, {268, 1}, {206, -124}},
-{{206, -124}, {268, 1}, {210, 1}},
-{{144, -61}, {206, -124}, {210, 1}},
-{{144, -61}, {210, 1}, {162, -16}},
-{{144, -61}, {161, -105}, {206, -124}},
-{{330, -61}, {310, -18}, {268, 1}},
-};
-//Glyph: S
-int glyph_S_index = 83;
-int glyph_S_advance_x = 654;
-int glyph_S_advance_y = 0;
-int glyph_S_size = 24;
-Bezier_write glyph_S[] = {
-{{636, -271}, {636, -159}, {556, -79},1 },
-{{556, -79}, {476, 1}, {364, 1},1 },
-{{174, 1}, {103, 1}, {59, -52},1 },
-{{59, -52}, {18, -102}, {18, -175},1 },
-{{18, -175}, {18, -249}, {59, -298},1 },
-{{59, -298}, {102, -351}, {174, -351},1 },
-{{388, -379}, {383, -351}, {349, -351},0 },
-{{377, -409}, {392, -398}, {388, -379},0 },
-{{346, -422}, {371, -413}, {377, -409},0 },
-{{346, -422}, {326, -429}, {298, -440},1 },
-{{298, -440}, {240, -463}, {204, -506},1 },
-{{204, -506}, {167, -553}, {167, -609},1 },
-{{167, -609}, {167, -625}, {170, -641},1 },
-{{170, -641}, {183, -705}, {234, -744},1 },
-{{234, -744}, {286, -784}, {352, -784},1 },
-{{424, -784}, {455, -784}, {474, -765},1 },
-{{474, -765}, {490, -747}, {490, -722},1 },
-{{490, -722}, {490, -697}, {474, -679},1 },
-{{474, -679}, {455, -660}, {424, -660},1 },
-{{292, -618}, {301, -660}, {352, -660},0 },
-{{342, -555}, {284, -578}, {292, -618},0 },
-{{342, -555}, {357, -550}, {387, -539},1 },
-{{387, -539}, {514, -493}, {560, -454},1 },
-{{560, -454}, {636, -390}, {636, -271},1 },
-};
-int glyph_S_triangle_size = 31;
-Triangle_write glyph_S_triangles[] = {
-{{174, 1}, {59, -52}, {18, -175}},
-{{174, 1}, {18, -175}, {174, -351}},
-{{174, -351}, {18, -175}, {59, -298}},
-{{174, 1}, {174, -351}, {349, -351}},
-{{364, 1}, {174, 1}, {349, -351}},
-{{364, 1}, {349, -351}, {383, -351}},
-{{383, -351}, {556, -79}, {364, 1}},
-{{556, -79}, {383, -351}, {636, -271}},
-{{636, -271}, {383, -351}, {560, -454}},
-{{560, -454}, {383, -351}, {388, -379}},
-{{388, -379}, {392, -398}, {560, -454}},
-{{560, -454}, {392, -398}, {387, -539}},
-{{387, -539}, {392, -398}, {377, -409}},
-{{387, -539}, {377, -409}, {371, -413}},
-{{371, -413}, {346, -422}, {387, -539}},
-{{387, -539}, {346, -422}, {342, -555}},
-{{346, -422}, {298, -440}, {342, -555}},
-{{298, -440}, {284, -578}, {342, -555}},
-{{204, -506}, {284, -578}, {298, -440}},
-{{204, -506}, {167, -609}, {284, -578}},
-{{284, -578}, {167, -609}, {292, -618}},
-{{167, -609}, {170, -641}, {292, -618}},
-{{292, -618}, {170, -641}, {301, -660}},
-{{170, -641}, {234, -744}, {301, -660}},
-{{301, -660}, {234, -744}, {352, -784}},
-{{352, -784}, {352, -660}, {301, -660}},
-{{424, -784}, {352, -660}, {352, -784}},
-{{352, -660}, {424, -784}, {424, -660}},
-{{490, -722}, {424, -660}, {424, -784}},
-{{490, -722}, {424, -784}, {474, -765}},
-{{490, -722}, {474, -679}, {424, -660}},
-};
-//Glyph: T
-int glyph_T_index = 84;
-int glyph_T_advance_x = 716;
-int glyph_T_advance_y = 0;
-int glyph_T_size = 12;
-Bezier_write glyph_T[] = {
-{{699, -609}, {699, -535}, {658, -485},1 },
-{{658, -485}, {613, -432}, {541, -432},1 },
-{{420, -61}, {420, -30}, {401, -12},1 },
-{{401, -12}, {383, 5}, {358, 5},1 },
-{{358, 5}, {333, 5}, {314, -12},1 },
-{{314, -12}, {296, -30}, {296, -61},1 },
-{{174, -432}, {102, -432}, {58, -485},1 },
-{{58, -485}, {17, -535}, {17, -609},1 },
-{{17, -609}, {17, -682}, {58, -731},1 },
-{{58, -731}, {102, -784}, {174, -784},1 },
-{{541, -784}, {613, -784}, {658, -731},1 },
-{{658, -731}, {699, -682}, {699, -609},1 },
-};
-int glyph_T_triangle_size = 15;
-Triangle_write glyph_T_triangles[] = {
-{{174, -432}, {58, -485}, {17, -609}},
-{{174, -784}, {174, -432}, {17, -609}},
-{{174, -784}, {17, -609}, {58, -731}},
-{{174, -784}, {541, -784}, {174, -432}},
-{{541, -784}, {296, -432}, {174, -432}},
-{{541, -784}, {420, -432}, {296, -432}},
-{{296, -61}, {296, -432}, {420, -432}},
-{{296, -61}, {420, -432}, {420, -61}},
-{{296, -61}, {420, -61}, {358, 5}},
-{{420, -61}, {401, -12}, {358, 5}},
-{{296, -61}, {358, 5}, {314, -12}},
-{{541, -784}, {541, -432}, {420, -432}},
-{{699, -609}, {541, -432}, {541, -784}},
-{{699, -609}, {541, -784}, {658, -731}},
-{{699, -609}, {658, -485}, {541, -432}},
-};
-//Glyph: U
-int glyph_U_index = 85;
-int glyph_U_advance_x = 819;
-int glyph_U_advance_y = 0;
-int glyph_U_size = 20;
-Bezier_write glyph_U[] = {
-{{795, -267}, {804, -165}, {736, -82},1 },
-{{736, -82}, {668, 1}, {566, 1},1 },
-{{253, 1}, {151, 1}, {83, -82},1 },
-{{83, -82}, {15, -165}, {24, -267},1 },
-{{24, -267}, {47, -521}, {188, -753},1 },
-{{188, -753}, {209, -788}, {244, -788},1 },
-{{244, -788}, {269, -788}, {287, -769},1 },
-{{287, -769}, {306, -751}, {306, -726},1 },
-{{306, -726}, {306, -708}, {295, -689},1 },
-{{256, -578}, {256, -624}, {295, -689},0 },
-{{306, -483}, {256, -523}, {256, -578},0 },
-{{410, -445}, {353, -445}, {306, -483},0 },
-{{513, -481}, {466, -445}, {410, -445},0 },
-{{563, -576}, {563, -521}, {513, -481},0 },
-{{524, -689}, {563, -624}, {563, -576},0 },
-{{524, -689}, {513, -708}, {513, -726},1 },
-{{513, -726}, {513, -751}, {531, -769},1 },
-{{531, -769}, {550, -788}, {575, -788},1 },
-{{575, -788}, {610, -788}, {631, -753},1 },
-{{631, -753}, {773, -516}, {795, -267},1 },
-};
-int glyph_U_triangle_size = 25;
-Triangle_write glyph_U_triangles[] = {
-{{24, -267}, {353, -445}, {83, -82}},
-{{253, 1}, {83, -82}, {353, -445}},
-{{253, 1}, {353, -445}, {410, -445}},
-{{566, 1}, {253, 1}, {410, -445}},
-{{566, 1}, {410, -445}, {466, -445}},
-{{736, -82}, {566, 1}, {466, -445}},
-{{736, -82}, {466, -445}, {795, -267}},
-{{795, -267}, {466, -445}, {513, -481}},
-{{795, -267}, {513, -481}, {563, -521}},
-{{795, -267}, {563, -521}, {563, -576}},
-{{795, -267}, {563, -576}, {631, -753}},
-{{563, -576}, {563, -624}, {631, -753}},
-{{563, -624}, {524, -689}, {631, -753}},
-{{513, -726}, {631, -753}, {524, -689}},
-{{531, -769}, {631, -753}, {513, -726}},
-{{575, -788}, {631, -753}, {531, -769}},
-{{353, -445}, {24, -267}, {306, -483}},
-{{306, -483}, {24, -267}, {256, -523}},
-{{256, -523}, {24, -267}, {256, -578}},
-{{24, -267}, {188, -753}, {256, -578}},
-{{188, -753}, {256, -624}, {256, -578}},
-{{256, -624}, {188, -753}, {295, -689}},
-{{295, -689}, {188, -753}, {287, -769}},
-{{188, -753}, {244, -788}, {287, -769}},
-{{295, -689}, {287, -769}, {306, -726}},
-};
-//Glyph: V
-int glyph_V_index = 86;
-int glyph_V_advance_x = 814;
-int glyph_V_advance_y = 0;
-int glyph_V_size = 20;
-Bezier_write glyph_V[] = {
-{{787, -736}, {793, -690}, {793, -643},1 },
-{{793, -643}, {793, -447}, {699, -279},1 },
-{{699, -279}, {604, -108}, {440, -4},1 },
-{{440, -4}, {429, 3}, {407, 3},1 },
-{{407, 3}, {385, 3}, {373, -4},1 },
-{{373, -4}, {210, -107}, {114, -279},1 },
-{{114, -279}, {21, -448}, {21, -643},1 },
-{{21, -643}, {21, -690}, {26, -736},1 },
-{{26, -736}, {30, -768}, {51, -783},1 },
-{{51, -783}, {72, -799}, {96, -796},1 },
-{{96, -796}, {122, -793}, {138, -773},1 },
-{{138, -773}, {154, -753}, {150, -722},1 },
-{{234, -621}, {143, -665}, {150, -722},0 },
-{{407, -582}, {316, -582}, {234, -621},0 },
-{{580, -622}, {498, -582}, {407, -582},0 },
-{{663, -722}, {670, -665}, {580, -622},0 },
-{{663, -722}, {660, -753}, {676, -773},1 },
-{{676, -773}, {692, -793}, {717, -796},1 },
-{{717, -796}, {742, -799}, {763, -783},1 },
-{{763, -783}, {784, -768}, {787, -736},1 },
-};
-int glyph_V_triangle_size = 22;
-Triangle_write glyph_V_triangles[] = {
-{{234, -621}, {114, -279}, {21, -643}},
-{{234, -621}, {21, -643}, {143, -665}},
-{{143, -665}, {21, -643}, {26, -736}},
-{{150, -722}, {143, -665}, {26, -736}},
-{{150, -722}, {26, -736}, {51, -783}},
-{{150, -722}, {51, -783}, {96, -796}},
-{{138, -773}, {150, -722}, {96, -796}},
-{{114, -279}, {234, -621}, {316, -582}},
-{{407, -582}, {114, -279}, {316, -582}},
-{{373, -4}, {114, -279}, {407, -582}},
-{{407, -582}, {440, -4}, {373, -4}},
-{{407, 3}, {373, -4}, {440, -4}},
-{{699, -279}, {440, -4}, {407, -582}},
-{{699, -279}, {407, -582}, {498, -582}},
-{{498, -582}, {580, -622}, {699, -279}},
-{{699, -279}, {580, -622}, {793, -643}},
-{{670, -665}, {793, -643}, {580, -622}},
-{{793, -643}, {670, -665}, {787, -736}},
-{{787, -736}, {670, -665}, {663, -722}},
-{{787, -736}, {663, -722}, {676, -773}},
-{{676, -773}, {763, -783}, {787, -736}},
-{{676, -773}, {717, -796}, {763, -783}},
-};
-//Glyph: W
-int glyph_W_index = 87;
-int glyph_W_advance_x = 861;
-int glyph_W_advance_y = 0;
-int glyph_W_size = 28;
-Bezier_write glyph_W[] = {
-{{840, -546}, {840, -400}, {786, -261},1 },
-{{786, -261}, {732, -122}, {634, -14},1 },
-{{634, -14}, {617, 5}, {587, 5},1 },
-{{587, 5}, {558, 5}, {542, -14},1 },
-{{542, -14}, {479, -83}, {430, -173},1 },
-{{430, -173}, {383, -83}, {320, -14},1 },
-{{320, -14}, {302, 5}, {273, 5},1 },
-{{273, 5}, {244, 5}, {227, -14},1 },
-{{227, -14}, {128, -121}, {75, -260},1 },
-{{75, -260}, {22, -399}, {22, -546},1 },
-{{22, -546}, {22, -649}, {49, -750},1 },
-{{49, -750}, {62, -800}, {109, -800},1 },
-{{109, -800}, {135, -800}, {153, -782},1 },
-{{153, -782}, {171, -765}, {171, -738},1 },
-{{171, -738}, {171, -728}, {169, -718},1 },
-{{155, -624}, {155, -667}, {169, -718},0 },
-{{232, -442}, {155, -520}, {155, -624},0 },
-{{232, -442}, {285, -550}, {388, -645},1 },
-{{388, -645}, {404, -660}, {430, -660},1 },
-{{430, -660}, {456, -660}, {473, -645},1 },
-{{473, -645}, {575, -550}, {629, -442},1 },
-{{706, -623}, {706, -522}, {629, -442},0 },
-{{693, -718}, {706, -667}, {706, -623},0 },
-{{693, -718}, {690, -729}, {690, -739},1 },
-{{690, -739}, {690, -765}, {708, -782},1 },
-{{708, -782}, {726, -800}, {752, -800},1 },
-{{752, -800}, {799, -800}, {813, -750},1 },
-{{813, -750}, {840, -649}, {840, -546},1 },
-};
-int glyph_W_triangle_size = 30;
-Triangle_write glyph_W_triangles[] = {
-{{75, -260}, {22, -546}, {155, -520}},
-{{22, -546}, {155, -624}, {155, -520}},
-{{155, -624}, {22, -546}, {155, -667}},
-{{22, -546}, {49, -750}, {155, -667}},
-{{155, -667}, {49, -750}, {169, -718}},
-{{169, -718}, {49, -750}, {171, -738}},
-{{171, -738}, {49, -750}, {109, -800}},
-{{171, -738}, {109, -800}, {153, -782}},
-{{75, -260}, {155, -520}, {232, -442}},
-{{75, -260}, {232, -442}, {430, -173}},
-{{430, -173}, {232, -442}, {629, -442}},
-{{388, -645}, {629, -442}, {232, -442}},
-{{629, -442}, {388, -645}, {473, -645}},
-{{473, -645}, {388, -645}, {430, -660}},
-{{430, -173}, {629, -442}, {786, -261}},
-{{629, -442}, {706, -522}, {786, -261}},
-{{786, -261}, {706, -522}, {840, -546}},
-{{706, -522}, {706, -623}, {840, -546}},
-{{840, -546}, {706, -623}, {706, -667}},
-{{840, -546}, {706, -667}, {813, -750}},
-{{706, -667}, {693, -718}, {813, -750}},
-{{690, -739}, {813, -750}, {693, -718}},
-{{813, -750}, {690, -739}, {752, -800}},
-{{752, -800}, {690, -739}, {708, -782}},
-{{786, -261}, {634, -14}, {430, -173}},
-{{634, -14}, {542, -14}, {430, -173}},
-{{587, 5}, {542, -14}, {634, -14}},
-{{227, -14}, {75, -260}, {430, -173}},
-{{320, -14}, {227, -14}, {430, -173}},
-{{273, 5}, {227, -14}, {320, -14}},
-};
-//Glyph: X
-int glyph_X_index = 88;
-int glyph_X_advance_x = 810;
-int glyph_X_advance_y = 0;
-int glyph_X_size = 36;
-Bezier_write glyph_X[] = {
-{{791, -114}, {791, -76}, {785, -50},1 },
-{{785, -50}, {772, 3}, {724, 3},1 },
-{{724, 3}, {698, 3}, {680, -14},1 },
-{{680, -14}, {662, -32}, {662, -59},1 },
-{{662, -59}, {662, -67}, {664, -75},1 },
-{{574, -164}, {674, -124}, {664, -75},0 },
-{{406, -199}, {486, -199}, {574, -164},0 },
-{{237, -164}, {325, -199}, {406, -199},0 },
-{{147, -75}, {136, -124}, {237, -164},0 },
-{{147, -75}, {148, -66}, {148, -58},1 },
-{{148, -58}, {148, -32}, {130, -14},1 },
-{{130, -14}, {113, 3}, {87, 3},1 },
-{{87, 3}, {38, 3}, {27, -50},1 },
-{{27, -50}, {20, -82}, {20, -114},1 },
-{{20, -114}, {20, -245}, {122, -355},1 },
-{{122, -355}, {157, -393}, {203, -425},1 },
-{{203, -425}, {95, -505}, {95, -626},1 },
-{{95, -626}, {95, -684}, {133, -753},1 },
-{{133, -753}, {153, -790}, {190, -790},1 },
-{{190, -790}, {215, -790}, {232, -772},1 },
-{{232, -772}, {250, -754}, {250, -728},1 },
-{{250, -728}, {250, -722}, {248, -710},1 },
-{{246, -692}, {246, -698}, {248, -710},0 },
-{{298, -596}, {246, -639}, {246, -692},0 },
-{{406, -553}, {350, -553}, {298, -596},0 },
-{{513, -596}, {461, -553}, {406, -553},0 },
-{{565, -692}, {565, -639}, {513, -596},0 },
-{{563, -710}, {565, -698}, {565, -692},0 },
-{{563, -710}, {561, -722}, {561, -728},1 },
-{{561, -728}, {561, -754}, {578, -772},1 },
-{{578, -772}, {595, -790}, {620, -790},1 },
-{{620, -790}, {657, -790}, {678, -753},1 },
-{{678, -753}, {716, -685}, {716, -626},1 },
-{{716, -626}, {716, -505}, {608, -425},1 },
-{{608, -425}, {650, -396}, {689, -355},1 },
-{{689, -355}, {791, -246}, {791, -114},1 },
-};
-int glyph_X_triangle_size = 44;
-Triangle_write glyph_X_triangles[] = {
-{{27, -50}, {20, -114}, {136, -124}},
-{{20, -114}, {122, -355}, {136, -124}},
-{{136, -124}, {122, -355}, {237, -164}},
-{{237, -164}, {122, -355}, {325, -199}},
-{{122, -355}, {203, -425}, {325, -199}},
-{{406, -199}, {325, -199}, {203, -425}},
-{{406, -199}, {203, -425}, {350, -553}},
-{{203, -425}, {298, -596}, {350, -553}},
-{{203, -425}, {246, -639}, {298, -596}},
-{{203, -425}, {95, -626}, {246, -639}},
-{{246, -639}, {95, -626}, {246, -692}},
-{{95, -626}, {133, -753}, {246, -692}},
-{{133, -753}, {246, -698}, {246, -692}},
-{{246, -698}, {133, -753}, {248, -710}},
-{{248, -710}, {133, -753}, {190, -790}},
-{{250, -728}, {248, -710}, {190, -790}},
-{{250, -728}, {190, -790}, {232, -772}},
-{{350, -553}, {406, -553}, {406, -199}},
-{{406, -199}, {406, -553}, {461, -553}},
-{{406, -199}, {461, -553}, {608, -425}},
-{{461, -553}, {513, -596}, {608, -425}},
-{{513, -596}, {565, -639}, {608, -425}},
-{{608, -425}, {565, -639}, {716, -626}},
-{{716, -626}, {565, -639}, {565, -692}},
-{{716, -626}, {565, -692}, {678, -753}},
-{{565, -692}, {565, -698}, {678, -753}},
-{{563, -710}, {678, -753}, {565, -698}},
-{{678, -753}, {563, -710}, {620, -790}},
-{{620, -790}, {563, -710}, {561, -728}},
-{{578, -772}, {620, -790}, {561, -728}},
-{{486, -199}, {406, -199}, {608, -425}},
-{{486, -199}, {608, -425}, {689, -355}},
-{{574, -164}, {486, -199}, {689, -355}},
-{{674, -124}, {574, -164}, {689, -355}},
-{{674, -124}, {689, -355}, {791, -114}},
-{{785, -50}, {674, -124}, {791, -114}},
-{{664, -75}, {674, -124}, {785, -50}},
-{{662, -59}, {664, -75}, {785, -50}},
-{{785, -50}, {724, 3}, {662, -59}},
-{{724, 3}, {680, -14}, {662, -59}},
-{{27, -50}, {136, -124}, {147, -75}},
-{{27, -50}, {147, -75}, {148, -58}},
-{{148, -58}, {87, 3}, {27, -50}},
-{{130, -14}, {87, 3}, {148, -58}},
-};
-//Glyph: Y
-int glyph_Y_index = 89;
-int glyph_Y_advance_x = 598;
-int glyph_Y_advance_y = 0;
-int glyph_Y_size = 23;
-Bezier_write glyph_Y[] = {
-{{581, -391}, {581, -224}, {515, -122},1 },
-{{515, -122}, {436, 1}, {278, 1},1 },
-{{175, 1}, {102, 1}, {58, -52},1 },
-{{58, -52}, {17, -102}, {17, -175},1 },
-{{17, -175}, {17, -248}, {59, -299},1 },
-{{59, -299}, {102, -351}, {175, -351},1 },
-{{445, -411}, {424, -351}, {364, -351},0 },
-{{445, -411}, {385, -379}, {313, -379},1 },
-{{313, -379}, {202, -379}, {132, -462},1 },
-{{132, -462}, {66, -542}, {66, -659},1 },
-{{66, -659}, {66, -695}, {73, -731},1 },
-{{73, -731}, {84, -785}, {134, -785},1 },
-{{134, -785}, {160, -785}, {178, -767},1 },
-{{178, -767}, {196, -750}, {196, -724},1 },
-{{196, -724}, {196, -713}, {192, -691},1 },
-{{189, -658}, {189, -670}, {192, -691},0 },
-{{220, -551}, {189, -593}, {189, -658},0 },
-{{315, -504}, {255, -504}, {220, -551},0 },
-{{456, -586}, {405, -504}, {315, -504},0 },
-{{456, -721}, {456, -753}, {475, -770},1 },
-{{475, -770}, {494, -788}, {519, -788},1 },
-{{519, -788}, {544, -788}, {562, -770},1 },
-{{562, -770}, {581, -753}, {581, -721},1 },
-};
-int glyph_Y_triangle_size = 30;
-Triangle_write glyph_Y_triangles[] = {
-{{175, 1}, {58, -52}, {17, -175}},
-{{175, -351}, {175, 1}, {17, -175}},
-{{17, -175}, {59, -299}, {175, -351}},
-{{278, 1}, {175, 1}, {175, -351}},
-{{175, -351}, {364, -351}, {278, 1}},
-{{515, -122}, {278, 1}, {364, -351}},
-{{515, -122}, {364, -351}, {424, -351}},
-{{515, -122}, {424, -351}, {581, -391}},
-{{581, -391}, {424, -351}, {445, -411}},
-{{445, -411}, {456, -586}, {581, -391}},
-{{456, -586}, {581, -721}, {581, -391}},
-{{581, -721}, {456, -586}, {456, -721}},
-{{581, -721}, {456, -721}, {475, -770}},
-{{475, -770}, {562, -770}, {581, -721}},
-{{475, -770}, {519, -788}, {562, -770}},
-{{445, -411}, {405, -504}, {456, -586}},
-{{313, -379}, {405, -504}, {445, -411}},
-{{313, -379}, {315, -504}, {405, -504}},
-{{313, -379}, {255, -504}, {315, -504}},
-{{132, -462}, {255, -504}, {313, -379}},
-{{132, -462}, {220, -551}, {255, -504}},
-{{132, -462}, {189, -593}, {220, -551}},
-{{132, -462}, {66, -659}, {189, -593}},
-{{66, -659}, {189, -658}, {189, -593}},
-{{66, -659}, {189, -670}, {189, -658}},
-{{66, -659}, {73, -731}, {189, -670}},
-{{189, -670}, {73, -731}, {192, -691}},
-{{192, -691}, {73, -731}, {196, -724}},
-{{196, -724}, {73, -731}, {134, -785}},
-{{196, -724}, {134, -785}, {178, -767}},
-};
-//Glyph: Z
-int glyph_Z_index = 90;
-int glyph_Z_advance_x = 658;
-int glyph_Z_advance_y = 0;
-int glyph_Z_size = 19;
-Bezier_write glyph_Z[] = {
-{{642, -177}, {642, -104}, {601, -54},1 },
-{{601, -54}, {557, -1}, {485, -1},1 },
-{{80, -1}, {56, -1}, {36, -20},1 },
-{{36, -20}, {17, -40}, {17, -63},1 },
-{{17, -273}, {17, -373}, {71, -444},1 },
-{{71, -444}, {103, -486}, {195, -555},1 },
-{{322, -661}, {240, -589}, {195, -555},0 },
-{{155, -661}, {123, -661}, {106, -679},1 },
-{{106, -679}, {89, -698}, {89, -723},1 },
-{{89, -723}, {89, -748}, {106, -767},1 },
-{{106, -767}, {123, -786}, {155, -786},1 },
-{{485, -786}, {510, -786}, {527, -766},1 },
-{{527, -766}, {545, -747}, {545, -721},1 },
-{{545, -721}, {545, -694}, {526, -677},1 },
-{{299, -433}, {299, -477}, {335, -508},0 },
-{{325, -374}, {299, -396}, {299, -433},0 },
-{{390, -352}, {351, -352}, {325, -374},0 },
-{{485, -352}, {557, -352}, {601, -299},1 },
-{{601, -299}, {642, -250}, {642, -177},1 },
-};
-int glyph_Z_triangle_size = 27;
-Triangle_write glyph_Z_triangles[] = {
-{{36, -20}, {17, -63}, {80, -1}},
-{{351, -352}, {80, -1}, {17, -63}},
-{{351, -352}, {17, -63}, {325, -374}},
-{{17, -273}, {325, -374}, {17, -63}},
-{{299, -396}, {325, -374}, {17, -273}},
-{{299, -396}, {17, -273}, {71, -444}},
-{{71, -444}, {299, -433}, {299, -396}},
-{{71, -444}, {195, -555}, {299, -433}},
-{{195, -555}, {299, -477}, {299, -433}},
-{{195, -555}, {240, -589}, {299, -477}},
-{{299, -477}, {240, -589}, {335, -508}},
-{{240, -589}, {322, -661}, {335, -508}},
-{{335, -508}, {322, -661}, {526, -677}},
-{{526, -677}, {322, -661}, {485, -786}},
-{{485, -786}, {322, -661}, {155, -786}},
-{{322, -661}, {155, -661}, {155, -786}},
-{{155, -661}, {89, -723}, {155, -786}},
-{{155, -786}, {89, -723}, {106, -767}},
-{{155, -661}, {106, -679}, {89, -723}},
-{{526, -677}, {485, -786}, {527, -766}},
-{{526, -677}, {527, -766}, {545, -721}},
-{{80, -1}, {351, -352}, {485, -1}},
-{{351, -352}, {390, -352}, {485, -1}},
-{{485, -1}, {390, -352}, {485, -352}},
-{{642, -177}, {485, -1}, {485, -352}},
-{{642, -177}, {485, -352}, {601, -299}},
-{{642, -177}, {601, -54}, {485, -1}},
-};
-//Glyph: a
-int glyph_a_index = 97;
-int glyph_a_advance_x = 653;
-int glyph_a_advance_y = 0;
-int glyph_a_size = 29;
-Bezier_write glyph_a[] = {
-{{635, -118}, {635, -70}, {631, -44},1 },
-{{631, -44}, {624, 4}, {581, 4},1 },
-{{581, 4}, {559, 4}, {545, -10},1 },
-{{545, -10}, {532, -25}, {532, -46},1 },
-{{532, -46}, {532, -57}, {534, -78},1 },
-{{536, -109}, {536, -99}, {534, -78},0 },
-{{536, -109}, {536, -116}, {536, -123},1 },
-{{536, -123}, {452, -84}, {327, -84},1 },
-{{327, -84}, {201, -84}, {117, -123},1 },
-{{119, -84}, {117, -110}, {117, -123},0 },
-{{119, -84}, {122, -59}, {122, -47},1 },
-{{122, -47}, {122, -25}, {108, -10},1 },
-{{108, -10}, {94, 4}, {72, 4},1 },
-{{72, 4}, {31, 4}, {23, -44},1 },
-{{23, -44}, {18, -73}, {18, -118},1 },
-{{18, -118}, {18, -273}, {93, -410},1 },
-{{93, -410}, {172, -552}, {301, -630},1 },
-{{301, -630}, {313, -637}, {327, -637},1 },
-{{327, -637}, {341, -637}, {353, -630},1 },
-{{353, -630}, {480, -554}, {560, -410},1 },
-{{560, -410}, {635, -275}, {635, -118},1 },
-{{381, -460}, {404, -438}, {404, -406},0 },
-{{327, -483}, {358, -483}, {381, -460},0 },
-{{272, -460}, {295, -483}, {327, -483},0 },
-{{249, -406}, {249, -438}, {272, -460},0 },
-{{272, -351}, {249, -374}, {249, -406},0 },
-{{327, -329}, {295, -329}, {272, -351},0 },
-{{381, -351}, {359, -329}, {327, -329},0 },
-{{404, -406}, {404, -374}, {381, -351},0 },
-};
-int glyph_a_triangle_size = 39;
-Triangle_write glyph_a_triangles[] = {
-{{119, -84}, {23, -44}, {18, -118}},
-{{119, -84}, {18, -118}, {117, -110}},
-{{18, -118}, {117, -123}, {117, -110}},
-{{18, -118}, {93, -410}, {117, -123}},
-{{117, -123}, {93, -410}, {249, -374}},
-{{93, -410}, {249, -406}, {249, -374}},
-{{93, -410}, {249, -438}, {249, -406}},
-{{249, -438}, {93, -410}, {301, -630}},
-{{272, -460}, {249, -438}, {301, -630}},
-{{295, -483}, {272, -460}, {301, -630}},
-{{295, -483}, {301, -630}, {327, -483}},
-{{327, -483}, {301, -630}, {353, -630}},
-{{353, -630}, {301, -630}, {327, -637}},
-{{327, -483}, {353, -630}, {358, -483}},
-{{381, -460}, {358, -483}, {353, -630}},
-{{353, -630}, {404, -438}, {381, -460}},
-{{353, -630}, {560, -410}, {404, -438}},
-{{404, -406}, {404, -438}, {560, -410}},
-{{404, -374}, {404, -406}, {560, -410}},
-{{536, -123}, {404, -374}, {560, -410}},
-{{536, -123}, {560, -410}, {635, -118}},
-{{536, -109}, {536, -123}, {635, -118}},
-{{536, -99}, {536, -109}, {635, -118}},
-{{631, -44}, {536, -99}, {635, -118}},
-{{534, -78}, {536, -99}, {631, -44}},
-{{532, -46}, {534, -78}, {631, -44}},
-{{631, -44}, {581, 4}, {532, -46}},
-{{581, 4}, {545, -10}, {532, -46}},
-{{381, -351}, {404, -374}, {536, -123}},
-{{359, -329}, {381, -351}, {536, -123}},
-{{359, -329}, {536, -123}, {327, -84}},
-{{327, -84}, {327, -329}, {359, -329}},
-{{295, -329}, {327, -329}, {327, -84}},
-{{295, -329}, {327, -84}, {117, -123}},
-{{117, -123}, {272, -351}, {295, -329}},
-{{117, -123}, {249, -374}, {272, -351}},
-{{23, -44}, {119, -84}, {122, -47}},
-{{122, -47}, {72, 4}, {23, -44}},
-{{108, -10}, {72, 4}, {122, -47}},
-};
-//Glyph: b
-int glyph_b_index = 98;
-int glyph_b_advance_x = 539;
-int glyph_b_advance_y = 0;
-int glyph_b_size = 19;
-Bezier_write glyph_b[] = {
-{{524, -226}, {524, -132}, {457, -65},1 },
-{{457, -65}, {391, 1}, {297, 1},1 },
-{{140, 1}, {83, 1}, {48, -42},1 },
-{{48, -42}, {15, -81}, {15, -140},1 },
-{{15, -140}, {15, -199}, {49, -240},1 },
-{{49, -240}, {84, -281}, {142, -281},1 },
-{{142, -528}, {98, -534}, {98, -577},1 },
-{{98, -577}, {98, -627}, {151, -627},1 },
-{{314, -627}, {372, -627}, {415, -587},1 },
-{{415, -587}, {458, -548}, {458, -490},1 },
-{{458, -490}, {458, -447}, {431, -410},1 },
-{{431, -410}, {524, -341}, {524, -226},1 },
-{{345, -517}, {359, -507}, {359, -490},0 },
-{{314, -528}, {331, -528}, {345, -517},0 },
-{{344, -464}, {329, -454}, {312, -454},0 },
-{{359, -490}, {359, -474}, {344, -464},0 },
-{{297, -354}, {359, -354}, {359, -318},0 },
-{{344, -291}, {329, -281}, {312, -281},0 },
-{{359, -318}, {359, -301}, {344, -291},0 },
-};
-int glyph_b_triangle_size = 37;
-Triangle_write glyph_b_triangles[] = {
-{{142, -281}, {48, -42}, {15, -140}},
-{{49, -240}, {142, -281}, {15, -140}},
-{{140, 1}, {48, -42}, {142, -281}},
-{{140, 1}, {142, -281}, {241, -281}},
-{{142, -281}, {241, -354}, {241, -281}},
-{{241, -354}, {142, -281}, {241, -454}},
-{{142, -281}, {142, -528}, {241, -454}},
-{{142, -528}, {241, -528}, {241, -454}},
-{{241, -528}, {142, -528}, {151, -627}},
-{{142, -528}, {98, -577}, {151, -627}},
-{{314, -627}, {241, -528}, {151, -627}},
-{{241, -528}, {314, -627}, {314, -528}},
-{{331, -528}, {314, -528}, {314, -627}},
-{{415, -587}, {331, -528}, {314, -627}},
-{{345, -517}, {331, -528}, {415, -587}},
-{{359, -507}, {345, -517}, {415, -587}},
-{{458, -490}, {359, -507}, {415, -587}},
-{{458, -490}, {359, -490}, {359, -507}},
-{{359, -474}, {359, -490}, {458, -490}},
-{{431, -410}, {359, -474}, {458, -490}},
-{{431, -410}, {344, -464}, {359, -474}},
-{{359, -354}, {344, -464}, {431, -410}},
-{{359, -318}, {359, -354}, {431, -410}},
-{{524, -226}, {359, -318}, {431, -410}},
-{{524, -226}, {359, -301}, {359, -318}},
-{{524, -226}, {344, -291}, {359, -301}},
-{{524, -226}, {329, -281}, {344, -291}},
-{{457, -65}, {329, -281}, {524, -226}},
-{{329, -281}, {457, -65}, {297, 1}},
-{{297, 1}, {312, -281}, {329, -281}},
-{{297, 1}, {241, -281}, {312, -281}},
-{{297, 1}, {140, 1}, {241, -281}},
-{{329, -454}, {344, -464}, {359, -354}},
-{{359, -354}, {297, -354}, {329, -454}},
-{{297, -354}, {312, -454}, {329, -454}},
-{{312, -454}, {297, -354}, {241, -454}},
-{{297, -354}, {241, -354}, {241, -454}},
-};
-//Glyph: c
-int glyph_c_index = 99;
-int glyph_c_advance_x = 556;
-int glyph_c_advance_y = 0;
-int glyph_c_size = 21;
-Bezier_write glyph_c[] = {
-{{539, -116}, {539, -90}, {523, -74},1 },
-{{523, -74}, {514, -66}, {495, -53},1 },
-{{495, -53}, {417, 1}, {324, 1},1 },
-{{324, 1}, {196, 1}, {106, -92},1 },
-{{106, -92}, {17, -185}, {17, -313},1 },
-{{17, -313}, {17, -435}, {105, -531},1 },
-{{105, -531}, {193, -627}, {314, -627},1 },
-{{314, -627}, {416, -627}, {476, -555},1 },
-{{476, -555}, {491, -536}, {491, -518},1 },
-{{491, -518}, {491, -498}, {476, -484},1 },
-{{476, -484}, {462, -470}, {442, -470},1 },
-{{442, -470}, {425, -470}, {391, -499},1 },
-{{319, -528}, {358, -528}, {391, -499},0 },
-{{231, -492}, {267, -528}, {319, -528},0 },
-{{196, -404}, {196, -456}, {231, -492},0 },
-{{231, -317}, {196, -354}, {196, -404},0 },
-{{316, -281}, {266, -281}, {231, -317},0 },
-{{372, -296}, {344, -281}, {316, -281},0 },
-{{372, -296}, {401, -312}, {412, -312},1 },
-{{412, -312}, {445, -312}, {458, -286},1 },
-{{535, -134}, {539, -127}, {539, -116},1 },
-};
-int glyph_c_triangle_size = 26;
-Triangle_write glyph_c_triangles[] = {
-{{231, -317}, {106, -92}, {17, -313}},
-{{231, -317}, {17, -313}, {196, -354}},
-{{196, -354}, {17, -313}, {196, -404}},
-{{17, -313}, {105, -531}, {196, -404}},
-{{105, -531}, {196, -456}, {196, -404}},
-{{196, -456}, {105, -531}, {231, -492}},
-{{231, -492}, {105, -531}, {267, -528}},
-{{267, -528}, {105, -531}, {314, -627}},
-{{267, -528}, {314, -627}, {319, -528}},
-{{358, -528}, {319, -528}, {314, -627}},
-{{476, -555}, {358, -528}, {314, -627}},
-{{391, -499}, {358, -528}, {476, -555}},
-{{476, -555}, {442, -470}, {391, -499}},
-{{476, -484}, {442, -470}, {476, -555}},
-{{491, -518}, {476, -484}, {476, -555}},
-{{106, -92}, {231, -317}, {266, -281}},
-{{106, -92}, {266, -281}, {324, 1}},
-{{266, -281}, {316, -281}, {324, 1}},
-{{324, 1}, {316, -281}, {344, -281}},
-{{495, -53}, {324, 1}, {344, -281}},
-{{535, -134}, {495, -53}, {344, -281}},
-{{458, -286}, {535, -134}, {344, -281}},
-{{372, -296}, {458, -286}, {344, -281}},
-{{372, -296}, {412, -312}, {458, -286}},
-{{523, -74}, {495, -53}, {535, -134}},
-{{523, -74}, {535, -134}, {539, -116}},
-};
-//Glyph: d
-int glyph_d_index = 100;
-int glyph_d_advance_x = 567;
-int glyph_d_advance_y = 0;
-int glyph_d_size = 15;
-Bezier_write glyph_d[] = {
-{{549, -313}, {549, -185}, {459, -92},1 },
-{{459, -92}, {369, 1}, {242, 1},1 },
-{{144, 1}, {86, 1}, {51, -42},1 },
-{{51, -42}, {18, -81}, {18, -140},1 },
-{{18, -140}, {18, -192}, {45, -231},1 },
-{{45, -231}, {73, -271}, {123, -278},1 },
-{{123, -528}, {64, -528}, {64, -577},1 },
-{{64, -577}, {64, -600}, {79, -613},1 },
-{{79, -613}, {95, -627}, {118, -627},1 },
-{{252, -627}, {375, -627}, {462, -532},1 },
-{{462, -532}, {549, -437}, {549, -313},1 },
-{{334, -492}, {369, -456}, {369, -404},0 },
-{{248, -528}, {300, -528}, {334, -492},0 },
-{{334, -317}, {300, -281}, {251, -281},0 },
-{{369, -404}, {369, -354}, {334, -317},0 },
-};
-int glyph_d_triangle_size = 25;
-Triangle_write glyph_d_triangles[] = {
-{{144, 1}, {51, -42}, {18, -140}},
-{{144, 1}, {18, -140}, {123, -278}},
-{{123, -278}, {18, -140}, {45, -231}},
-{{144, 1}, {123, -278}, {222, -281}},
-{{123, -278}, {123, -528}, {222, -281}},
-{{123, -528}, {222, -528}, {222, -281}},
-{{222, -528}, {123, -528}, {118, -627}},
-{{123, -528}, {64, -577}, {118, -627}},
-{{64, -577}, {79, -613}, {118, -627}},
-{{252, -627}, {222, -528}, {118, -627}},
-{{248, -528}, {222, -528}, {252, -627}},
-{{252, -627}, {300, -528}, {248, -528}},
-{{462, -532}, {300, -528}, {252, -627}},
-{{334, -492}, {300, -528}, {462, -532}},
-{{369, -456}, {334, -492}, {462, -532}},
-{{369, -404}, {369, -456}, {462, -532}},
-{{549, -313}, {369, -404}, {462, -532}},
-{{549, -313}, {369, -354}, {369, -404}},
-{{549, -313}, {334, -317}, {369, -354}},
-{{459, -92}, {334, -317}, {549, -313}},
-{{300, -281}, {334, -317}, {459, -92}},
-{{242, 1}, {300, -281}, {459, -92}},
-{{242, 1}, {251, -281}, {300, -281}},
-{{242, 1}, {222, -281}, {251, -281}},
-{{144, 1}, {222, -281}, {242, 1}},
-};
-//Glyph: e
-int glyph_e_index = 101;
-int glyph_e_advance_x = 422;
-int glyph_e_advance_y = 0;
-int glyph_e_size = 17;
-Bezier_write glyph_e[] = {
-{{407, -140}, {407, -82}, {374, -42},1 },
-{{374, -42}, {339, 1}, {281, 1},1 },
-{{51, 0}, {27, -3}, {20, -18},1 },
-{{20, -18}, {15, -27}, {15, -49},1 },
-{{15, -577}, {15, -596}, {30, -611},1 },
-{{30, -611}, {46, -627}, {65, -627},1 },
-{{333, -627}, {352, -627}, {367, -611},1 },
-{{367, -611}, {383, -596}, {383, -577},1 },
-{{383, -542}, {383, -491}, {335, -490},1 },
-{{335, -490}, {316, -489}, {301, -499},1 },
-{{301, -499}, {286, -510}, {285, -528},1 },
-{{257, -459}, {282, -459}, {296, -444},1 },
-{{296, -444}, {310, -429}, {310, -410},1 },
-{{310, -410}, {310, -389}, {296, -374},1 },
-{{296, -374}, {282, -359}, {257, -359},1 },
-{{281, -281}, {339, -281}, {373, -239},1 },
-{{373, -239}, {407, -198}, {407, -140},1 },
-};
-int glyph_e_triangle_size = 25;
-Triangle_write glyph_e_triangles[] = {
-{{51, 0}, {20, -18}, {15, -49}},
-{{114, -281}, {51, 0}, {15, -49}},
-{{15, -49}, {15, -577}, {114, -281}},
-{{15, -577}, {114, -359}, {114, -281}},
-{{15, -577}, {114, -459}, {114, -359}},
-{{114, -359}, {114, -459}, {257, -459}},
-{{257, -359}, {114, -359}, {257, -459}},
-{{310, -410}, {257, -359}, {257, -459}},
-{{310, -410}, {257, -459}, {296, -444}},
-{{310, -410}, {296, -374}, {257, -359}},
-{{15, -577}, {114, -528}, {114, -459}},
-{{114, -528}, {15, -577}, {65, -627}},
-{{15, -577}, {30, -611}, {65, -627}},
-{{114, -528}, {65, -627}, {333, -627}},
-{{285, -528}, {114, -528}, {333, -627}},
-{{383, -577}, {285, -528}, {333, -627}},
-{{383, -577}, {333, -627}, {367, -611}},
-{{383, -542}, {285, -528}, {383, -577}},
-{{383, -542}, {335, -490}, {285, -528}},
-{{335, -490}, {301, -499}, {285, -528}},
-{{51, 0}, {114, -281}, {281, 1}},
-{{114, -281}, {281, -281}, {281, 1}},
-{{407, -140}, {281, 1}, {281, -281}},
-{{373, -239}, {407, -140}, {281, -281}},
-{{374, -42}, {281, 1}, {407, -140}},
-};
-//Glyph: f
-int glyph_f_index = 102;
-int glyph_f_advance_x = 427;
-int glyph_f_advance_y = 0;
-int glyph_f_size = 13;
-Bezier_write glyph_f[] = {
-{{409, -486}, {409, -428}, {375, -387},1 },
-{{375, -387}, {341, -346}, {283, -346},1 },
-{{260, -302}, {285, -302}, {299, -287},1 },
-{{299, -287}, {313, -272}, {313, -252},1 },
-{{313, -252}, {313, -232}, {299, -217},1 },
-{{299, -217}, {285, -202}, {260, -202},1 },
-{{117, -49}, {117, -24}, {102, -10},1 },
-{{102, -10}, {87, 4}, {66, 4},1 },
-{{66, 4}, {47, 4}, {32, -10},1 },
-{{32, -10}, {18, -24}, {18, -49},1 },
-{{18, -582}, {18, -627}, {66, -627},1 },
-{{283, -627}, {341, -627}, {375, -586},1 },
-{{375, -586}, {409, -545}, {409, -486},1 },
-};
-int glyph_f_triangle_size = 18;
-Triangle_write glyph_f_triangles[] = {
-{{18, -49}, {66, 4}, {32, -10}},
-{{102, -10}, {66, 4}, {18, -49}},
-{{117, -49}, {102, -10}, {18, -49}},
-{{18, -49}, {117, -202}, {117, -49}},
-{{117, -202}, {18, -49}, {117, -302}},
-{{18, -49}, {18, -582}, {117, -302}},
-{{18, -582}, {117, -346}, {117, -302}},
-{{18, -582}, {66, -627}, {117, -346}},
-{{117, -346}, {66, -627}, {283, -627}},
-{{283, -346}, {117, -346}, {283, -627}},
-{{409, -486}, {283, -346}, {283, -627}},
-{{409, -486}, {283, -627}, {375, -586}},
-{{409, -486}, {375, -387}, {283, -346}},
-{{117, -202}, {117, -302}, {260, -302}},
-{{260, -202}, {117, -202}, {260, -302}},
-{{313, -252}, {260, -202}, {260, -302}},
-{{313, -252}, {260, -302}, {299, -287}},
-{{313, -252}, {299, -217}, {260, -202}},
-};
-//Glyph: g
-int glyph_g_index = 103;
-int glyph_g_advance_x = 595;
-int glyph_g_advance_y = 0;
-int glyph_g_size = 21;
-Bezier_write glyph_g[] = {
-{{576, -49}, {576, -19}, {548, -6},1 },
-{{548, -6}, {519, 8}, {496, -10},1 },
-{{465, -34}, {400, 1}, {326, 1},1 },
-{{326, 1}, {199, 1}, {109, -92},1 },
-{{109, -92}, {19, -185}, {19, -313},1 },
-{{19, -313}, {19, -436}, {107, -531},1 },
-{{107, -531}, {195, -627}, {316, -627},1 },
-{{316, -627}, {425, -627}, {490, -542},1 },
-{{490, -542}, {503, -525}, {503, -507},1 },
-{{503, -507}, {503, -487}, {488, -472},1 },
-{{488, -472}, {474, -458}, {454, -458},1 },
-{{454, -458}, {429, -458}, {411, -481},1 },
-{{319, -527}, {375, -527}, {411, -481},0 },
-{{233, -491}, {268, -527}, {319, -527},0 },
-{{198, -404}, {198, -455}, {233, -491},0 },
-{{227, -324}, {198, -359}, {198, -404},0 },
-{{299, -282}, {256, -289}, {227, -324},0 },
-{{299, -344}, {299, -362}, {315, -377},1 },
-{{315, -377}, {331, -393}, {349, -393},1 },
-{{526, -393}, {544, -393}, {560, -377},1 },
-{{560, -377}, {576, -362}, {576, -344},1 },
-};
-int glyph_g_triangle_size = 28;
-Triangle_write glyph_g_triangles[] = {
-{{227, -324}, {109, -92}, {19, -313}},
-{{227, -324}, {19, -313}, {198, -359}},
-{{198, -359}, {19, -313}, {198, -404}},
-{{19, -313}, {107, -531}, {198, -404}},
-{{107, -531}, {198, -455}, {198, -404}},
-{{198, -455}, {107, -531}, {233, -491}},
-{{233, -491}, {107, -531}, {268, -527}},
-{{268, -527}, {107, -531}, {316, -627}},
-{{319, -527}, {268, -527}, {316, -627}},
-{{316, -627}, {375, -527}, {319, -527}},
-{{490, -542}, {375, -527}, {316, -627}},
-{{411, -481}, {375, -527}, {490, -542}},
-{{411, -481}, {490, -542}, {503, -507}},
-{{503, -507}, {454, -458}, {411, -481}},
-{{488, -472}, {454, -458}, {503, -507}},
-{{109, -92}, {227, -324}, {256, -289}},
-{{109, -92}, {256, -289}, {299, -282}},
-{{299, -282}, {326, 1}, {109, -92}},
-{{465, -34}, {326, 1}, {299, -282}},
-{{576, -344}, {465, -34}, {299, -282}},
-{{299, -282}, {526, -393}, {576, -344}},
-{{576, -344}, {526, -393}, {560, -377}},
-{{349, -393}, {526, -393}, {299, -282}},
-{{349, -393}, {299, -282}, {299, -344}},
-{{349, -393}, {299, -344}, {315, -377}},
-{{576, -49}, {465, -34}, {576, -344}},
-{{496, -10}, {465, -34}, {576, -49}},
-{{548, -6}, {496, -10}, {576, -49}},
-};
-//Glyph: h
-int glyph_h_index = 104;
-int glyph_h_advance_x = 470;
-int glyph_h_advance_y = 0;
-int glyph_h_size = 14;
-Bezier_write glyph_h[] = {
-{{449, -49}, {449, -24}, {434, -10},1 },
-{{434, -10}, {419, 4}, {399, 4},1 },
-{{399, 4}, {379, 4}, {364, -10},1 },
-{{364, -10}, {349, -24}, {349, -49},1 },
-{{120, -49}, {120, 4}, {70, 4},1 },
-{{70, 4}, {50, 4}, {35, -10},1 },
-{{35, -10}, {21, -24}, {21, -49},1 },
-{{21, -577}, {21, -602}, {35, -616},1 },
-{{35, -616}, {50, -630}, {70, -630},1 },
-{{70, -630}, {120, -630}, {120, -577},1 },
-{{349, -577}, {349, -602}, {364, -616},1 },
-{{364, -616}, {379, -630}, {399, -630},1 },
-{{399, -630}, {419, -630}, {434, -616},1 },
-{{434, -616}, {449, -602}, {449, -577},1 },
-};
-int glyph_h_triangle_size = 20;
-Triangle_write glyph_h_triangles[] = {
-{{70, 4}, {35, -10}, {21, -49}},
-{{120, -49}, {70, 4}, {21, -49}},
-{{21, -49}, {120, -169}, {120, -49}},
-{{21, -49}, {21, -577}, {120, -169}},
-{{21, -577}, {120, -458}, {120, -169}},
-{{120, -169}, {120, -458}, {349, -458}},
-{{120, -169}, {349, -458}, {349, -169}},
-{{349, -169}, {349, -458}, {449, -577}},
-{{449, -577}, {349, -458}, {349, -577}},
-{{399, -630}, {449, -577}, {349, -577}},
-{{399, -630}, {349, -577}, {364, -616}},
-{{449, -577}, {399, -630}, {434, -616}},
-{{449, -49}, {349, -169}, {449, -577}},
-{{449, -49}, {349, -49}, {349, -169}},
-{{349, -49}, {449, -49}, {399, 4}},
-{{434, -10}, {399, 4}, {449, -49}},
-{{399, 4}, {364, -10}, {349, -49}},
-{{21, -577}, {120, -577}, {120, -458}},
-{{120, -577}, {21, -577}, {70, -630}},
-{{21, -577}, {35, -616}, {70, -630}},
-};
-//Glyph: i
-int glyph_i_index = 105;
-int glyph_i_advance_x = 148;
-int glyph_i_advance_y = 0;
-int glyph_i_size = 6;
-Bezier_write glyph_i[] = {
-{{123, -49}, {123, 4}, {74, 4},1 },
-{{74, 4}, {54, 4}, {39, -10},1 },
-{{39, -10}, {25, -24}, {25, -49},1 },
-{{25, -577}, {25, -602}, {39, -616},1 },
-{{39, -616}, {53, -630}, {74, -630},1 },
-{{74, -630}, {123, -630}, {123, -577},1 },
-};
-int glyph_i_triangle_size = 6;
-Triangle_write glyph_i_triangles[] = {
-{{74, 4}, {39, -10}, {25, -49}},
-{{123, -49}, {74, 4}, {25, -49}},
-{{25, -49}, {123, -577}, {123, -49}},
-{{25, -49}, {25, -577}, {123, -577}},
-{{123, -577}, {25, -577}, {74, -630}},
-{{25, -577}, {39, -616}, {74, -630}},
-};
-//Glyph: j
-int glyph_j_index = 106;
-int glyph_j_advance_x = 430;
-int glyph_j_advance_y = 0;
-int glyph_j_size = 12;
-Bezier_write glyph_j[] = {
-{{410, -313}, {410, -180}, {357, -97},1 },
-{{357, -97}, {294, 1}, {168, 1},1 },
-{{145, 1}, {88, 1}, {52, -42},1 },
-{{52, -42}, {19, -82}, {19, -140},1 },
-{{19, -140}, {19, -198}, {53, -239},1 },
-{{53, -239}, {87, -281}, {145, -281},1 },
-{{310, -404}, {310, -281}, {237, -281},0 },
-{{310, -528}, {252, -528}, {252, -577},1 },
-{{252, -577}, {252, -598}, {266, -612},1 },
-{{266, -612}, {280, -627}, {306, -627},1 },
-{{361, -627}, {379, -627}, {394, -611},1 },
-{{394, -611}, {410, -596}, {410, -577},1 },
-};
-int glyph_j_triangle_size = 16;
-Triangle_write glyph_j_triangles[] = {
-{{145, 1}, {52, -42}, {19, -140}},
-{{19, -140}, {168, 1}, {145, 1}},
-{{145, -281}, {168, 1}, {19, -140}},
-{{19, -140}, {53, -239}, {145, -281}},
-{{145, -281}, {237, -281}, {168, 1}},
-{{357, -97}, {168, 1}, {237, -281}},
-{{357, -97}, {237, -281}, {310, -281}},
-{{357, -97}, {310, -281}, {410, -313}},
-{{410, -313}, {310, -281}, {310, -404}},
-{{310, -404}, {410, -577}, {410, -313}},
-{{310, -404}, {310, -528}, {410, -577}},
-{{410, -577}, {310, -528}, {361, -627}},
-{{310, -528}, {306, -627}, {361, -627}},
-{{310, -528}, {252, -577}, {306, -627}},
-{{252, -577}, {266, -612}, {306, -627}},
-{{410, -577}, {361, -627}, {394, -611}},
-};
-//Glyph: k
-int glyph_k_index = 107;
-int glyph_k_advance_x = 520;
-int glyph_k_advance_y = 0;
-int glyph_k_size = 16;
-Bezier_write glyph_k[] = {
-{{465, -61}, {418, 0}, {353, 0},1 },
-{{353, 0}, {314, 0}, {280, -26},1 },
-{{121, -49}, {121, -24}, {106, -10},1 },
-{{106, -10}, {91, 4}, {71, 4},1 },
-{{71, 4}, {51, 4}, {36, -10},1 },
-{{36, -10}, {21, -24}, {21, -49},1 },
-{{21, -577}, {21, -602}, {36, -616},1 },
-{{36, -616}, {51, -630}, {71, -630},1 },
-{{71, -630}, {91, -630}, {106, -616},1 },
-{{106, -616}, {121, -602}, {121, -577},1 },
-{{286, -606}, {304, -630}, {328, -630},1 },
-{{328, -630}, {348, -630}, {363, -615},1 },
-{{363, -615}, {378, -600}, {378, -580},1 },
-{{378, -580}, {378, -564}, {366, -548},1 },
-{{450, -249}, {499, -212}, {499, -154},1 },
-{{499, -154}, {499, -106}, {465, -61},1 },
-};
-int glyph_k_triangle_size = 21;
-Triangle_write glyph_k_triangles[] = {
-{{21, -49}, {121, -383}, {36, -10}},
-{{121, -146}, {36, -10}, {121, -383}},
-{{121, -146}, {121, -383}, {254, -398}},
-{{254, -398}, {121, -383}, {286, -606}},
-{{254, -398}, {286, -606}, {366, -548}},
-{{366, -548}, {286, -606}, {363, -615}},
-{{286, -606}, {328, -630}, {363, -615}},
-{{366, -548}, {363, -615}, {378, -580}},
-{{121, -146}, {254, -398}, {450, -249}},
-{{280, -26}, {121, -146}, {450, -249}},
-{{450, -249}, {465, -61}, {280, -26}},
-{{353, 0}, {280, -26}, {465, -61}},
-{{465, -61}, {450, -249}, {499, -154}},
-{{121, -49}, {36, -10}, {121, -146}},
-{{121, -49}, {71, 4}, {36, -10}},
-{{106, -10}, {71, 4}, {121, -49}},
-{{71, -630}, {121, -383}, {21, -49}},
-{{71, -630}, {21, -49}, {21, -577}},
-{{36, -616}, {71, -630}, {21, -577}},
-{{71, -630}, {121, -577}, {121, -383}},
-{{71, -630}, {106, -616}, {121, -577}},
-};
-//Glyph: l
-int glyph_l_index = 108;
-int glyph_l_advance_x = 376;
-int glyph_l_advance_y = 0;
-int glyph_l_size = 10;
-Bezier_write glyph_l[] = {
-{{359, -140}, {359, -81}, {326, -42},1 },
-{{326, -42}, {291, 1}, {233, 1},1 },
-{{66, 1}, {48, 1}, {32, -14},1 },
-{{32, -14}, {17, -30}, {17, -49},1 },
-{{17, -577}, {17, -602}, {32, -616},1 },
-{{32, -616}, {47, -631}, {67, -631},1 },
-{{67, -631}, {87, -631}, {102, -616},1 },
-{{102, -616}, {117, -602}, {117, -577},1 },
-{{233, -281}, {291, -281}, {326, -238},1 },
-{{326, -238}, {359, -199}, {359, -140},1 },
-};
-int glyph_l_triangle_size = 12;
-Triangle_write glyph_l_triangles[] = {
-{{17, -49}, {66, 1}, {32, -14}},
-{{17, -49}, {233, 1}, {66, 1}},
-{{326, -42}, {233, 1}, {17, -49}},
-{{117, -281}, {326, -42}, {17, -49}},
-{{67, -631}, {117, -281}, {17, -49}},
-{{67, -631}, {17, -49}, {17, -577}},
-{{32, -616}, {67, -631}, {17, -577}},
-{{67, -631}, {117, -577}, {117, -281}},
-{{67, -631}, {102, -616}, {117, -577}},
-{{233, -281}, {326, -42}, {117, -281}},
-{{326, -42}, {233, -281}, {359, -140}},
-{{359, -140}, {233, -281}, {326, -238}},
-};
-//Glyph: m
-int glyph_m_index = 109;
-int glyph_m_advance_x = 694;
-int glyph_m_advance_y = 0;
-int glyph_m_size = 28;
-Bezier_write glyph_m[] = {
-{{674, -199}, {674, -115}, {653, -37},1 },
-{{653, -37}, {641, 4}, {604, 4},1 },
-{{604, 4}, {583, 4}, {568, -10},1 },
-{{568, -10}, {554, -24}, {554, -45},1 },
-{{554, -45}, {554, -53}, {557, -62},1 },
-{{568, -137}, {568, -103}, {557, -62},0 },
-{{505, -282}, {568, -218}, {568, -137},0 },
-{{505, -282}, {498, -269}, {489, -254},1 },
-{{489, -254}, {446, -181}, {381, -119},1 },
-{{381, -119}, {368, -107}, {346, -107},1 },
-{{346, -107}, {325, -107}, {313, -119},1 },
-{{313, -119}, {247, -183}, {204, -254},1 },
-{{204, -254}, {195, -269}, {188, -282},1 },
-{{126, -135}, {126, -219}, {188, -282},0 },
-{{137, -62}, {126, -101}, {126, -135},0 },
-{{137, -62}, {139, -53}, {139, -45},1 },
-{{139, -45}, {139, -24}, {124, -10},1 },
-{{124, -10}, {110, 4}, {90, 4},1 },
-{{90, 4}, {52, 4}, {41, -37},1 },
-{{41, -37}, {20, -121}, {20, -199},1 },
-{{20, -199}, {20, -444}, {184, -625},1 },
-{{184, -625}, {198, -640}, {221, -640},1 },
-{{221, -640}, {244, -640}, {257, -625},1 },
-{{257, -625}, {311, -565}, {346, -498},1 },
-{{346, -498}, {386, -570}, {436, -625},1 },
-{{436, -625}, {449, -640}, {473, -640},1 },
-{{473, -640}, {496, -640}, {509, -625},1 },
-{{509, -625}, {674, -443}, {674, -199},1 },
-};
-int glyph_m_triangle_size = 30;
-Triangle_write glyph_m_triangles[] = {
-{{41, -37}, {20, -199}, {126, -135}},
-{{20, -199}, {126, -219}, {126, -135}},
-{{188, -282}, {126, -219}, {20, -199}},
-{{188, -282}, {20, -199}, {184, -625}},
-{{184, -625}, {346, -498}, {188, -282}},
-{{204, -254}, {188, -282}, {346, -498}},
-{{346, -498}, {489, -254}, {204, -254}},
-{{313, -119}, {204, -254}, {489, -254}},
-{{381, -119}, {313, -119}, {489, -254}},
-{{346, -107}, {313, -119}, {381, -119}},
-{{505, -282}, {489, -254}, {346, -498}},
-{{505, -282}, {346, -498}, {509, -625}},
-{{509, -625}, {346, -498}, {436, -625}},
-{{509, -625}, {436, -625}, {473, -640}},
-{{509, -625}, {674, -199}, {505, -282}},
-{{568, -218}, {505, -282}, {674, -199}},
-{{568, -137}, {568, -218}, {674, -199}},
-{{568, -103}, {568, -137}, {674, -199}},
-{{653, -37}, {568, -103}, {674, -199}},
-{{557, -62}, {568, -103}, {653, -37}},
-{{557, -62}, {653, -37}, {604, 4}},
-{{604, 4}, {554, -45}, {557, -62}},
-{{604, 4}, {568, -10}, {554, -45}},
-{{346, -498}, {184, -625}, {257, -625}},
-{{257, -625}, {184, -625}, {221, -640}},
-{{126, -101}, {41, -37}, {126, -135}},
-{{41, -37}, {126, -101}, {137, -62}},
-{{41, -37}, {137, -62}, {139, -45}},
-{{124, -10}, {41, -37}, {139, -45}},
-{{90, 4}, {41, -37}, {124, -10}},
-};
-//Glyph: n
-int glyph_n_index = 110;
-int glyph_n_advance_x = 470;
-int glyph_n_advance_y = 0;
-int glyph_n_size = 11;
-Bezier_write glyph_n[] = {
-{{449, -49}, {449, -19}, {420, -6},1 },
-{{420, -6}, {390, 8}, {368, -11},1 },
-{{120, -49}, {120, 4}, {70, 4},1 },
-{{70, 4}, {50, 4}, {35, -10},1 },
-{{35, -10}, {21, -24}, {21, -49},1 },
-{{21, -577}, {21, -608}, {50, -622},1 },
-{{50, -622}, {79, -636}, {103, -615},1 },
-{{349, -577}, {349, -602}, {364, -616},1 },
-{{364, -616}, {379, -630}, {399, -630},1 },
-{{399, -630}, {419, -630}, {434, -616},1 },
-{{434, -616}, {449, -602}, {449, -577},1 },
-};
-int glyph_n_triangle_size = 15;
-Triangle_write glyph_n_triangles[] = {
-{{70, 4}, {35, -10}, {21, -49}},
-{{120, -49}, {70, 4}, {21, -49}},
-{{21, -49}, {120, -220}, {120, -49}},
-{{21, -49}, {21, -577}, {120, -220}},
-{{120, -220}, {21, -577}, {103, -615}},
-{{21, -577}, {50, -622}, {103, -615}},
-{{120, -220}, {103, -615}, {349, -406}},
-{{349, -406}, {368, -11}, {120, -220}},
-{{349, -406}, {449, -49}, {368, -11}},
-{{420, -6}, {368, -11}, {449, -49}},
-{{349, -406}, {449, -577}, {449, -49}},
-{{449, -577}, {349, -406}, {349, -577}},
-{{399, -630}, {449, -577}, {349, -577}},
-{{399, -630}, {349, -577}, {364, -616}},
-{{449, -577}, {399, -630}, {434, -616}},
-};
-//Glyph: o
-int glyph_o_index = 111;
-int glyph_o_advance_x = 653;
-int glyph_o_advance_y = 0;
-int glyph_o_size = 14;
-Bezier_write glyph_o[] = {
-{{635, -182}, {635, -107}, {580, -53},1 },
-{{580, -53}, {526, 1}, {451, 1},1 },
-{{202, 1}, {127, 1}, {72, -53},1 },
-{{72, -53}, {18, -107}, {18, -182},1 },
-{{18, -182}, {18, -317}, {103, -462},1 },
-{{103, -462}, {199, -626}, {326, -626},1 },
-{{326, -626}, {454, -626}, {550, -462},1 },
-{{550, -462}, {635, -318}, {635, -182},1 },
-{{239, -481}, {279, -527}, {326, -527},0 },
-{{200, -389}, {200, -436}, {239, -481},0 },
-{{257, -346}, {200, -346}, {200, -389},0 },
-{{454, -390}, {454, -346}, {396, -346},0 },
-{{413, -482}, {454, -437}, {454, -390},0 },
-{{326, -527}, {372, -527}, {413, -482},0 },
-};
-int glyph_o_triangle_size = 22;
-Triangle_write glyph_o_triangles[] = {
-{{72, -53}, {18, -182}, {200, -346}},
-{{18, -182}, {103, -462}, {200, -346}},
-{{103, -462}, {200, -389}, {200, -346}},
-{{103, -462}, {200, -436}, {200, -389}},
-{{200, -436}, {103, -462}, {239, -481}},
-{{239, -481}, {103, -462}, {279, -527}},
-{{326, -626}, {279, -527}, {103, -462}},
-{{279, -527}, {326, -626}, {326, -527}},
-{{372, -527}, {326, -527}, {326, -626}},
-{{326, -626}, {550, -462}, {372, -527}},
-{{550, -462}, {413, -482}, {372, -527}},
-{{454, -437}, {413, -482}, {550, -462}},
-{{454, -390}, {454, -437}, {550, -462}},
-{{454, -346}, {454, -390}, {550, -462}},
-{{454, -346}, {550, -462}, {635, -182}},
-{{580, -53}, {454, -346}, {635, -182}},
-{{580, -53}, {451, 1}, {454, -346}},
-{{451, 1}, {396, -346}, {454, -346}},
-{{257, -346}, {396, -346}, {451, 1}},
-{{202, 1}, {257, -346}, {451, 1}},
-{{202, 1}, {200, -346}, {257, -346}},
-{{72, -53}, {200, -346}, {202, 1}},
-};
-//Glyph: p
-int glyph_p_index = 112;
-int glyph_p_advance_x = 610;
-int glyph_p_advance_y = 0;
-int glyph_p_size = 19;
-Bezier_write glyph_p[] = {
-{{582, -361}, {582, -252}, {504, -173},1 },
-{{504, -173}, {426, -95}, {317, -95},1 },
-{{317, -95}, {297, -95}, {274, -99},1 },
-{{274, -49}, {274, -30}, {258, -14},1 },
-{{258, -14}, {243, 1}, {225, 1},1 },
-{{178, 1}, {156, 1}, {140, -13},1 },
-{{140, -13}, {125, -27}, {125, -49},1 },
-{{125, -49}, {125, -70}, {139, -84},1 },
-{{139, -84}, {153, -99}, {174, -99},1 },
-{{153, -346}, {96, -346}, {62, -387},1 },
-{{62, -387}, {28, -428}, {28, -486},1 },
-{{28, -486}, {28, -545}, {62, -586},1 },
-{{62, -586}, {96, -627}, {153, -627},1 },
-{{317, -627}, {426, -627}, {504, -548},1 },
-{{504, -548}, {582, -470}, {582, -361},1 },
-{{288, -346}, {390, -346}, {390, -270},0 },
-{{300, -198}, {286, -198}, {274, -201},0 },
-{{362, -217}, {335, -198}, {300, -198},0 },
-{{390, -270}, {390, -237}, {362, -217},0 },
-};
-int glyph_p_triangle_size = 30;
-Triangle_write glyph_p_triangles[] = {
-{{153, -346}, {62, -387}, {28, -486}},
-{{174, -346}, {153, -346}, {28, -486}},
-{{153, -627}, {174, -346}, {28, -486}},
-{{153, -627}, {28, -486}, {62, -586}},
-{{317, -627}, {174, -346}, {153, -627}},
-{{504, -548}, {174, -346}, {317, -627}},
-{{504, -548}, {274, -346}, {174, -346}},
-{{174, -346}, {274, -346}, {274, -201}},
-{{274, -201}, {174, -99}, {174, -346}},
-{{174, -99}, {274, -201}, {274, -99}},
-{{274, -99}, {274, -201}, {286, -198}},
-{{274, -99}, {286, -198}, {300, -198}},
-{{317, -95}, {274, -99}, {300, -198}},
-{{317, -95}, {300, -198}, {335, -198}},
-{{317, -95}, {335, -198}, {362, -217}},
-{{504, -173}, {317, -95}, {362, -217}},
-{{504, -173}, {362, -217}, {390, -237}},
-{{504, -173}, {390, -237}, {390, -270}},
-{{582, -361}, {504, -173}, {390, -270}},
-{{390, -270}, {390, -346}, {582, -361}},
-{{582, -361}, {390, -346}, {504, -548}},
-{{504, -548}, {390, -346}, {288, -346}},
-{{504, -548}, {288, -346}, {274, -346}},
-{{174, -99}, {274, -99}, {274, -49}},
-{{274, -49}, {225, 1}, {174, -99}},
-{{174, -99}, {225, 1}, {178, 1}},
-{{125, -49}, {174, -99}, {178, 1}},
-{{125, -49}, {178, 1}, {140, -13}},
-{{125, -49}, {139, -84}, {174, -99}},
-{{274, -49}, {258, -14}, {225, 1}},
-};
-//Glyph: q
-int glyph_q_index = 113;
-int glyph_q_advance_x = 653;
-int glyph_q_advance_y = 0;
-int glyph_q_size = 26;
-Bezier_write glyph_q[] = {
-{{634, -426}, {627, -355}, {599, -275},1 },
-{{599, -275}, {568, -184}, {522, -119},1 },
-{{522, -119}, {545, -69}, {545, -20},1 },
-{{545, -20}, {545, 5}, {530, 19},1 },
-{{530, 19}, {515, 34}, {495, 34},1 },
-{{495, 34}, {475, 34}, {460, 19},1 },
-{{460, 19}, {445, 5}, {445, -20},1 },
-{{444, -39}, {445, -26}, {445, -20},0 },
-{{444, -39}, {390, 1}, {326, 1},1 },
-{{326, 1}, {198, 1}, {107, -157},1 },
-{{107, -157}, {33, -283}, {19, -426},1 },
-{{19, -426}, {11, -505}, {66, -565},1 },
-{{66, -565}, {121, -626}, {202, -626},1 },
-{{451, -626}, {532, -626}, {587, -565},1 },
-{{587, -565}, {642, -505}, {634, -426},1 },
-{{397, -279}, {458, -279}, {453, -229},0 },
-{{201, -229}, {196, -279}, {257, -279},0 },
-{{242, -142}, {205, -182}, {201, -229},0 },
-{{326, -99}, {281, -99}, {242, -142},0 },
-{{391, -122}, {360, -99}, {326, -99},0 },
-{{321, -144}, {359, -144}, {391, -122},0 },
-{{321, -144}, {296, -144}, {282, -158},1 },
-{{282, -158}, {269, -173}, {269, -194},1 },
-{{269, -194}, {269, -243}, {321, -243},1 },
-{{321, -243}, {391, -243}, {447, -204},1 },
-{{453, -229}, {452, -217}, {447, -204},0 },
-};
-int glyph_q_triangle_size = 36;
-Triangle_write glyph_q_triangles[] = {
-{{107, -157}, {19, -426}, {196, -279}},
-{{19, -426}, {66, -565}, {196, -279}},
-{{196, -279}, {66, -565}, {202, -626}},
-{{257, -279}, {196, -279}, {202, -626}},
-{{202, -626}, {451, -626}, {257, -279}},
-{{451, -626}, {397, -279}, {257, -279}},
-{{451, -626}, {458, -279}, {397, -279}},
-{{458, -279}, {451, -626}, {587, -565}},
-{{634, -426}, {458, -279}, {587, -565}},
-{{599, -275}, {458, -279}, {634, -426}},
-{{599, -275}, {453, -229}, {458, -279}},
-{{599, -275}, {452, -217}, {453, -229}},
-{{522, -119}, {452, -217}, {599, -275}},
-{{447, -204}, {452, -217}, {522, -119}},
-{{391, -122}, {447, -204}, {522, -119}},
-{{444, -39}, {391, -122}, {522, -119}},
-{{522, -119}, {545, -20}, {444, -39}},
-{{545, -20}, {445, -26}, {444, -39}},
-{{545, -20}, {445, -20}, {445, -26}},
-{{460, 19}, {445, -20}, {545, -20}},
-{{530, 19}, {460, 19}, {545, -20}},
-{{495, 34}, {460, 19}, {530, 19}},
-{{360, -99}, {391, -122}, {444, -39}},
-{{326, 1}, {360, -99}, {444, -39}},
-{{326, 1}, {326, -99}, {360, -99}},
-{{281, -99}, {326, -99}, {326, 1}},
-{{281, -99}, {326, 1}, {107, -157}},
-{{107, -157}, {242, -142}, {281, -99}},
-{{107, -157}, {205, -182}, {242, -142}},
-{{107, -157}, {201, -229}, {205, -182}},
-{{107, -157}, {196, -279}, {201, -229}},
-{{391, -122}, {359, -144}, {447, -204}},
-{{447, -204}, {359, -144}, {321, -243}},
-{{359, -144}, {321, -144}, {321, -243}},
-{{321, -144}, {269, -194}, {321, -243}},
-{{321, -144}, {282, -158}, {269, -194}},
-};
-//Glyph: r
-int glyph_r_index = 114;
-int glyph_r_advance_x = 584;
-int glyph_r_advance_y = 0;
-int glyph_r_size = 25;
-Bezier_write glyph_r[] = {
-{{570, -361}, {570, -295}, {539, -237},1 },
-{{539, -237}, {508, -179}, {454, -142},1 },
-{{454, -142}, {490, -101}, {490, -49},1 },
-{{490, -49}, {490, -26}, {476, -11},1 },
-{{476, -11}, {462, 4}, {439, 4},1 },
-{{439, 4}, {417, 4}, {403, -11},1 },
-{{403, -11}, {390, -26}, {390, -49},1 },
-{{372, -84}, {390, -69}, {390, -49},0 },
-{{334, -99}, {355, -99}, {372, -84},0 },
-{{261, -49}, {261, -30}, {245, -14},1 },
-{{245, -14}, {230, 1}, {211, 1},1 },
-{{165, 1}, {142, 1}, {127, -12},1 },
-{{127, -12}, {112, -26}, {112, -49},1 },
-{{112, -49}, {112, -70}, {126, -84},1 },
-{{126, -84}, {140, -99}, {162, -99},1 },
-{{140, -346}, {83, -346}, {48, -387},1 },
-{{48, -387}, {14, -428}, {14, -486},1 },
-{{14, -486}, {14, -545}, {48, -586},1 },
-{{48, -586}, {83, -627}, {140, -627},1 },
-{{304, -627}, {413, -627}, {491, -548},1 },
-{{491, -548}, {570, -470}, {570, -361},1 },
-{{275, -346}, {376, -346}, {376, -270},0 },
-{{287, -198}, {273, -198}, {261, -201},0 },
-{{347, -216}, {322, -198}, {287, -198},0 },
-{{376, -270}, {376, -237}, {347, -216},0 },
-};
-int glyph_r_triangle_size = 39;
-Triangle_write glyph_r_triangles[] = {
-{{140, -346}, {48, -387}, {14, -486}},
-{{162, -346}, {140, -346}, {14, -486}},
-{{140, -627}, {162, -346}, {14, -486}},
-{{140, -627}, {14, -486}, {48, -586}},
-{{304, -627}, {162, -346}, {140, -627}},
-{{491, -548}, {162, -346}, {304, -627}},
-{{491, -548}, {261, -346}, {162, -346}},
-{{162, -346}, {261, -346}, {261, -201}},
-{{261, -201}, {162, -99}, {162, -346}},
-{{162, -99}, {261, -201}, {261, -99}},
-{{261, -99}, {261, -201}, {273, -198}},
-{{261, -99}, {273, -198}, {287, -198}},
-{{334, -99}, {261, -99}, {287, -198}},
-{{287, -198}, {322, -198}, {334, -99}},
-{{355, -99}, {334, -99}, {322, -198}},
-{{322, -198}, {347, -216}, {355, -99}},
-{{454, -142}, {355, -99}, {347, -216}},
-{{454, -142}, {347, -216}, {376, -237}},
-{{454, -142}, {376, -237}, {539, -237}},
-{{539, -237}, {376, -237}, {376, -270}},
-{{539, -237}, {376, -270}, {376, -346}},
-{{376, -346}, {570, -361}, {539, -237}},
-{{570, -361}, {376, -346}, {491, -548}},
-{{491, -548}, {376, -346}, {275, -346}},
-{{491, -548}, {275, -346}, {261, -346}},
-{{372, -84}, {355, -99}, {454, -142}},
-{{390, -69}, {372, -84}, {454, -142}},
-{{490, -49}, {390, -69}, {454, -142}},
-{{490, -49}, {390, -49}, {390, -69}},
-{{390, -49}, {490, -49}, {439, 4}},
-{{490, -49}, {476, -11}, {439, 4}},
-{{390, -49}, {439, 4}, {403, -11}},
-{{162, -99}, {261, -99}, {261, -49}},
-{{261, -49}, {211, 1}, {162, -99}},
-{{162, -99}, {211, 1}, {165, 1}},
-{{112, -49}, {162, -99}, {165, 1}},
-{{112, -49}, {165, 1}, {127, -12}},
-{{112, -49}, {126, -84}, {162, -99}},
-{{261, -49}, {245, -14}, {211, 1}},
-};
-//Glyph: s
-int glyph_s_index = 115;
-int glyph_s_advance_x = 544;
-int glyph_s_advance_y = 0;
-int glyph_s_size = 23;
-Bezier_write glyph_s[] = {
-{{519, -217}, {519, -127}, {455, -63},1 },
-{{455, -63}, {391, 1}, {302, 1},1 },
-{{150, 1}, {92, 1}, {57, -42},1 },
-{{57, -42}, {25, -81}, {25, -140},1 },
-{{25, -140}, {25, -199}, {58, -240},1 },
-{{58, -240}, {92, -281}, {150, -281},1 },
-{{321, -303}, {317, -281}, {290, -281},0 },
-{{287, -338}, {325, -324}, {321, -303},0 },
-{{287, -338}, {271, -343}, {249, -352},1 },
-{{249, -352}, {202, -370}, {173, -406},1 },
-{{173, -406}, {144, -442}, {144, -487},1 },
-{{144, -487}, {144, -500}, {146, -513},1 },
-{{146, -513}, {156, -564}, {197, -595},1 },
-{{197, -595}, {239, -627}, {292, -627},1 },
-{{350, -627}, {375, -627}, {388, -612},1 },
-{{388, -612}, {402, -598}, {402, -578},1 },
-{{402, -578}, {402, -557}, {388, -542},1 },
-{{388, -542}, {375, -528}, {350, -528},1 },
-{{244, -494}, {251, -528}, {292, -528},0 },
-{{284, -444}, {238, -463}, {244, -494},0 },
-{{284, -444}, {296, -440}, {320, -431},1 },
-{{320, -431}, {422, -395}, {459, -363},1 },
-{{459, -363}, {519, -312}, {519, -217},1 },
-};
-int glyph_s_triangle_size = 29;
-Triangle_write glyph_s_triangles[] = {
-{{150, -281}, {57, -42}, {25, -140}},
-{{150, -281}, {25, -140}, {58, -240}},
-{{150, 1}, {57, -42}, {150, -281}},
-{{150, 1}, {150, -281}, {290, -281}},
-{{290, -281}, {302, 1}, {150, 1}},
-{{317, -281}, {302, 1}, {290, -281}},
-{{317, -281}, {455, -63}, {302, 1}},
-{{455, -63}, {317, -281}, {519, -217}},
-{{519, -217}, {317, -281}, {459, -363}},
-{{459, -363}, {317, -281}, {321, -303}},
-{{321, -303}, {325, -324}, {459, -363}},
-{{459, -363}, {325, -324}, {320, -431}},
-{{325, -324}, {287, -338}, {320, -431}},
-{{320, -431}, {287, -338}, {284, -444}},
-{{287, -338}, {249, -352}, {284, -444}},
-{{249, -352}, {238, -463}, {284, -444}},
-{{173, -406}, {238, -463}, {249, -352}},
-{{173, -406}, {144, -487}, {238, -463}},
-{{238, -463}, {144, -487}, {244, -494}},
-{{144, -487}, {146, -513}, {244, -494}},
-{{244, -494}, {146, -513}, {251, -528}},
-{{146, -513}, {197, -595}, {251, -528}},
-{{251, -528}, {197, -595}, {292, -627}},
-{{292, -627}, {292, -528}, {251, -528}},
-{{350, -627}, {292, -528}, {292, -627}},
-{{292, -528}, {350, -627}, {350, -528}},
-{{388, -612}, {350, -528}, {350, -627}},
-{{388, -612}, {402, -578}, {350, -528}},
-{{402, -578}, {388, -542}, {350, -528}},
-};
-//Glyph: t
-int glyph_t_index = 116;
-int glyph_t_advance_x = 574;
-int glyph_t_advance_y = 0;
-int glyph_t_size = 12;
-Bezier_write glyph_t[] = {
-{{560, -487}, {560, -428}, {527, -388},1 },
-{{527, -388}, {491, -346}, {433, -346},1 },
-{{337, -49}, {337, -24}, {322, -10},1 },
-{{322, -10}, {307, 4}, {287, 4},1 },
-{{287, 4}, {267, 4}, {252, -10},1 },
-{{252, -10}, {237, -24}, {237, -49},1 },
-{{140, -346}, {82, -346}, {48, -387},1 },
-{{48, -387}, {14, -428}, {14, -487},1 },
-{{14, -487}, {14, -546}, {48, -586},1 },
-{{48, -586}, {82, -627}, {140, -627},1 },
-{{433, -627}, {491, -627}, {527, -585},1 },
-{{527, -585}, {560, -546}, {560, -487},1 },
-};
-int glyph_t_triangle_size = 15;
-Triangle_write glyph_t_triangles[] = {
-{{140, -346}, {48, -387}, {14, -487}},
-{{140, -627}, {140, -346}, {14, -487}},
-{{140, -627}, {14, -487}, {48, -586}},
-{{433, -627}, {140, -346}, {140, -627}},
-{{433, -627}, {237, -346}, {140, -346}},
-{{433, -627}, {337, -346}, {237, -346}},
-{{237, -49}, {237, -346}, {337, -346}},
-{{237, -49}, {337, -346}, {337, -49}},
-{{237, -49}, {337, -49}, {287, 4}},
-{{322, -10}, {287, 4}, {337, -49}},
-{{287, 4}, {252, -10}, {237, -49}},
-{{433, -627}, {433, -346}, {337, -346}},
-{{560, -487}, {433, -346}, {433, -627}},
-{{560, -487}, {433, -627}, {527, -585}},
-{{560, -487}, {527, -388}, {433, -346}},
-};
-//Glyph: u
-int glyph_u_index = 117;
-int glyph_u_advance_x = 653;
-int glyph_u_advance_y = 0;
-int glyph_u_size = 20;
-Bezier_write glyph_u[] = {
-{{635, -214}, {642, -132}, {589, -67},1 },
-{{589, -67}, {533, 1}, {452, 1},1 },
-{{201, 1}, {120, 1}, {64, -67},1 },
-{{64, -67}, {11, -132}, {18, -214},1 },
-{{18, -214}, {37, -417}, {149, -602},1 },
-{{149, -602}, {166, -630}, {194, -630},1 },
-{{194, -630}, {214, -630}, {229, -615},1 },
-{{229, -615}, {244, -601}, {244, -581},1 },
-{{244, -581}, {244, -566}, {235, -551},1 },
-{{204, -462}, {204, -499}, {235, -551},0 },
-{{244, -386}, {203, -418}, {204, -462},0 },
-{{327, -356}, {281, -356}, {244, -386},0 },
-{{410, -386}, {372, -356}, {327, -356},0 },
-{{449, -461}, {449, -417}, {410, -386},0 },
-{{418, -551}, {449, -499}, {449, -461},0 },
-{{418, -551}, {409, -566}, {409, -581},1 },
-{{409, -581}, {409, -601}, {424, -616},1 },
-{{424, -616}, {439, -631}, {459, -631},1 },
-{{459, -631}, {487, -631}, {504, -602},1 },
-{{504, -602}, {617, -412}, {635, -214},1 },
-};
-int glyph_u_triangle_size = 25;
-Triangle_write glyph_u_triangles[] = {
-{{18, -214}, {281, -356}, {64, -67}},
-{{201, 1}, {64, -67}, {281, -356}},
-{{201, 1}, {281, -356}, {327, -356}},
-{{452, 1}, {201, 1}, {327, -356}},
-{{452, 1}, {327, -356}, {372, -356}},
-{{589, -67}, {452, 1}, {372, -356}},
-{{589, -67}, {372, -356}, {635, -214}},
-{{635, -214}, {372, -356}, {410, -386}},
-{{635, -214}, {410, -386}, {449, -417}},
-{{635, -214}, {449, -417}, {449, -461}},
-{{635, -214}, {449, -461}, {504, -602}},
-{{449, -461}, {449, -499}, {504, -602}},
-{{449, -499}, {418, -551}, {504, -602}},
-{{504, -602}, {418, -551}, {409, -581}},
-{{424, -616}, {504, -602}, {409, -581}},
-{{504, -602}, {424, -616}, {459, -631}},
-{{281, -356}, {18, -214}, {244, -386}},
-{{244, -386}, {18, -214}, {203, -418}},
-{{203, -418}, {18, -214}, {204, -462}},
-{{204, -462}, {18, -214}, {149, -602}},
-{{149, -602}, {204, -499}, {204, -462}},
-{{204, -499}, {149, -602}, {235, -551}},
-{{235, -551}, {149, -602}, {229, -615}},
-{{149, -602}, {194, -630}, {229, -615}},
-{{235, -551}, {229, -615}, {244, -581}},
-};
-//Glyph: v
-int glyph_v_index = 118;
-int glyph_v_advance_x = 662;
-int glyph_v_advance_y = 0;
-int glyph_v_size = 20;
-Bezier_write glyph_v[] = {
-{{635, -589}, {640, -552}, {640, -514},1 },
-{{640, -514}, {640, -358}, {564, -222},1 },
-{{564, -222}, {489, -86}, {358, -3},1 },
-{{358, -3}, {348, 3}, {331, 3},1 },
-{{331, 3}, {314, 3}, {304, -3},1 },
-{{304, -3}, {173, -86}, {97, -222},1 },
-{{97, -222}, {22, -359}, {22, -515},1 },
-{{22, -515}, {22, -552}, {27, -589},1 },
-{{27, -589}, {30, -614}, {46, -626},1 },
-{{46, -626}, {63, -639}, {83, -637},1 },
-{{83, -637}, {103, -634}, {116, -618},1 },
-{{116, -618}, {129, -603}, {126, -578},1 },
-{{192, -497}, {120, -532}, {126, -578},0 },
-{{331, -466}, {258, -466}, {192, -497},0 },
-{{469, -497}, {404, -466}, {331, -466},0 },
-{{536, -578}, {542, -532}, {469, -497},0 },
-{{536, -578}, {533, -603}, {546, -618},1 },
-{{546, -618}, {559, -634}, {579, -637},1 },
-{{579, -637}, {599, -639}, {615, -626},1 },
-{{615, -626}, {632, -614}, {635, -589},1 },
-};
-int glyph_v_triangle_size = 22;
-Triangle_write glyph_v_triangles[] = {
-{{192, -497}, {97, -222}, {22, -515}},
-{{192, -497}, {22, -515}, {120, -532}},
-{{120, -532}, {22, -515}, {27, -589}},
-{{126, -578}, {120, -532}, {27, -589}},
-{{126, -578}, {27, -589}, {46, -626}},
-{{126, -578}, {46, -626}, {116, -618}},
-{{46, -626}, {83, -637}, {116, -618}},
-{{97, -222}, {192, -497}, {258, -466}},
-{{331, -466}, {97, -222}, {258, -466}},
-{{304, -3}, {97, -222}, {331, -466}},
-{{331, -466}, {358, -3}, {304, -3}},
-{{331, 3}, {304, -3}, {358, -3}},
-{{564, -222}, {358, -3}, {331, -466}},
-{{564, -222}, {331, -466}, {404, -466}},
-{{404, -466}, {469, -497}, {564, -222}},
-{{564, -222}, {469, -497}, {640, -514}},
-{{542, -532}, {640, -514}, {469, -497}},
-{{640, -514}, {542, -532}, {635, -589}},
-{{635, -589}, {542, -532}, {536, -578}},
-{{615, -626}, {635, -589}, {536, -578}},
-{{536, -578}, {546, -618}, {615, -626}},
-{{546, -618}, {579, -637}, {615, -626}},
-};
-//Glyph: w
-int glyph_w_index = 119;
-int glyph_w_advance_x = 690;
-int glyph_w_advance_y = 0;
-int glyph_w_size = 26;
-Bezier_write glyph_w[] = {
-{{672, -437}, {672, -193}, {507, -11},1 },
-{{507, -11}, {494, 4}, {471, 4},1 },
-{{471, 4}, {447, 4}, {434, -11},1 },
-{{434, -11}, {384, -66}, {344, -138},1 },
-{{344, -138}, {307, -67}, {256, -11},1 },
-{{256, -11}, {242, 4}, {219, 4},1 },
-{{219, 4}, {196, 4}, {182, -11},1 },
-{{182, -11}, {18, -190}, {18, -437},1 },
-{{18, -437}, {18, -519}, {39, -600},1 },
-{{39, -600}, {50, -640}, {88, -640},1 },
-{{88, -640}, {108, -640}, {123, -626},1 },
-{{123, -626}, {138, -612}, {138, -591},1 },
-{{138, -591}, {138, -583}, {135, -574},1 },
-{{125, -499}, {125, -534}, {135, -574},0 },
-{{186, -354}, {125, -416}, {125, -499},0 },
-{{186, -354}, {229, -440}, {311, -516},1 },
-{{311, -516}, {323, -528}, {345, -528},1 },
-{{345, -528}, {366, -528}, {379, -516},1 },
-{{379, -516}, {460, -440}, {503, -354},1 },
-{{566, -499}, {566, -417}, {503, -354},0 },
-{{555, -574}, {566, -533}, {566, -499},0 },
-{{555, -574}, {552, -583}, {552, -591},1 },
-{{552, -591}, {552, -612}, {566, -626},1 },
-{{566, -626}, {581, -640}, {602, -640},1 },
-{{602, -640}, {640, -640}, {651, -600},1 },
-{{651, -600}, {672, -519}, {672, -437},1 },
-};
-int glyph_w_triangle_size = 28;
-Triangle_write glyph_w_triangles[] = {
-{{182, -11}, {18, -437}, {186, -354}},
-{{186, -354}, {18, -437}, {125, -416}},
-{{18, -437}, {125, -499}, {125, -416}},
-{{125, -499}, {18, -437}, {125, -534}},
-{{18, -437}, {39, -600}, {125, -534}},
-{{125, -534}, {39, -600}, {135, -574}},
-{{39, -600}, {88, -640}, {135, -574}},
-{{88, -640}, {123, -626}, {135, -574}},
-{{135, -574}, {123, -626}, {138, -591}},
-{{182, -11}, {186, -354}, {344, -138}},
-{{344, -138}, {186, -354}, {503, -354}},
-{{186, -354}, {311, -516}, {503, -354}},
-{{503, -354}, {311, -516}, {379, -516}},
-{{379, -516}, {311, -516}, {345, -528}},
-{{507, -11}, {344, -138}, {503, -354}},
-{{672, -437}, {507, -11}, {503, -354}},
-{{672, -437}, {503, -354}, {566, -417}},
-{{566, -417}, {566, -499}, {672, -437}},
-{{672, -437}, {566, -499}, {566, -533}},
-{{672, -437}, {566, -533}, {651, -600}},
-{{566, -533}, {555, -574}, {651, -600}},
-{{555, -574}, {602, -640}, {651, -600}},
-{{602, -640}, {555, -574}, {552, -591}},
-{{602, -640}, {552, -591}, {566, -626}},
-{{507, -11}, {434, -11}, {344, -138}},
-{{471, 4}, {434, -11}, {507, -11}},
-{{256, -11}, {182, -11}, {344, -138}},
-{{219, 4}, {182, -11}, {256, -11}},
-};
-//Glyph: x
-int glyph_x_index = 120;
-int glyph_x_advance_x = 653;
-int glyph_x_advance_y = 0;
-int glyph_x_size = 35;
-Bezier_write glyph_x[] = {
-{{635, -91}, {635, -60}, {630, -40},1 },
-{{630, -40}, {620, 3}, {582, 3},1 },
-{{582, 3}, {561, 3}, {546, -11},1 },
-{{546, -11}, {532, -26}, {532, -47},1 },
-{{532, -47}, {532, -53}, {533, -60},1 },
-{{461, -131}, {542, -99}, {533, -60},0 },
-{{327, -159}, {391, -159}, {461, -131},0 },
-{{192, -131}, {262, -159}, {327, -159},0 },
-{{120, -60}, {111, -99}, {192, -131},0 },
-{{120, -60}, {121, -53}, {121, -47},1 },
-{{121, -47}, {121, -26}, {107, -11},1 },
-{{107, -11}, {93, 3}, {72, 3},1 },
-{{72, 3}, {33, 3}, {24, -40},1 },
-{{24, -40}, {18, -66}, {18, -91},1 },
-{{18, -91}, {18, -238}, {165, -340},1 },
-{{165, -340}, {78, -404}, {78, -501},1 },
-{{78, -501}, {78, -547}, {109, -602},1 },
-{{109, -602}, {125, -632}, {154, -632},1 },
-{{154, -632}, {175, -632}, {189, -617},1 },
-{{189, -617}, {203, -603}, {203, -582},1 },
-{{203, -582}, {203, -578}, {201, -568},1 },
-{{200, -553}, {200, -558}, {201, -568},0 },
-{{241, -476}, {200, -511}, {200, -553},0 },
-{{327, -442}, {282, -442}, {241, -476},0 },
-{{412, -476}, {371, -442}, {327, -442},0 },
-{{454, -553}, {454, -511}, {412, -476},0 },
-{{452, -568}, {454, -558}, {454, -553},0 },
-{{452, -568}, {451, -578}, {451, -583},1 },
-{{451, -583}, {451, -603}, {464, -617},1 },
-{{464, -617}, {478, -632}, {498, -632},1 },
-{{498, -632}, {528, -632}, {544, -602},1 },
-{{544, -602}, {575, -548}, {575, -501},1 },
-{{575, -501}, {575, -404}, {488, -340},1 },
-{{488, -340}, {522, -317}, {553, -284},1 },
-{{553, -284}, {635, -197}, {635, -91},1 },
-};
-int glyph_x_triangle_size = 43;
-Triangle_write glyph_x_triangles[] = {
-{{24, -40}, {18, -91}, {111, -99}},
-{{111, -99}, {18, -91}, {165, -340}},
-{{111, -99}, {165, -340}, {192, -131}},
-{{192, -131}, {165, -340}, {262, -159}},
-{{327, -159}, {262, -159}, {165, -340}},
-{{327, -159}, {165, -340}, {282, -442}},
-{{165, -340}, {241, -476}, {282, -442}},
-{{165, -340}, {200, -511}, {241, -476}},
-{{165, -340}, {78, -501}, {200, -511}},
-{{200, -511}, {78, -501}, {200, -553}},
-{{78, -501}, {109, -602}, {200, -553}},
-{{109, -602}, {200, -558}, {200, -553}},
-{{200, -558}, {109, -602}, {201, -568}},
-{{201, -568}, {109, -602}, {154, -632}},
-{{203, -582}, {201, -568}, {154, -632}},
-{{203, -582}, {154, -632}, {189, -617}},
-{{282, -442}, {327, -442}, {327, -159}},
-{{327, -159}, {327, -442}, {371, -442}},
-{{327, -159}, {371, -442}, {488, -340}},
-{{371, -442}, {412, -476}, {488, -340}},
-{{412, -476}, {454, -511}, {488, -340}},
-{{488, -340}, {454, -511}, {575, -501}},
-{{575, -501}, {454, -511}, {454, -553}},
-{{575, -501}, {454, -553}, {544, -602}},
-{{454, -553}, {454, -558}, {544, -602}},
-{{452, -568}, {544, -602}, {454, -558}},
-{{544, -602}, {452, -568}, {498, -632}},
-{{498, -632}, {452, -568}, {451, -583}},
-{{464, -617}, {498, -632}, {451, -583}},
-{{391, -159}, {327, -159}, {488, -340}},
-{{391, -159}, {488, -340}, {553, -284}},
-{{461, -131}, {391, -159}, {553, -284}},
-{{542, -99}, {461, -131}, {553, -284}},
-{{542, -99}, {553, -284}, {635, -91}},
-{{630, -40}, {542, -99}, {635, -91}},
-{{533, -60}, {542, -99}, {630, -40}},
-{{532, -47}, {533, -60}, {630, -40}},
-{{630, -40}, {582, 3}, {532, -47}},
-{{582, 3}, {546, -11}, {532, -47}},
-{{24, -40}, {111, -99}, {120, -60}},
-{{24, -40}, {120, -60}, {121, -47}},
-{{121, -47}, {72, 3}, {24, -40}},
-{{107, -11}, {72, 3}, {121, -47}},
-};
-//Glyph: y
-int glyph_y_index = 121;
-int glyph_y_advance_x = 496;
-int glyph_y_advance_y = 0;
-int glyph_y_size = 23;
-Bezier_write glyph_y[] = {
-{{474, -313}, {474, -180}, {420, -97},1 },
-{{420, -97}, {357, 1}, {231, 1},1 },
-{{149, 1}, {91, 1}, {55, -42},1 },
-{{55, -42}, {22, -81}, {22, -140},1 },
-{{22, -140}, {22, -199}, {55, -238},1 },
-{{55, -238}, {91, -281}, {149, -281},1 },
-{{365, -329}, {348, -281}, {300, -281},0 },
-{{365, -329}, {317, -303}, {259, -303},1 },
-{{259, -303}, {171, -303}, {115, -370},1 },
-{{115, -370}, {61, -434}, {61, -527},1 },
-{{61, -527}, {61, -556}, {67, -585},1 },
-{{67, -585}, {72, -609}, {89, -620},1 },
-{{89, -620}, {106, -631}, {126, -627},1 },
-{{126, -627}, {165, -620}, {165, -579},1 },
-{{165, -579}, {165, -571}, {162, -553},1 },
-{{160, -527}, {160, -536}, {162, -553},0 },
-{{186, -439}, {160, -475}, {160, -527},0 },
-{{261, -403}, {213, -403}, {186, -439},0 },
-{{374, -469}, {333, -403}, {261, -403},0 },
-{{374, -577}, {374, -602}, {389, -616},1 },
-{{389, -616}, {404, -630}, {424, -630},1 },
-{{424, -630}, {444, -630}, {459, -616},1 },
-{{459, -616}, {474, -602}, {474, -577},1 },
-};
-int glyph_y_triangle_size = 30;
-Triangle_write glyph_y_triangles[] = {
-{{149, 1}, {55, -42}, {22, -140}},
-{{149, 1}, {22, -140}, {149, -281}},
-{{149, -281}, {22, -140}, {55, -238}},
-{{231, 1}, {149, 1}, {149, -281}},
-{{149, -281}, {300, -281}, {231, 1}},
-{{420, -97}, {231, 1}, {300, -281}},
-{{420, -97}, {300, -281}, {348, -281}},
-{{420, -97}, {348, -281}, {474, -313}},
-{{474, -313}, {348, -281}, {365, -329}},
-{{365, -329}, {374, -469}, {474, -313}},
-{{374, -469}, {474, -577}, {474, -313}},
-{{474, -577}, {374, -469}, {374, -577}},
-{{424, -630}, {474, -577}, {374, -577}},
-{{424, -630}, {374, -577}, {389, -616}},
-{{474, -577}, {424, -630}, {459, -616}},
-{{365, -329}, {333, -403}, {374, -469}},
-{{259, -303}, {333, -403}, {365, -329}},
-{{259, -303}, {261, -403}, {333, -403}},
-{{259, -303}, {213, -403}, {261, -403}},
-{{115, -370}, {213, -403}, {259, -303}},
-{{115, -370}, {186, -439}, {213, -403}},
-{{115, -370}, {160, -475}, {186, -439}},
-{{115, -370}, {61, -527}, {160, -475}},
-{{61, -527}, {160, -527}, {160, -475}},
-{{61, -527}, {160, -536}, {160, -527}},
-{{160, -536}, {61, -527}, {162, -553}},
-{{162, -553}, {61, -527}, {67, -585}},
-{{162, -553}, {67, -585}, {165, -579}},
-{{165, -579}, {67, -585}, {89, -620}},
-{{165, -579}, {89, -620}, {126, -627}},
-};
-//Glyph: z
-int glyph_z_index = 122;
-int glyph_z_advance_x = 529;
-int glyph_z_advance_y = 0;
-int glyph_z_size = 19;
-Bezier_write glyph_z[] = {
-{{514, -142}, {514, -83}, {482, -43},1 },
-{{482, -43}, {447, -1}, {389, -1},1 },
-{{65, -1}, {46, -1}, {30, -16},1 },
-{{30, -16}, {15, -32}, {15, -50},1 },
-{{15, -218}, {15, -298}, {58, -355},1 },
-{{58, -355}, {84, -389}, {157, -444},1 },
-{{259, -529}, {193, -471}, {157, -444},0 },
-{{125, -529}, {100, -529}, {86, -543},1 },
-{{86, -543}, {72, -558}, {72, -578},1 },
-{{72, -578}, {72, -599}, {86, -614},1 },
-{{86, -614}, {100, -629}, {125, -629},1 },
-{{389, -629}, {409, -629}, {423, -613},1 },
-{{423, -613}, {437, -597}, {437, -577},1 },
-{{437, -577}, {437, -556}, {422, -542},1 },
-{{240, -346}, {240, -381}, {269, -406},0 },
-{{261, -299}, {240, -316}, {240, -346},0 },
-{{313, -282}, {282, -282}, {261, -299},0 },
-{{389, -282}, {447, -282}, {482, -239},1 },
-{{482, -239}, {514, -200}, {514, -142},1 },
-};
-int glyph_z_triangle_size = 27;
-Triangle_write glyph_z_triangles[] = {
-{{15, -50}, {65, -1}, {30, -16}},
-{{15, -50}, {282, -282}, {65, -1}},
-{{389, -1}, {65, -1}, {282, -282}},
-{{389, -1}, {282, -282}, {313, -282}},
-{{389, -1}, {313, -282}, {389, -282}},
-{{514, -142}, {389, -1}, {389, -282}},
-{{514, -142}, {389, -282}, {482, -239}},
-{{482, -43}, {389, -1}, {514, -142}},
-{{282, -282}, {15, -50}, {261, -299}},
-{{15, -218}, {261, -299}, {15, -50}},
-{{240, -316}, {261, -299}, {15, -218}},
-{{240, -316}, {15, -218}, {58, -355}},
-{{58, -355}, {240, -346}, {240, -316}},
-{{58, -355}, {157, -444}, {240, -346}},
-{{157, -444}, {240, -381}, {240, -346}},
-{{157, -444}, {193, -471}, {240, -381}},
-{{240, -381}, {193, -471}, {269, -406}},
-{{193, -471}, {259, -529}, {269, -406}},
-{{269, -406}, {259, -529}, {422, -542}},
-{{259, -529}, {389, -629}, {422, -542}},
-{{422, -542}, {389, -629}, {423, -613}},
-{{422, -542}, {423, -613}, {437, -577}},
-{{389, -629}, {259, -529}, {125, -629}},
-{{259, -529}, {125, -529}, {125, -629}},
-{{125, -529}, {72, -578}, {125, -629}},
-{{125, -629}, {72, -578}, {86, -614}},
-{{125, -529}, {86, -543}, {72, -578}},
-};
-int oc_gfx_vf_font_size = 52;
-
-Glyph glyphlist[52];
-
-Glyph* generate_font()
-{
- Glyph pGlyph;
- pGlyph.index = glyph_A_index;
- pGlyph.advance_x = glyph_A_advance_x;
- pGlyph.advance_y = glyph_A_advance_y;
- pGlyph.bezier_n_writes = glyph_A_size;
- pGlyph.bezier = glyph_A;
- pGlyph.triangle_n_writes = glyph_A_triangle_size;
- pGlyph.triangle = glyph_A_triangles;
- glyphlist[0] = pGlyph;
- pGlyph.index = glyph_B_index;
- pGlyph.advance_x = glyph_B_advance_x;
- pGlyph.advance_y = glyph_B_advance_y;
- pGlyph.bezier_n_writes = glyph_B_size;
- pGlyph.bezier = glyph_B;
- pGlyph.triangle_n_writes = glyph_B_triangle_size;
- pGlyph.triangle = glyph_B_triangles;
- glyphlist[1] = pGlyph;
- pGlyph.index = glyph_C_index;
- pGlyph.advance_x = glyph_C_advance_x;
- pGlyph.advance_y = glyph_C_advance_y;
- pGlyph.bezier_n_writes = glyph_C_size;
- pGlyph.bezier = glyph_C;
- pGlyph.triangle_n_writes = glyph_C_triangle_size;
- pGlyph.triangle = glyph_C_triangles;
- glyphlist[2] = pGlyph;
- pGlyph.index = glyph_D_index;
- pGlyph.advance_x = glyph_D_advance_x;
- pGlyph.advance_y = glyph_D_advance_y;
- pGlyph.bezier_n_writes = glyph_D_size;
- pGlyph.bezier = glyph_D;
- pGlyph.triangle_n_writes = glyph_D_triangle_size;
- pGlyph.triangle = glyph_D_triangles;
- glyphlist[3] = pGlyph;
- pGlyph.index = glyph_E_index;
- pGlyph.advance_x = glyph_E_advance_x;
- pGlyph.advance_y = glyph_E_advance_y;
- pGlyph.bezier_n_writes = glyph_E_size;
- pGlyph.bezier = glyph_E;
- pGlyph.triangle_n_writes = glyph_E_triangle_size;
- pGlyph.triangle = glyph_E_triangles;
- glyphlist[4] = pGlyph;
- pGlyph.index = glyph_F_index;
- pGlyph.advance_x = glyph_F_advance_x;
- pGlyph.advance_y = glyph_F_advance_y;
- pGlyph.bezier_n_writes = glyph_F_size;
- pGlyph.bezier = glyph_F;
- pGlyph.triangle_n_writes = glyph_F_triangle_size;
- pGlyph.triangle = glyph_F_triangles;
- glyphlist[5] = pGlyph;
- pGlyph.index = glyph_G_index;
- pGlyph.advance_x = glyph_G_advance_x;
- pGlyph.advance_y = glyph_G_advance_y;
- pGlyph.bezier_n_writes = glyph_G_size;
- pGlyph.bezier = glyph_G;
- pGlyph.triangle_n_writes = glyph_G_triangle_size;
- pGlyph.triangle = glyph_G_triangles;
- glyphlist[6] = pGlyph;
- pGlyph.index = glyph_H_index;
- pGlyph.advance_x = glyph_H_advance_x;
- pGlyph.advance_y = glyph_H_advance_y;
- pGlyph.bezier_n_writes = glyph_H_size;
- pGlyph.bezier = glyph_H;
- pGlyph.triangle_n_writes = glyph_H_triangle_size;
- pGlyph.triangle = glyph_H_triangles;
- glyphlist[7] = pGlyph;
- pGlyph.index = glyph_I_index;
- pGlyph.advance_x = glyph_I_advance_x;
- pGlyph.advance_y = glyph_I_advance_y;
- pGlyph.bezier_n_writes = glyph_I_size;
- pGlyph.bezier = glyph_I;
- pGlyph.triangle_n_writes = glyph_I_triangle_size;
- pGlyph.triangle = glyph_I_triangles;
- glyphlist[8] = pGlyph;
- pGlyph.index = glyph_J_index;
- pGlyph.advance_x = glyph_J_advance_x;
- pGlyph.advance_y = glyph_J_advance_y;
- pGlyph.bezier_n_writes = glyph_J_size;
- pGlyph.bezier = glyph_J;
- pGlyph.triangle_n_writes = glyph_J_triangle_size;
- pGlyph.triangle = glyph_J_triangles;
- glyphlist[9] = pGlyph;
- pGlyph.index = glyph_K_index;
- pGlyph.advance_x = glyph_K_advance_x;
- pGlyph.advance_y = glyph_K_advance_y;
- pGlyph.bezier_n_writes = glyph_K_size;
- pGlyph.bezier = glyph_K;
- pGlyph.triangle_n_writes = glyph_K_triangle_size;
- pGlyph.triangle = glyph_K_triangles;
- glyphlist[10] = pGlyph;
- pGlyph.index = glyph_L_index;
- pGlyph.advance_x = glyph_L_advance_x;
- pGlyph.advance_y = glyph_L_advance_y;
- pGlyph.bezier_n_writes = glyph_L_size;
- pGlyph.bezier = glyph_L;
- pGlyph.triangle_n_writes = glyph_L_triangle_size;
- pGlyph.triangle = glyph_L_triangles;
- glyphlist[11] = pGlyph;
- pGlyph.index = glyph_M_index;
- pGlyph.advance_x = glyph_M_advance_x;
- pGlyph.advance_y = glyph_M_advance_y;
- pGlyph.bezier_n_writes = glyph_M_size;
- pGlyph.bezier = glyph_M;
- pGlyph.triangle_n_writes = glyph_M_triangle_size;
- pGlyph.triangle = glyph_M_triangles;
- glyphlist[12] = pGlyph;
- pGlyph.index = glyph_N_index;
- pGlyph.advance_x = glyph_N_advance_x;
- pGlyph.advance_y = glyph_N_advance_y;
- pGlyph.bezier_n_writes = glyph_N_size;
- pGlyph.bezier = glyph_N;
- pGlyph.triangle_n_writes = glyph_N_triangle_size;
- pGlyph.triangle = glyph_N_triangles;
- glyphlist[13] = pGlyph;
- pGlyph.index = glyph_O_index;
- pGlyph.advance_x = glyph_O_advance_x;
- pGlyph.advance_y = glyph_O_advance_y;
- pGlyph.bezier_n_writes = glyph_O_size;
- pGlyph.bezier = glyph_O;
- pGlyph.triangle_n_writes = glyph_O_triangle_size;
- pGlyph.triangle = glyph_O_triangles;
- glyphlist[14] = pGlyph;
- pGlyph.index = glyph_P_index;
- pGlyph.advance_x = glyph_P_advance_x;
- pGlyph.advance_y = glyph_P_advance_y;
- pGlyph.bezier_n_writes = glyph_P_size;
- pGlyph.bezier = glyph_P;
- pGlyph.triangle_n_writes = glyph_P_triangle_size;
- pGlyph.triangle = glyph_P_triangles;
- glyphlist[15] = pGlyph;
- pGlyph.index = glyph_Q_index;
- pGlyph.advance_x = glyph_Q_advance_x;
- pGlyph.advance_y = glyph_Q_advance_y;
- pGlyph.bezier_n_writes = glyph_Q_size;
- pGlyph.bezier = glyph_Q;
- pGlyph.triangle_n_writes = glyph_Q_triangle_size;
- pGlyph.triangle = glyph_Q_triangles;
- glyphlist[16] = pGlyph;
- pGlyph.index = glyph_R_index;
- pGlyph.advance_x = glyph_R_advance_x;
- pGlyph.advance_y = glyph_R_advance_y;
- pGlyph.bezier_n_writes = glyph_R_size;
- pGlyph.bezier = glyph_R;
- pGlyph.triangle_n_writes = glyph_R_triangle_size;
- pGlyph.triangle = glyph_R_triangles;
- glyphlist[17] = pGlyph;
- pGlyph.index = glyph_S_index;
- pGlyph.advance_x = glyph_S_advance_x;
- pGlyph.advance_y = glyph_S_advance_y;
- pGlyph.bezier_n_writes = glyph_S_size;
- pGlyph.bezier = glyph_S;
- pGlyph.triangle_n_writes = glyph_S_triangle_size;
- pGlyph.triangle = glyph_S_triangles;
- glyphlist[18] = pGlyph;
- pGlyph.index = glyph_T_index;
- pGlyph.advance_x = glyph_T_advance_x;
- pGlyph.advance_y = glyph_T_advance_y;
- pGlyph.bezier_n_writes = glyph_T_size;
- pGlyph.bezier = glyph_T;
- pGlyph.triangle_n_writes = glyph_T_triangle_size;
- pGlyph.triangle = glyph_T_triangles;
- glyphlist[19] = pGlyph;
- pGlyph.index = glyph_U_index;
- pGlyph.advance_x = glyph_U_advance_x;
- pGlyph.advance_y = glyph_U_advance_y;
- pGlyph.bezier_n_writes = glyph_U_size;
- pGlyph.bezier = glyph_U;
- pGlyph.triangle_n_writes = glyph_U_triangle_size;
- pGlyph.triangle = glyph_U_triangles;
- glyphlist[20] = pGlyph;
- pGlyph.index = glyph_V_index;
- pGlyph.advance_x = glyph_V_advance_x;
- pGlyph.advance_y = glyph_V_advance_y;
- pGlyph.bezier_n_writes = glyph_V_size;
- pGlyph.bezier = glyph_V;
- pGlyph.triangle_n_writes = glyph_V_triangle_size;
- pGlyph.triangle = glyph_V_triangles;
- glyphlist[21] = pGlyph;
- pGlyph.index = glyph_W_index;
- pGlyph.advance_x = glyph_W_advance_x;
- pGlyph.advance_y = glyph_W_advance_y;
- pGlyph.bezier_n_writes = glyph_W_size;
- pGlyph.bezier = glyph_W;
- pGlyph.triangle_n_writes = glyph_W_triangle_size;
- pGlyph.triangle = glyph_W_triangles;
- glyphlist[22] = pGlyph;
- pGlyph.index = glyph_X_index;
- pGlyph.advance_x = glyph_X_advance_x;
- pGlyph.advance_y = glyph_X_advance_y;
- pGlyph.bezier_n_writes = glyph_X_size;
- pGlyph.bezier = glyph_X;
- pGlyph.triangle_n_writes = glyph_X_triangle_size;
- pGlyph.triangle = glyph_X_triangles;
- glyphlist[23] = pGlyph;
- pGlyph.index = glyph_Y_index;
- pGlyph.advance_x = glyph_Y_advance_x;
- pGlyph.advance_y = glyph_Y_advance_y;
- pGlyph.bezier_n_writes = glyph_Y_size;
- pGlyph.bezier = glyph_Y;
- pGlyph.triangle_n_writes = glyph_Y_triangle_size;
- pGlyph.triangle = glyph_Y_triangles;
- glyphlist[24] = pGlyph;
- pGlyph.index = glyph_Z_index;
- pGlyph.advance_x = glyph_Z_advance_x;
- pGlyph.advance_y = glyph_Z_advance_y;
- pGlyph.bezier_n_writes = glyph_Z_size;
- pGlyph.bezier = glyph_Z;
- pGlyph.triangle_n_writes = glyph_Z_triangle_size;
- pGlyph.triangle = glyph_Z_triangles;
- glyphlist[25] = pGlyph;
- pGlyph.index = glyph_a_index;
- pGlyph.advance_x = glyph_a_advance_x;
- pGlyph.advance_y = glyph_a_advance_y;
- pGlyph.bezier_n_writes = glyph_a_size;
- pGlyph.bezier = glyph_a;
- pGlyph.triangle_n_writes = glyph_a_triangle_size;
- pGlyph.triangle = glyph_a_triangles;
- glyphlist[26] = pGlyph;
- pGlyph.index = glyph_b_index;
- pGlyph.advance_x = glyph_b_advance_x;
- pGlyph.advance_y = glyph_b_advance_y;
- pGlyph.bezier_n_writes = glyph_b_size;
- pGlyph.bezier = glyph_b;
- pGlyph.triangle_n_writes = glyph_b_triangle_size;
- pGlyph.triangle = glyph_b_triangles;
- glyphlist[27] = pGlyph;
- pGlyph.index = glyph_c_index;
- pGlyph.advance_x = glyph_c_advance_x;
- pGlyph.advance_y = glyph_c_advance_y;
- pGlyph.bezier_n_writes = glyph_c_size;
- pGlyph.bezier = glyph_c;
- pGlyph.triangle_n_writes = glyph_c_triangle_size;
- pGlyph.triangle = glyph_c_triangles;
- glyphlist[28] = pGlyph;
- pGlyph.index = glyph_d_index;
- pGlyph.advance_x = glyph_d_advance_x;
- pGlyph.advance_y = glyph_d_advance_y;
- pGlyph.bezier_n_writes = glyph_d_size;
- pGlyph.bezier = glyph_d;
- pGlyph.triangle_n_writes = glyph_d_triangle_size;
- pGlyph.triangle = glyph_d_triangles;
- glyphlist[29] = pGlyph;
- pGlyph.index = glyph_e_index;
- pGlyph.advance_x = glyph_e_advance_x;
- pGlyph.advance_y = glyph_e_advance_y;
- pGlyph.bezier_n_writes = glyph_e_size;
- pGlyph.bezier = glyph_e;
- pGlyph.triangle_n_writes = glyph_e_triangle_size;
- pGlyph.triangle = glyph_e_triangles;
- glyphlist[30] = pGlyph;
- pGlyph.index = glyph_f_index;
- pGlyph.advance_x = glyph_f_advance_x;
- pGlyph.advance_y = glyph_f_advance_y;
- pGlyph.bezier_n_writes = glyph_f_size;
- pGlyph.bezier = glyph_f;
- pGlyph.triangle_n_writes = glyph_f_triangle_size;
- pGlyph.triangle = glyph_f_triangles;
- glyphlist[31] = pGlyph;
- pGlyph.index = glyph_g_index;
- pGlyph.advance_x = glyph_g_advance_x;
- pGlyph.advance_y = glyph_g_advance_y;
- pGlyph.bezier_n_writes = glyph_g_size;
- pGlyph.bezier = glyph_g;
- pGlyph.triangle_n_writes = glyph_g_triangle_size;
- pGlyph.triangle = glyph_g_triangles;
- glyphlist[32] = pGlyph;
- pGlyph.index = glyph_h_index;
- pGlyph.advance_x = glyph_h_advance_x;
- pGlyph.advance_y = glyph_h_advance_y;
- pGlyph.bezier_n_writes = glyph_h_size;
- pGlyph.bezier = glyph_h;
- pGlyph.triangle_n_writes = glyph_h_triangle_size;
- pGlyph.triangle = glyph_h_triangles;
- glyphlist[33] = pGlyph;
- pGlyph.index = glyph_i_index;
- pGlyph.advance_x = glyph_i_advance_x;
- pGlyph.advance_y = glyph_i_advance_y;
- pGlyph.bezier_n_writes = glyph_i_size;
- pGlyph.bezier = glyph_i;
- pGlyph.triangle_n_writes = glyph_i_triangle_size;
- pGlyph.triangle = glyph_i_triangles;
- glyphlist[34] = pGlyph;
- pGlyph.index = glyph_j_index;
- pGlyph.advance_x = glyph_j_advance_x;
- pGlyph.advance_y = glyph_j_advance_y;
- pGlyph.bezier_n_writes = glyph_j_size;
- pGlyph.bezier = glyph_j;
- pGlyph.triangle_n_writes = glyph_j_triangle_size;
- pGlyph.triangle = glyph_j_triangles;
- glyphlist[35] = pGlyph;
- pGlyph.index = glyph_k_index;
- pGlyph.advance_x = glyph_k_advance_x;
- pGlyph.advance_y = glyph_k_advance_y;
- pGlyph.bezier_n_writes = glyph_k_size;
- pGlyph.bezier = glyph_k;
- pGlyph.triangle_n_writes = glyph_k_triangle_size;
- pGlyph.triangle = glyph_k_triangles;
- glyphlist[36] = pGlyph;
- pGlyph.index = glyph_l_index;
- pGlyph.advance_x = glyph_l_advance_x;
- pGlyph.advance_y = glyph_l_advance_y;
- pGlyph.bezier_n_writes = glyph_l_size;
- pGlyph.bezier = glyph_l;
- pGlyph.triangle_n_writes = glyph_l_triangle_size;
- pGlyph.triangle = glyph_l_triangles;
- glyphlist[37] = pGlyph;
- pGlyph.index = glyph_m_index;
- pGlyph.advance_x = glyph_m_advance_x;
- pGlyph.advance_y = glyph_m_advance_y;
- pGlyph.bezier_n_writes = glyph_m_size;
- pGlyph.bezier = glyph_m;
- pGlyph.triangle_n_writes = glyph_m_triangle_size;
- pGlyph.triangle = glyph_m_triangles;
- glyphlist[38] = pGlyph;
- pGlyph.index = glyph_n_index;
- pGlyph.advance_x = glyph_n_advance_x;
- pGlyph.advance_y = glyph_n_advance_y;
- pGlyph.bezier_n_writes = glyph_n_size;
- pGlyph.bezier = glyph_n;
- pGlyph.triangle_n_writes = glyph_n_triangle_size;
- pGlyph.triangle = glyph_n_triangles;
- glyphlist[39] = pGlyph;
- pGlyph.index = glyph_o_index;
- pGlyph.advance_x = glyph_o_advance_x;
- pGlyph.advance_y = glyph_o_advance_y;
- pGlyph.bezier_n_writes = glyph_o_size;
- pGlyph.bezier = glyph_o;
- pGlyph.triangle_n_writes = glyph_o_triangle_size;
- pGlyph.triangle = glyph_o_triangles;
- glyphlist[40] = pGlyph;
- pGlyph.index = glyph_p_index;
- pGlyph.advance_x = glyph_p_advance_x;
- pGlyph.advance_y = glyph_p_advance_y;
- pGlyph.bezier_n_writes = glyph_p_size;
- pGlyph.bezier = glyph_p;
- pGlyph.triangle_n_writes = glyph_p_triangle_size;
- pGlyph.triangle = glyph_p_triangles;
- glyphlist[41] = pGlyph;
- pGlyph.index = glyph_q_index;
- pGlyph.advance_x = glyph_q_advance_x;
- pGlyph.advance_y = glyph_q_advance_y;
- pGlyph.bezier_n_writes = glyph_q_size;
- pGlyph.bezier = glyph_q;
- pGlyph.triangle_n_writes = glyph_q_triangle_size;
- pGlyph.triangle = glyph_q_triangles;
- glyphlist[42] = pGlyph;
- pGlyph.index = glyph_r_index;
- pGlyph.advance_x = glyph_r_advance_x;
- pGlyph.advance_y = glyph_r_advance_y;
- pGlyph.bezier_n_writes = glyph_r_size;
- pGlyph.bezier = glyph_r;
- pGlyph.triangle_n_writes = glyph_r_triangle_size;
- pGlyph.triangle = glyph_r_triangles;
- glyphlist[43] = pGlyph;
- pGlyph.index = glyph_s_index;
- pGlyph.advance_x = glyph_s_advance_x;
- pGlyph.advance_y = glyph_s_advance_y;
- pGlyph.bezier_n_writes = glyph_s_size;
- pGlyph.bezier = glyph_s;
- pGlyph.triangle_n_writes = glyph_s_triangle_size;
- pGlyph.triangle = glyph_s_triangles;
- glyphlist[44] = pGlyph;
- pGlyph.index = glyph_t_index;
- pGlyph.advance_x = glyph_t_advance_x;
- pGlyph.advance_y = glyph_t_advance_y;
- pGlyph.bezier_n_writes = glyph_t_size;
- pGlyph.bezier = glyph_t;
- pGlyph.triangle_n_writes = glyph_t_triangle_size;
- pGlyph.triangle = glyph_t_triangles;
- glyphlist[45] = pGlyph;
- pGlyph.index = glyph_u_index;
- pGlyph.advance_x = glyph_u_advance_x;
- pGlyph.advance_y = glyph_u_advance_y;
- pGlyph.bezier_n_writes = glyph_u_size;
- pGlyph.bezier = glyph_u;
- pGlyph.triangle_n_writes = glyph_u_triangle_size;
- pGlyph.triangle = glyph_u_triangles;
- glyphlist[46] = pGlyph;
- pGlyph.index = glyph_v_index;
- pGlyph.advance_x = glyph_v_advance_x;
- pGlyph.advance_y = glyph_v_advance_y;
- pGlyph.bezier_n_writes = glyph_v_size;
- pGlyph.bezier = glyph_v;
- pGlyph.triangle_n_writes = glyph_v_triangle_size;
- pGlyph.triangle = glyph_v_triangles;
- glyphlist[47] = pGlyph;
- pGlyph.index = glyph_w_index;
- pGlyph.advance_x = glyph_w_advance_x;
- pGlyph.advance_y = glyph_w_advance_y;
- pGlyph.bezier_n_writes = glyph_w_size;
- pGlyph.bezier = glyph_w;
- pGlyph.triangle_n_writes = glyph_w_triangle_size;
- pGlyph.triangle = glyph_w_triangles;
- glyphlist[48] = pGlyph;
- pGlyph.index = glyph_x_index;
- pGlyph.advance_x = glyph_x_advance_x;
- pGlyph.advance_y = glyph_x_advance_y;
- pGlyph.bezier_n_writes = glyph_x_size;
- pGlyph.bezier = glyph_x;
- pGlyph.triangle_n_writes = glyph_x_triangle_size;
- pGlyph.triangle = glyph_x_triangles;
- glyphlist[49] = pGlyph;
- pGlyph.index = glyph_y_index;
- pGlyph.advance_x = glyph_y_advance_x;
- pGlyph.advance_y = glyph_y_advance_y;
- pGlyph.bezier_n_writes = glyph_y_size;
- pGlyph.bezier = glyph_y;
- pGlyph.triangle_n_writes = glyph_y_triangle_size;
- pGlyph.triangle = glyph_y_triangles;
- glyphlist[50] = pGlyph;
- pGlyph.index = glyph_z_index;
- pGlyph.advance_x = glyph_z_advance_x;
- pGlyph.advance_y = glyph_z_advance_y;
- pGlyph.bezier_n_writes = glyph_z_size;
- pGlyph.bezier = glyph_z;
- pGlyph.triangle_n_writes = glyph_z_triangle_size;
- pGlyph.triangle = glyph_z_triangles;
- glyphlist[51] = pGlyph;
- return glyphlist;
- }
-#endif
Index: sw/utils/fonter/fonter.pro
===================================================================
--- sw/utils/fonter/fonter.pro (revision 5)
+++ sw/utils/fonter/fonter.pro (nonexistent)
@@ -1,24 +0,0 @@
-TEMPLATE = app
-CONFIG += console
-CONFIG -= qt
-LIBS += `freetype-config --libs` -lfreetype
-CCFLAG += `freetype-config --cflags`
-INCLUDEPATH += /usr/include/freetype2
-
-SOURCES += main.cpp \
- ttfpoint.cpp \
- poly2tri/sweep/sweep_context.cc \
- poly2tri/sweep/sweep.cc \
- poly2tri/sweep/cdt.cc \
- poly2tri/sweep/advancing_front.cc \
- poly2tri/common/shapes.cc
-
-HEADERS += \
- ttfpoint.h \
- poly2tri/sweep/sweep_context.h \
- poly2tri/sweep/sweep.h \
- poly2tri/sweep/cdt.h \
- poly2tri/sweep/advancing_front.h \
- poly2tri/common/utils.h \
- poly2tri/common/shapes.h
-
Index: sw/utils/fonter/ttfpoint.h
===================================================================
--- sw/utils/fonter/ttfpoint.h (revision 5)
+++ sw/utils/fonter/ttfpoint.h (nonexistent)
@@ -1,103 +0,0 @@
-#ifndef TTFPOINT_H
-#define TTFPOINT_H
-
-#include
-#include
-#include
-
-#include
-#include
-#include FT_FREETYPE_H
-using namespace std;
-
-#include "poly2tri/poly2tri.h"
-using namespace p2t;
-
-class BPoint
-{
-public:
- BPoint(int X = 0, int Y = 0, int OnLine = 0, int EndOfContour = 0, int InternalControlPoint = 0)
- : x(X), y(Y), onLine(OnLine), endOfContour(EndOfContour), internalControlPoint(InternalControlPoint)
- {}
-
- // x and y coordinates of a point
- int x, y, onLine,endOfContour, internalControlPoint;
-};
-
-class TriangleWrite
-{
-public:
- TriangleWrite(BPoint A = BPoint(), BPoint B = BPoint(), BPoint C = BPoint())
- : a(A), b(B), c(C)
- {}
-
- BPoint a;
- BPoint b;
- BPoint c;
-};
-
-class BezierWrite
-{
-public:
- BezierWrite(BPoint Start = BPoint(), BPoint Control = BPoint(), BPoint End = BPoint(), int FillInside = 0)
- : start(Start), control(Control), end(End), fillInside(FillInside)
- {}
-
- // Do an area calculation (the same that will be performed when calculating culling in the graphics card)
- // If needed, swaps the points so that the shape will not be culled.
- // Sets inside/outside fill
- // Returns if the control point is an "inside" control point or not (used in triangulation)
- int FixArea();
-
- // start point of bezier curve
- BPoint start;
- // control point of bezier curve
- BPoint control;
- // end point of bezier curve
- BPoint end;
- // check if inside or outside is filled
- int fillInside;
-};
-
-class Glyph
-{
-public:
- // the 'letter' or 'glyph' ex. A, B, C, # % q i
- int index;
- int advance_x;
- // all bezier draws to form the glyph
- deque writes;
- deque triangles;
-};
-
-
-class TTFPoint
-{
-public:
- TTFPoint();
-
- static void InitFreeType(); // must run first.
-
- void LoadFont(string filename); // must run second.
- void GenerateWrites(bool all, wstring charmap); // must run third
- void WriteFontFile(string fontname); // must run last
-private:
- FT_Outline LoadGlyphOutline(int character, FT_Matrix &matrix, FT_Vector &pen);
-
- deque UntangleGlyphPoints(FT_Outline outline);
-
- Glyph BuildGlyph(deque &untangledPointList, int character);
-
- vector GetShapePoints(int i, vector< vector > &shapes);
- deque Triangulate(deque &untangledPointList);
-
- // List that holds all glyphs
- deque mGlyphs;
-
- //freetype veriables
- FT_Face mFace;
- static FT_Library mLibrary;
- static FT_Error mError;
-};
-
-#endif // TTFPOINT_H
Index: sw/utils/fonter/README
===================================================================
--- sw/utils/fonter/README (revision 5)
+++ sw/utils/fonter/README (nonexistent)
@@ -1,14 +0,0 @@
-// Fonter, a ttf-font converter By Anton Fosselius & Per Lenander
-
-Usage:
-fonter
-
-Example:
-fonter fontfile.ttf outputfile.h
-fonter fontfile.ttf
-fonter
-
-if only a inputfile is specified, the outputfile will be named font.h
-if used without flags, fonter will try to open test.ttf and output font.h
-
-
Index: sw/utils/fonter/Makefile
===================================================================
--- sw/utils/fonter/Makefile (revision 5)
+++ sw/utils/fonter/Makefile (nonexistent)
@@ -1,246 +0,0 @@
-#############################################################################
-# Makefile for building: fonter
-# Generated by qmake (2.01a) (Qt 4.8.1) on: Tue May 29 15:13:13 2012
-# Project: fonter.pro
-# Template: app
-# Command: /usr/bin/qmake -o Makefile fonter.pro
-#############################################################################
-
-####### Compiler, tools and options
-
-CC = gcc
-CXX = g++
-DEFINES = -DQT_WEBKIT
-CFLAGS = -m64 -pipe -O2 -Wall -W $(DEFINES)
-CXXFLAGS = -m64 -pipe -O2 -Wall -W $(DEFINES)
-INCPATH = -I/usr/share/qt4/mkspecs/linux-g++-64 -I. -I/usr/include/freetype2
-LINK = g++
-LFLAGS = -m64 -Wl,-O1
-LIBS = $(SUBLIBS) `freetype-config --libs` -lfreetype
-AR = ar cqs
-RANLIB =
-QMAKE = /usr/bin/qmake
-TAR = tar -cf
-COMPRESS = gzip -9f
-COPY = cp -f
-SED = sed
-COPY_FILE = $(COPY)
-COPY_DIR = $(COPY) -r
-STRIP = strip
-INSTALL_FILE = install -m 644 -p
-INSTALL_DIR = $(COPY_DIR)
-INSTALL_PROGRAM = install -m 755 -p
-DEL_FILE = rm -f
-SYMLINK = ln -f -s
-DEL_DIR = rmdir
-MOVE = mv -f
-CHK_DIR_EXISTS= test -d
-MKDIR = mkdir -p
-
-####### Output directory
-
-OBJECTS_DIR = ./
-
-####### Files
-
-SOURCES = main.cpp \
- ttfpoint.cpp \
- poly2tri/sweep/sweep_context.cc \
- poly2tri/sweep/sweep.cc \
- poly2tri/sweep/cdt.cc \
- poly2tri/sweep/advancing_front.cc \
- poly2tri/common/shapes.cc
-OBJECTS = main.o \
- ttfpoint.o \
- sweep_context.o \
- sweep.o \
- cdt.o \
- advancing_front.o \
- shapes.o
-DIST = /usr/share/qt4/mkspecs/common/unix.conf \
- /usr/share/qt4/mkspecs/common/linux.conf \
- /usr/share/qt4/mkspecs/common/gcc-base.conf \
- /usr/share/qt4/mkspecs/common/gcc-base-unix.conf \
- /usr/share/qt4/mkspecs/common/g++-base.conf \
- /usr/share/qt4/mkspecs/common/g++-unix.conf \
- /usr/share/qt4/mkspecs/qconfig.pri \
- /usr/share/qt4/mkspecs/modules/qt_webkit_version.pri \
- /usr/share/qt4/mkspecs/features/qt_functions.prf \
- /usr/share/qt4/mkspecs/features/qt_config.prf \
- /usr/share/qt4/mkspecs/features/exclusive_builds.prf \
- /usr/share/qt4/mkspecs/features/default_pre.prf \
- /usr/share/qt4/mkspecs/features/release.prf \
- /usr/share/qt4/mkspecs/features/default_post.prf \
- /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
- /usr/share/qt4/mkspecs/features/warn_on.prf \
- /usr/share/qt4/mkspecs/features/resources.prf \
- /usr/share/qt4/mkspecs/features/uic.prf \
- /usr/share/qt4/mkspecs/features/yacc.prf \
- /usr/share/qt4/mkspecs/features/lex.prf \
- /usr/share/qt4/mkspecs/features/include_source_dir.prf \
- fonter.pro
-QMAKE_TARGET = fonter
-DESTDIR =
-TARGET = fonter
-
-first: all
-####### Implicit rules
-
-.SUFFIXES: .o .c .cpp .cc .cxx .C
-
-.cpp.o:
- $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
-
-.cc.o:
- $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
-
-.cxx.o:
- $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
-
-.C.o:
- $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
-
-.c.o:
- $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
-
-####### Build rules
-
-all: Makefile $(TARGET)
-
-$(TARGET): $(OBJECTS)
- $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
-
-Makefile: fonter.pro /usr/share/qt4/mkspecs/linux-g++-64/qmake.conf /usr/share/qt4/mkspecs/common/unix.conf \
- /usr/share/qt4/mkspecs/common/linux.conf \
- /usr/share/qt4/mkspecs/common/gcc-base.conf \
- /usr/share/qt4/mkspecs/common/gcc-base-unix.conf \
- /usr/share/qt4/mkspecs/common/g++-base.conf \
- /usr/share/qt4/mkspecs/common/g++-unix.conf \
- /usr/share/qt4/mkspecs/qconfig.pri \
- /usr/share/qt4/mkspecs/modules/qt_webkit_version.pri \
- /usr/share/qt4/mkspecs/features/qt_functions.prf \
- /usr/share/qt4/mkspecs/features/qt_config.prf \
- /usr/share/qt4/mkspecs/features/exclusive_builds.prf \
- /usr/share/qt4/mkspecs/features/default_pre.prf \
- /usr/share/qt4/mkspecs/features/release.prf \
- /usr/share/qt4/mkspecs/features/default_post.prf \
- /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
- /usr/share/qt4/mkspecs/features/warn_on.prf \
- /usr/share/qt4/mkspecs/features/resources.prf \
- /usr/share/qt4/mkspecs/features/uic.prf \
- /usr/share/qt4/mkspecs/features/yacc.prf \
- /usr/share/qt4/mkspecs/features/lex.prf \
- /usr/share/qt4/mkspecs/features/include_source_dir.prf
- $(QMAKE) -o Makefile fonter.pro
-/usr/share/qt4/mkspecs/common/unix.conf:
-/usr/share/qt4/mkspecs/common/linux.conf:
-/usr/share/qt4/mkspecs/common/gcc-base.conf:
-/usr/share/qt4/mkspecs/common/gcc-base-unix.conf:
-/usr/share/qt4/mkspecs/common/g++-base.conf:
-/usr/share/qt4/mkspecs/common/g++-unix.conf:
-/usr/share/qt4/mkspecs/qconfig.pri:
-/usr/share/qt4/mkspecs/modules/qt_webkit_version.pri:
-/usr/share/qt4/mkspecs/features/qt_functions.prf:
-/usr/share/qt4/mkspecs/features/qt_config.prf:
-/usr/share/qt4/mkspecs/features/exclusive_builds.prf:
-/usr/share/qt4/mkspecs/features/default_pre.prf:
-/usr/share/qt4/mkspecs/features/release.prf:
-/usr/share/qt4/mkspecs/features/default_post.prf:
-/usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
-/usr/share/qt4/mkspecs/features/warn_on.prf:
-/usr/share/qt4/mkspecs/features/resources.prf:
-/usr/share/qt4/mkspecs/features/uic.prf:
-/usr/share/qt4/mkspecs/features/yacc.prf:
-/usr/share/qt4/mkspecs/features/lex.prf:
-/usr/share/qt4/mkspecs/features/include_source_dir.prf:
-qmake: FORCE
- @$(QMAKE) -o Makefile fonter.pro
-
-dist:
- @$(CHK_DIR_EXISTS) .tmp/fonter1.0.0 || $(MKDIR) .tmp/fonter1.0.0
- $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/fonter1.0.0/ && (cd `dirname .tmp/fonter1.0.0` && $(TAR) fonter1.0.0.tar fonter1.0.0 && $(COMPRESS) fonter1.0.0.tar) && $(MOVE) `dirname .tmp/fonter1.0.0`/fonter1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/fonter1.0.0
-
-
-clean:compiler_clean
- -$(DEL_FILE) $(OBJECTS)
- -$(DEL_FILE) *~ core *.core
-
-
-####### Sub-libraries
-
-distclean: clean
- -$(DEL_FILE) $(TARGET)
- -$(DEL_FILE) Makefile
-
-
-check: first
-
-compiler_rcc_make_all:
-compiler_rcc_clean:
-compiler_uic_make_all:
-compiler_uic_clean:
-compiler_image_collection_make_all: qmake_image_collection.cpp
-compiler_image_collection_clean:
- -$(DEL_FILE) qmake_image_collection.cpp
-compiler_yacc_decl_make_all:
-compiler_yacc_decl_clean:
-compiler_yacc_impl_make_all:
-compiler_yacc_impl_clean:
-compiler_lex_make_all:
-compiler_lex_clean:
-compiler_clean:
-
-####### Compile
-
-main.o: main.cpp ttfpoint.h \
- poly2tri/poly2tri.h \
- poly2tri/common/shapes.h \
- poly2tri/sweep/cdt.h \
- poly2tri/sweep/advancing_front.h \
- poly2tri/sweep/sweep_context.h \
- poly2tri/sweep/sweep.h
- $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp
-
-ttfpoint.o: ttfpoint.cpp ttfpoint.h \
- poly2tri/poly2tri.h \
- poly2tri/common/shapes.h \
- poly2tri/sweep/cdt.h \
- poly2tri/sweep/advancing_front.h \
- poly2tri/sweep/sweep_context.h \
- poly2tri/sweep/sweep.h
- $(CXX) -c $(CXXFLAGS) $(INCPATH) -o ttfpoint.o ttfpoint.cpp
-
-sweep_context.o: poly2tri/sweep/sweep_context.cc poly2tri/sweep/sweep_context.h \
- poly2tri/sweep/advancing_front.h \
- poly2tri/common/shapes.h
- $(CXX) -c $(CXXFLAGS) $(INCPATH) -o sweep_context.o poly2tri/sweep/sweep_context.cc
-
-sweep.o: poly2tri/sweep/sweep.cc poly2tri/sweep/sweep.h \
- poly2tri/sweep/sweep_context.h \
- poly2tri/sweep/advancing_front.h \
- poly2tri/common/shapes.h \
- poly2tri/common/utils.h
- $(CXX) -c $(CXXFLAGS) $(INCPATH) -o sweep.o poly2tri/sweep/sweep.cc
-
-cdt.o: poly2tri/sweep/cdt.cc poly2tri/sweep/cdt.h \
- poly2tri/sweep/advancing_front.h \
- poly2tri/common/shapes.h \
- poly2tri/sweep/sweep_context.h \
- poly2tri/sweep/sweep.h
- $(CXX) -c $(CXXFLAGS) $(INCPATH) -o cdt.o poly2tri/sweep/cdt.cc
-
-advancing_front.o: poly2tri/sweep/advancing_front.cc poly2tri/sweep/advancing_front.h \
- poly2tri/common/shapes.h
- $(CXX) -c $(CXXFLAGS) $(INCPATH) -o advancing_front.o poly2tri/sweep/advancing_front.cc
-
-shapes.o: poly2tri/common/shapes.cc poly2tri/common/shapes.h
- $(CXX) -c $(CXXFLAGS) $(INCPATH) -o shapes.o poly2tri/common/shapes.cc
-
-####### Install
-
-install: FORCE
-
-uninstall: FORCE
-
-FORCE:
-
Index: sw/utils/fonter/test2.ttf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: sw/utils/fonter/test2.ttf
===================================================================
--- sw/utils/fonter/test2.ttf (revision 5)
+++ sw/utils/fonter/test2.ttf (nonexistent)
sw/utils/fonter/test2.ttf
Property changes :
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: sw/utils/fonter/poly2tri/common/utils.h
===================================================================
--- sw/utils/fonter/poly2tri/common/utils.h (revision 5)
+++ sw/utils/fonter/poly2tri/common/utils.h (nonexistent)
@@ -1,123 +0,0 @@
-/*
- * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
- * http://code.google.com/p/poly2tri/
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither the name of Poly2Tri nor the names of its contributors may be
- * used to endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef UTILS_H
-#define UTILS_H
-
-// Otherwise #defines like M_PI are undeclared under Visual Studio
-#define _USE_MATH_DEFINES
-
-#include
-#include
-
-namespace p2t {
-
-const double PI_3div4 = 3 * M_PI / 4;
-const double PI_div2 = 1.57079632679489661923;
-const double EPSILON = 1e-12;
-
-enum Orientation { CW, CCW, COLLINEAR };
-
-/**
- * Forumla to calculate signed area
- * Positive if CCW
- * Negative if CW
- * 0 if collinear
- *
-
-namespace p2t {
-
-Triangle::Triangle(Point& a, Point& b, Point& c)
-{
- points_[0] = &a; points_[1] = &b; points_[2] = &c;
- neighbors_[0] = NULL; neighbors_[1] = NULL; neighbors_[2] = NULL;
- constrained_edge[0] = constrained_edge[1] = constrained_edge[2] = false;
- delaunay_edge[0] = delaunay_edge[1] = delaunay_edge[2] = false;
- interior_ = false;
-}
-
-// Update neighbor pointers
-void Triangle::MarkNeighbor(Point* p1, Point* p2, Triangle* t)
-{
- if ((p1 == points_[2] && p2 == points_[1]) || (p1 == points_[1] && p2 == points_[2]))
- neighbors_[0] = t;
- else if ((p1 == points_[0] && p2 == points_[2]) || (p1 == points_[2] && p2 == points_[0]))
- neighbors_[1] = t;
- else if ((p1 == points_[0] && p2 == points_[1]) || (p1 == points_[1] && p2 == points_[0]))
- neighbors_[2] = t;
- else
- assert(0);
-}
-
-// Exhaustive search to update neighbor pointers
-void Triangle::MarkNeighbor(Triangle& t)
-{
- if (t.Contains(points_[1], points_[2])) {
- neighbors_[0] = &t;
- t.MarkNeighbor(points_[1], points_[2], this);
- } else if (t.Contains(points_[0], points_[2])) {
- neighbors_[1] = &t;
- t.MarkNeighbor(points_[0], points_[2], this);
- } else if (t.Contains(points_[0], points_[1])) {
- neighbors_[2] = &t;
- t.MarkNeighbor(points_[0], points_[1], this);
- }
-}
-
-/**
- * Clears all references to all other triangles and points
- */
-void Triangle::Clear()
-{
- Triangle *t;
- for( int i=0; i<3; i++ )
- {
- t = neighbors_[i];
- if( t != NULL )
- {
- t->ClearNeighbor( this );
- }
- }
- ClearNeighbors();
- points_[0]=points_[1]=points_[2] = NULL;
-}
-
-void Triangle::ClearNeighbor(Triangle *triangle )
-{
- if( neighbors_[0] == triangle )
- {
- neighbors_[0] = NULL;
- }
- else if( neighbors_[1] == triangle )
- {
- neighbors_[1] = NULL;
- }
- else
- {
- neighbors_[2] = NULL;
- }
-}
-
-void Triangle::ClearNeighbors()
-{
- neighbors_[0] = NULL;
- neighbors_[1] = NULL;
- neighbors_[2] = NULL;
-}
-
-void Triangle::ClearDelunayEdges()
-{
- delaunay_edge[0] = delaunay_edge[1] = delaunay_edge[2] = false;
-}
-
-Point* Triangle::OppositePoint(Triangle& t, Point& p)
-{
- Point *cw = t.PointCW(p);
-/* double x = cw->x;
- double y = cw->y;
- x = p.x;
- y = p.y;*/
- return PointCW(*cw);
-}
-
-// Legalized triangle by rotating clockwise around point(0)
-void Triangle::Legalize(Point& point)
-{
- points_[1] = points_[0];
- points_[0] = points_[2];
- points_[2] = &point;
-}
-
-// Legalize triagnle by rotating clockwise around oPoint
-void Triangle::Legalize(Point& opoint, Point& npoint)
-{
- if (&opoint == points_[0]) {
- points_[1] = points_[0];
- points_[0] = points_[2];
- points_[2] = &npoint;
- } else if (&opoint == points_[1]) {
- points_[2] = points_[1];
- points_[1] = points_[0];
- points_[0] = &npoint;
- } else if (&opoint == points_[2]) {
- points_[0] = points_[2];
- points_[2] = points_[1];
- points_[1] = &npoint;
- } else {
- assert(0);
- }
-}
-
-int Triangle::Index(const Point* p)
-{
- if (p == points_[0]) {
- return 0;
- } else if (p == points_[1]) {
- return 1;
- } else if (p == points_[2]) {
- return 2;
- }
- assert(0);
-}
-
-int Triangle::EdgeIndex(const Point* p1, const Point* p2)
-{
- if (points_[0] == p1) {
- if (points_[1] == p2) {
- return 2;
- } else if (points_[2] == p2) {
- return 1;
- }
- } else if (points_[1] == p1) {
- if (points_[2] == p2) {
- return 0;
- } else if (points_[0] == p2) {
- return 2;
- }
- } else if (points_[2] == p1) {
- if (points_[0] == p2) {
- return 1;
- } else if (points_[1] == p2) {
- return 0;
- }
- }
- return -1;
-}
-
-void Triangle::MarkConstrainedEdge(const int index)
-{
- constrained_edge[index] = true;
-}
-
-void Triangle::MarkConstrainedEdge(Edge& edge)
-{
- MarkConstrainedEdge(edge.p, edge.q);
-}
-
-// Mark edge as constrained
-void Triangle::MarkConstrainedEdge(Point* p, Point* q)
-{
- if ((q == points_[0] && p == points_[1]) || (q == points_[1] && p == points_[0])) {
- constrained_edge[2] = true;
- } else if ((q == points_[0] && p == points_[2]) || (q == points_[2] && p == points_[0])) {
- constrained_edge[1] = true;
- } else if ((q == points_[1] && p == points_[2]) || (q == points_[2] && p == points_[1])) {
- constrained_edge[0] = true;
- }
-}
-
-// The point counter-clockwise to given point
-Point* Triangle::PointCW(Point& point)
-{
- if (&point == points_[0]) {
- return points_[2];
- } else if (&point == points_[1]) {
- return points_[0];
- } else if (&point == points_[2]) {
- return points_[1];
- }
- assert(0);
-}
-
-// The point counter-clockwise to given point
-Point* Triangle::PointCCW(Point& point)
-{
- if (&point == points_[0]) {
- return points_[1];
- } else if (&point == points_[1]) {
- return points_[2];
- } else if (&point == points_[2]) {
- return points_[0];
- }
- assert(0);
-}
-
-// The neighbor clockwise to given point
-Triangle* Triangle::NeighborCW(Point& point)
-{
- if (&point == points_[0]) {
- return neighbors_[1];
- } else if (&point == points_[1]) {
- return neighbors_[2];
- }
- return neighbors_[0];
-}
-
-// The neighbor counter-clockwise to given point
-Triangle* Triangle::NeighborCCW(Point& point)
-{
- if (&point == points_[0]) {
- return neighbors_[2];
- } else if (&point == points_[1]) {
- return neighbors_[0];
- }
- return neighbors_[1];
-}
-
-bool Triangle::GetConstrainedEdgeCCW(Point& p)
-{
- if (&p == points_[0]) {
- return constrained_edge[2];
- } else if (&p == points_[1]) {
- return constrained_edge[0];
- }
- return constrained_edge[1];
-}
-
-bool Triangle::GetConstrainedEdgeCW(Point& p)
-{
- if (&p == points_[0]) {
- return constrained_edge[1];
- } else if (&p == points_[1]) {
- return constrained_edge[2];
- }
- return constrained_edge[0];
-}
-
-void Triangle::SetConstrainedEdgeCCW(Point& p, bool ce)
-{
- if (&p == points_[0]) {
- constrained_edge[2] = ce;
- } else if (&p == points_[1]) {
- constrained_edge[0] = ce;
- } else {
- constrained_edge[1] = ce;
- }
-}
-
-void Triangle::SetConstrainedEdgeCW(Point& p, bool ce)
-{
- if (&p == points_[0]) {
- constrained_edge[1] = ce;
- } else if (&p == points_[1]) {
- constrained_edge[2] = ce;
- } else {
- constrained_edge[0] = ce;
- }
-}
-
-bool Triangle::GetDelunayEdgeCCW(Point& p)
-{
- if (&p == points_[0]) {
- return delaunay_edge[2];
- } else if (&p == points_[1]) {
- return delaunay_edge[0];
- }
- return delaunay_edge[1];
-}
-
-bool Triangle::GetDelunayEdgeCW(Point& p)
-{
- if (&p == points_[0]) {
- return delaunay_edge[1];
- } else if (&p == points_[1]) {
- return delaunay_edge[2];
- }
- return delaunay_edge[0];
-}
-
-void Triangle::SetDelunayEdgeCCW(Point& p, bool e)
-{
- if (&p == points_[0]) {
- delaunay_edge[2] = e;
- } else if (&p == points_[1]) {
- delaunay_edge[0] = e;
- } else {
- delaunay_edge[1] = e;
- }
-}
-
-void Triangle::SetDelunayEdgeCW(Point& p, bool e)
-{
- if (&p == points_[0]) {
- delaunay_edge[1] = e;
- } else if (&p == points_[1]) {
- delaunay_edge[2] = e;
- } else {
- delaunay_edge[0] = e;
- }
-}
-
-// The neighbor across to given point
-Triangle& Triangle::NeighborAcross(Point& opoint)
-{
- if (&opoint == points_[0]) {
- return *neighbors_[0];
- } else if (&opoint == points_[1]) {
- return *neighbors_[1];
- }
- return *neighbors_[2];
-}
-
-void Triangle::DebugPrint()
-{
- using namespace std;
- cout << points_[0]->x << "," << points_[0]->y << " ";
- cout << points_[1]->x << "," << points_[1]->y << " ";
- cout << points_[2]->x << "," << points_[2]->y << endl;
-}
-
-}
-
Index: sw/utils/fonter/poly2tri/common/shapes.h
===================================================================
--- sw/utils/fonter/poly2tri/common/shapes.h (revision 5)
+++ sw/utils/fonter/poly2tri/common/shapes.h (nonexistent)
@@ -1,325 +0,0 @@
-/*
- * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
- * http://code.google.com/p/poly2tri/
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither the name of Poly2Tri nor the names of its contributors may be
- * used to endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// Include guard
-#ifndef SHAPES_H
-#define SHAPES_H
-
-#include
-#include
-#include
-#include
-
-namespace p2t {
-
-struct Edge;
-
-struct Point {
-
- double x, y;
-
- /// Default constructor does nothing (for performance).
- Point()
- {
- x = 0.0;
- y = 0.0;
- }
-
- /// The edges this point constitutes an upper ending point
- std::vector edge_list;
-
- /// Construct using coordinates.
- Point(double x, double y) : x(x), y(y) {}
-
- /// Set this point to all zeros.
- void set_zero()
- {
- x = 0.0;
- y = 0.0;
- }
-
- /// Set this point to some specified coordinates.
- void set(double x_, double y_)
- {
- x = x_;
- y = y_;
- }
-
- /// Negate this point.
- Point operator -() const
- {
- Point v;
- v.set(-x, -y);
- return v;
- }
-
- /// Add a point to this point.
- void operator +=(const Point& v)
- {
- x += v.x;
- y += v.y;
- }
-
- /// Subtract a point from this point.
- void operator -=(const Point& v)
- {
- x -= v.x;
- y -= v.y;
- }
-
- /// Multiply this point by a scalar.
- void operator *=(double a)
- {
- x *= a;
- y *= a;
- }
-
- /// Get the length of this point (the norm).
- double Length() const
- {
- return sqrt(x * x + y * y);
- }
-
- /// Convert this point into a unit point. Returns the Length.
- double Normalize()
- {
- double len = Length();
- x /= len;
- y /= len;
- return len;
- }
-
-};
-
-// Represents a simple polygon's edge
-struct Edge {
-
- Point* p, *q;
-
- /// Constructor
- Edge(Point& p1, Point& p2) : p(&p1), q(&p2)
- {
- if (p1.y > p2.y) {
- q = &p1;
- p = &p2;
- } else if (p1.y == p2.y) {
- if (p1.x > p2.x) {
- q = &p1;
- p = &p2;
- } else if (p1.x == p2.x) {
- // Repeat points
- assert(false);
- }
- }
-
- q->edge_list.push_back(this);
- }
-};
-
-// Triangle-based data structures are know to have better performance than quad-edge structures
-// See: J. Shewchuk, "Triangle: Engineering a 2D Quality Mesh Generator and Delaunay Triangulator"
-// "Triangulations in CGAL"
-class Triangle {
-public:
-
-/// Constructor
-Triangle(Point& a, Point& b, Point& c);
-
-/// Flags to determine if an edge is a Constrained edge
-bool constrained_edge[3];
-/// Flags to determine if an edge is a Delauney edge
-bool delaunay_edge[3];
-
-Point* GetPoint(const int& index);
-Point* PointCW(Point& point);
-Point* PointCCW(Point& point);
-Point* OppositePoint(Triangle& t, Point& p);
-
-Triangle* GetNeighbor(const int& index);
-void MarkNeighbor(Point* p1, Point* p2, Triangle* t);
-void MarkNeighbor(Triangle& t);
-
-void MarkConstrainedEdge(const int index);
-void MarkConstrainedEdge(Edge& edge);
-void MarkConstrainedEdge(Point* p, Point* q);
-
-int Index(const Point* p);
-int EdgeIndex(const Point* p1, const Point* p2);
-
-Triangle* NeighborCW(Point& point);
-Triangle* NeighborCCW(Point& point);
-bool GetConstrainedEdgeCCW(Point& p);
-bool GetConstrainedEdgeCW(Point& p);
-void SetConstrainedEdgeCCW(Point& p, bool ce);
-void SetConstrainedEdgeCW(Point& p, bool ce);
-bool GetDelunayEdgeCCW(Point& p);
-bool GetDelunayEdgeCW(Point& p);
-void SetDelunayEdgeCCW(Point& p, bool e);
-void SetDelunayEdgeCW(Point& p, bool e);
-
-bool Contains(Point* p);
-bool Contains(const Edge& e);
-bool Contains(Point* p, Point* q);
-void Legalize(Point& point);
-void Legalize(Point& opoint, Point& npoint);
-/**
- * Clears all references to all other triangles and points
- */
-void Clear();
-void ClearNeighbor(Triangle *triangle );
-void ClearNeighbors();
-void ClearDelunayEdges();
-
-inline bool IsInterior();
-inline void IsInterior(bool b);
-
-Triangle& NeighborAcross(Point& opoint);
-
-void DebugPrint();
-
-private:
-
-/// Triangle points
-Point* points_[3];
-/// Neighbor list
-Triangle* neighbors_[3];
-
-/// Has this triangle been marked as an interior triangle?
-bool interior_;
-};
-
-inline bool cmp(const Point* a, const Point* b)
-{
- if (a->y < b->y) {
- return true;
- } else if (a->y == b->y) {
- // Make sure q is point with greater x value
- if (a->x < b->x) {
- return true;
- }
- }
- return false;
-}
-
-/// Add two points_ component-wise.
-inline Point operator +(const Point& a, const Point& b)
-{
- return Point(a.x + b.x, a.y + b.y);
-}
-
-/// Subtract two points_ component-wise.
-inline Point operator -(const Point& a, const Point& b)
-{
- return Point(a.x - b.x, a.y - b.y);
-}
-
-/// Multiply point by scalar
-inline Point operator *(double s, const Point& a)
-{
- return Point(s * a.x, s * a.y);
-}
-
-inline bool operator ==(const Point& a, const Point& b)
-{
- return a.x == b.x && a.y == b.y;
-}
-
-inline bool operator !=(const Point& a, const Point& b)
-{
- return a.x != b.x && a.y != b.y;
-}
-
-/// Peform the dot product on two vectors.
-inline double Dot(const Point& a, const Point& b)
-{
- return a.x * b.x + a.y * b.y;
-}
-
-/// Perform the cross product on two vectors. In 2D this produces a scalar.
-inline double Cross(const Point& a, const Point& b)
-{
- return a.x * b.y - a.y * b.x;
-}
-
-/// Perform the cross product on a point and a scalar. In 2D this produces
-/// a point.
-inline Point Cross(const Point& a, double s)
-{
- return Point(s * a.y, -s * a.x);
-}
-
-/// Perform the cross product on a scalar and a point. In 2D this produces
-/// a point.
-inline Point Cross(const double s, const Point& a)
-{
- return Point(-s * a.y, s * a.x);
-}
-
-inline Point* Triangle::GetPoint(const int& index)
-{
- return points_[index];
-}
-
-inline Triangle* Triangle::GetNeighbor(const int& index)
-{
- return neighbors_[index];
-}
-
-inline bool Triangle::Contains(Point* p)
-{
- return p == points_[0] || p == points_[1] || p == points_[2];
-}
-
-inline bool Triangle::Contains(const Edge& e)
-{
- return Contains(e.p) && Contains(e.q);
-}
-
-inline bool Triangle::Contains(Point* p, Point* q)
-{
- return Contains(p) && Contains(q);
-}
-
-inline bool Triangle::IsInterior()
-{
- return interior_;
-}
-
-inline void Triangle::IsInterior(bool b)
-{
- interior_ = b;
-}
-
-}
-
-#endif
-
-
Index: sw/utils/fonter/poly2tri/poly2tri.h
===================================================================
--- sw/utils/fonter/poly2tri/poly2tri.h (revision 5)
+++ sw/utils/fonter/poly2tri/poly2tri.h (nonexistent)
@@ -1,39 +0,0 @@
-/*
- * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
- * http://code.google.com/p/poly2tri/
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither the name of Poly2Tri nor the names of its contributors may be
- * used to endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef POLY2TRI_H
-#define POLY2TRI_H
-
-#include "common/shapes.h"
-#include "sweep/cdt.h"
-
-#endif
-
Index: sw/utils/fonter/poly2tri/LICENSE
===================================================================
--- sw/utils/fonter/poly2tri/LICENSE (revision 5)
+++ sw/utils/fonter/poly2tri/LICENSE (nonexistent)
@@ -1,27 +0,0 @@
-Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
-http://code.google.com/p/poly2tri/
-
-All rights reserved.
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-* Neither the name of Poly2Tri nor the names of its contributors may be
- used to endorse or promote products derived from this software without specific
- prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Index: sw/utils/fonter/poly2tri/sweep/sweep.cc
===================================================================
--- sw/utils/fonter/poly2tri/sweep/sweep.cc (revision 5)
+++ sw/utils/fonter/poly2tri/sweep/sweep.cc (nonexistent)
@@ -1,813 +0,0 @@
-/*
- * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
- * http://code.google.com/p/poly2tri/
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither the name of Poly2Tri nor the names of its contributors may be
- * used to endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include
-#include "sweep.h"
-#include "sweep_context.h"
-#include "advancing_front.h"
-#include "../common/utils.h"
-
-namespace p2t {
-
-// Triangulate simple polygon with holes
-void Sweep::Triangulate(SweepContext& tcx)
-{
- tcx.InitTriangulation();
- tcx.CreateAdvancingFront(nodes_);
- // Sweep points; build mesh
- SweepPoints(tcx);
- // Clean up
- FinalizationPolygon(tcx);
-}
-
-void Sweep::SweepPoints(SweepContext& tcx)
-{
- for (int i = 1; i < tcx.point_count(); i++) {
- Point& point = *tcx.GetPoint(i);
- Node* node = &PointEvent(tcx, point);
- for (unsigned int i = 0; i < point.edge_list.size(); i++) {
- EdgeEvent(tcx, point.edge_list[i], node);
- }
- }
-}
-
-void Sweep::FinalizationPolygon(SweepContext& tcx)
-{
- // Get an Internal triangle to start with
- Triangle* t = tcx.front()->head()->next->triangle;
- Point* p = tcx.front()->head()->next->point;
- while (!t->GetConstrainedEdgeCW(*p)) {
- t = t->NeighborCCW(*p);
- }
-
- // Collect interior triangles constrained by edges
- tcx.MeshClean(*t);
-}
-
-Node& Sweep::PointEvent(SweepContext& tcx, Point& point)
-{
- Node& node = tcx.LocateNode(point);
- Node& new_node = NewFrontTriangle(tcx, point, node);
-
- // Only need to check +epsilon since point never have smaller
- // x value than node due to how we fetch nodes from the front
- if (point.x <= node.point->x + EPSILON) {
- Fill(tcx, node);
- }
-
- //tcx.AddNode(new_node);
-
- FillAdvancingFront(tcx, new_node);
- return new_node;
-}
-
-void Sweep::EdgeEvent(SweepContext& tcx, Edge* edge, Node* node)
-{
- tcx.edge_event.constrained_edge = edge;
- tcx.edge_event.right = (edge->p->x > edge->q->x);
-
- if (IsEdgeSideOfTriangle(*node->triangle, *edge->p, *edge->q)) {
- return;
- }
-
- // For now we will do all needed filling
- // TODO: integrate with flip process might give some better performance
- // but for now this avoid the issue with cases that needs both flips and fills
- FillEdgeEvent(tcx, edge, node);
- EdgeEvent(tcx, *edge->p, *edge->q, node->triangle, *edge->q);
-}
-
-void Sweep::EdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* triangle, Point& point)
-{
- if (IsEdgeSideOfTriangle(*triangle, ep, eq)) {
- return;
- }
-
- Point* p1 = triangle->PointCCW(point);
- Orientation o1 = Orient2d(eq, *p1, ep);
- if (o1 == COLLINEAR) {
- if( triangle->Contains(&eq, p1)) {
- triangle->MarkConstrainedEdge(&eq, p1 );
- // We are modifying the constraint maybe it would be better to
- // not change the given constraint and just keep a variable for the new constraint
- tcx.edge_event.constrained_edge->q = p1;
- triangle = &triangle->NeighborAcross(point);
- EdgeEvent( tcx, ep, *p1, triangle, *p1 );
- } else {
- std::runtime_error("EdgeEvent - collinear points not supported");
- assert(0);
- }
- return;
- }
-
- Point* p2 = triangle->PointCW(point);
- Orientation o2 = Orient2d(eq, *p2, ep);
- if (o2 == COLLINEAR) {
- if( triangle->Contains(&eq, p2)) {
- triangle->MarkConstrainedEdge(&eq, p2 );
- // We are modifying the constraint maybe it would be better to
- // not change the given constraint and just keep a variable for the new constraint
- tcx.edge_event.constrained_edge->q = p2;
- triangle = &triangle->NeighborAcross(point);
- EdgeEvent( tcx, ep, *p2, triangle, *p2 );
- } else {
- std::runtime_error("EdgeEvent - collinear points not supported");
- assert(0);
- }
- return;
- }
-
- if (o1 == o2) {
- // Need to decide if we are rotating CW or CCW to get to a triangle
- // that will cross edge
- if (o1 == CW) {
- triangle = triangle->NeighborCCW(point);
- } else{
- triangle = triangle->NeighborCW(point);
- }
- EdgeEvent(tcx, ep, eq, triangle, point);
- } else {
- // This triangle crosses constraint so lets flippin start!
- FlipEdgeEvent(tcx, ep, eq, triangle, point);
- }
-}
-
-bool Sweep::IsEdgeSideOfTriangle(Triangle& triangle, Point& ep, Point& eq)
-{
- int index = triangle.EdgeIndex(&ep, &eq);
-
- if (index != -1) {
- triangle.MarkConstrainedEdge(index);
- Triangle* t = triangle.GetNeighbor(index);
- if (t) {
- t->MarkConstrainedEdge(&ep, &eq);
- }
- return true;
- }
- return false;
-}
-
-Node& Sweep::NewFrontTriangle(SweepContext& tcx, Point& point, Node& node)
-{
- Triangle* triangle = new Triangle(point, *node.point, *node.next->point);
-
- triangle->MarkNeighbor(*node.triangle);
- tcx.AddToMap(triangle);
-
- Node* new_node = new Node(point);
- nodes_.push_back(new_node);
-
- new_node->next = node.next;
- new_node->prev = &node;
- node.next->prev = new_node;
- node.next = new_node;
-
- if (!Legalize(tcx, *triangle)) {
- tcx.MapTriangleToNodes(*triangle);
- }
-
- return *new_node;
-}
-
-void Sweep::Fill(SweepContext& tcx, Node& node)
-{
- Triangle* triangle = new Triangle(*node.prev->point, *node.point, *node.next->point);
-
- // TODO: should copy the constrained_edge value from neighbor triangles
- // for now constrained_edge values are copied during the legalize
- triangle->MarkNeighbor(*node.prev->triangle);
- triangle->MarkNeighbor(*node.triangle);
-
- tcx.AddToMap(triangle);
-
- // Update the advancing front
- node.prev->next = node.next;
- node.next->prev = node.prev;
-
- // If it was legalized the triangle has already been mapped
- if (!Legalize(tcx, *triangle)) {
- tcx.MapTriangleToNodes(*triangle);
- }
-
-}
-
-void Sweep::FillAdvancingFront(SweepContext& tcx, Node& n)
-{
-
- // Fill right holes
- Node* node = n.next;
-
- while (node->next) {
- // if HoleAngle exceeds 90 degrees then break.
- if (LargeHole_DontFill(node)) break;
- Fill(tcx, *node);
- node = node->next;
- }
-
- // Fill left holes
- node = n.prev;
-
- while (node->prev) {
- // if HoleAngle exceeds 90 degrees then break.
- if (LargeHole_DontFill(node)) break;
- Fill(tcx, *node);
- node = node->prev;
- }
-
- // Fill right basins
- if (n.next && n.next->next) {
- double angle = BasinAngle(n);
- if (angle < PI_3div4) {
- FillBasin(tcx, n);
- }
- }
-}
-
-// True if HoleAngle exceeds 90 degrees.
-bool Sweep::LargeHole_DontFill(Node* node) {
-
- Node* nextNode = node->next;
- Node* prevNode = node->prev;
- if (!AngleExceeds90Degrees(node->point, nextNode->point, prevNode->point))
- return false;
-
- // Check additional points on front.
- Node* next2Node = nextNode->next;
- // "..Plus.." because only want angles on same side as point being added.
- if ((next2Node != NULL) && !AngleExceedsPlus90DegreesOrIsNegative(node->point, next2Node->point, prevNode->point))
- return false;
-
- Node* prev2Node = prevNode->prev;
- // "..Plus.." because only want angles on same side as point being added.
- if ((prev2Node != NULL) && !AngleExceedsPlus90DegreesOrIsNegative(node->point, nextNode->point, prev2Node->point))
- return false;
-
- return true;
-}
-
-bool Sweep::AngleExceeds90Degrees(Point* origin, Point* pa, Point* pb) {
- double angle = Angle(*origin, *pa, *pb);
- bool exceeds90Degrees = ((angle > PI_div2) || (angle < -PI_div2));
- return exceeds90Degrees;
-}
-
-bool Sweep::AngleExceedsPlus90DegreesOrIsNegative(Point* origin, Point* pa, Point* pb) {
- double angle = Angle(*origin, *pa, *pb);
- bool exceedsPlus90DegreesOrIsNegative = (angle > PI_div2) || (angle < 0);
- return exceedsPlus90DegreesOrIsNegative;
-}
-
-double Sweep::Angle(Point& origin, Point& pa, Point& pb) {
- /* Complex plane
- * ab = cosA +i*sinA
- * ab = (ax + ay*i)(bx + by*i) = (ax*bx + ay*by) + i(ax*by-ay*bx)
- * atan2(y,x) computes the principal value of the argument function
- * applied to the complex number x+iy
- * Where x = ax*bx + ay*by
- * y = ax*by - ay*bx
- */
- double px = origin.x;
- double py = origin.y;
- double ax = pa.x- px;
- double ay = pa.y - py;
- double bx = pb.x - px;
- double by = pb.y - py;
- double x = ax * by - ay * bx;
- double y = ax * bx + ay * by;
- double angle = atan2(x, y);
- return angle;
-}
-
-double Sweep::BasinAngle(Node& node)
-{
- double ax = node.point->x - node.next->next->point->x;
- double ay = node.point->y - node.next->next->point->y;
- return atan2(ay, ax);
-}
-
-double Sweep::HoleAngle(Node& node)
-{
- /* Complex plane
- * ab = cosA +i*sinA
- * ab = (ax + ay*i)(bx + by*i) = (ax*bx + ay*by) + i(ax*by-ay*bx)
- * atan2(y,x) computes the principal value of the argument function
- * applied to the complex number x+iy
- * Where x = ax*bx + ay*by
- * y = ax*by - ay*bx
- */
- double ax = node.next->point->x - node.point->x;
- double ay = node.next->point->y - node.point->y;
- double bx = node.prev->point->x - node.point->x;
- double by = node.prev->point->y - node.point->y;
- return atan2(ax * by - ay * bx, ax * bx + ay * by);
-}
-
-bool Sweep::Legalize(SweepContext& tcx, Triangle& t)
-{
- // To legalize a triangle we start by finding if any of the three edges
- // violate the Delaunay condition
- for (int i = 0; i < 3; i++) {
- if (t.delaunay_edge[i])
- continue;
-
- Triangle* ot = t.GetNeighbor(i);
-
- if (ot) {
- Point* p = t.GetPoint(i);
- Point* op = ot->OppositePoint(t, *p);
- int oi = ot->Index(op);
-
- // If this is a Constrained Edge or a Delaunay Edge(only during recursive legalization)
- // then we should not try to legalize
- if (ot->constrained_edge[oi] || ot->delaunay_edge[oi]) {
- t.constrained_edge[i] = ot->constrained_edge[oi];
- continue;
- }
-
- bool inside = Incircle(*p, *t.PointCCW(*p), *t.PointCW(*p), *op);
-
- if (inside) {
- // Lets mark this shared edge as Delaunay
- t.delaunay_edge[i] = true;
- ot->delaunay_edge[oi] = true;
-
- // Lets rotate shared edge one vertex CW to legalize it
- RotateTrianglePair(t, *p, *ot, *op);
-
- // We now got one valid Delaunay Edge shared by two triangles
- // This gives us 4 new edges to check for Delaunay
-
- // Make sure that triangle to node mapping is done only one time for a specific triangle
- bool not_legalized = !Legalize(tcx, t);
- if (not_legalized) {
- tcx.MapTriangleToNodes(t);
- }
-
- not_legalized = !Legalize(tcx, *ot);
- if (not_legalized)
- tcx.MapTriangleToNodes(*ot);
-
- // Reset the Delaunay edges, since they only are valid Delaunay edges
- // until we add a new triangle or point.
- // XXX: need to think about this. Can these edges be tried after we
- // return to previous recursive level?
- t.delaunay_edge[i] = false;
- ot->delaunay_edge[oi] = false;
-
- // If triangle have been legalized no need to check the other edges since
- // the recursive legalization will handles those so we can end here.
- return true;
- }
- }
- }
- return false;
-}
-
-bool Sweep::Incircle(Point& pa, Point& pb, Point& pc, Point& pd)
-{
- double adx = pa.x - pd.x;
- double ady = pa.y - pd.y;
- double bdx = pb.x - pd.x;
- double bdy = pb.y - pd.y;
-
- double adxbdy = adx * bdy;
- double bdxady = bdx * ady;
- double oabd = adxbdy - bdxady;
-
- if (oabd <= 0)
- return false;
-
- double cdx = pc.x - pd.x;
- double cdy = pc.y - pd.y;
-
- double cdxady = cdx * ady;
- double adxcdy = adx * cdy;
- double ocad = cdxady - adxcdy;
-
- if (ocad <= 0)
- return false;
-
- double bdxcdy = bdx * cdy;
- double cdxbdy = cdx * bdy;
-
- double alift = adx * adx + ady * ady;
- double blift = bdx * bdx + bdy * bdy;
- double clift = cdx * cdx + cdy * cdy;
-
- double det = alift * (bdxcdy - cdxbdy) + blift * ocad + clift * oabd;
-
- return det > 0;
-}
-
-void Sweep::RotateTrianglePair(Triangle& t, Point& p, Triangle& ot, Point& op)
-{
- Triangle* n1, *n2, *n3, *n4;
- n1 = t.NeighborCCW(p);
- n2 = t.NeighborCW(p);
- n3 = ot.NeighborCCW(op);
- n4 = ot.NeighborCW(op);
-
- bool ce1, ce2, ce3, ce4;
- ce1 = t.GetConstrainedEdgeCCW(p);
- ce2 = t.GetConstrainedEdgeCW(p);
- ce3 = ot.GetConstrainedEdgeCCW(op);
- ce4 = ot.GetConstrainedEdgeCW(op);
-
- bool de1, de2, de3, de4;
- de1 = t.GetDelunayEdgeCCW(p);
- de2 = t.GetDelunayEdgeCW(p);
- de3 = ot.GetDelunayEdgeCCW(op);
- de4 = ot.GetDelunayEdgeCW(op);
-
- t.Legalize(p, op);
- ot.Legalize(op, p);
-
- // Remap delaunay_edge
- ot.SetDelunayEdgeCCW(p, de1);
- t.SetDelunayEdgeCW(p, de2);
- t.SetDelunayEdgeCCW(op, de3);
- ot.SetDelunayEdgeCW(op, de4);
-
- // Remap constrained_edge
- ot.SetConstrainedEdgeCCW(p, ce1);
- t.SetConstrainedEdgeCW(p, ce2);
- t.SetConstrainedEdgeCCW(op, ce3);
- ot.SetConstrainedEdgeCW(op, ce4);
-
- // Remap neighbors
- // XXX: might optimize the markNeighbor by keeping track of
- // what side should be assigned to what neighbor after the
- // rotation. Now mark neighbor does lots of testing to find
- // the right side.
- t.ClearNeighbors();
- ot.ClearNeighbors();
- if (n1) ot.MarkNeighbor(*n1);
- if (n2) t.MarkNeighbor(*n2);
- if (n3) t.MarkNeighbor(*n3);
- if (n4) ot.MarkNeighbor(*n4);
- t.MarkNeighbor(ot);
-}
-
-void Sweep::FillBasin(SweepContext& tcx, Node& node)
-{
- if (Orient2d(*node.point, *node.next->point, *node.next->next->point) == CCW) {
- tcx.basin.left_node = node.next->next;
- } else {
- tcx.basin.left_node = node.next;
- }
-
- // Find the bottom and right node
- tcx.basin.bottom_node = tcx.basin.left_node;
- while (tcx.basin.bottom_node->next
- && tcx.basin.bottom_node->point->y >= tcx.basin.bottom_node->next->point->y) {
- tcx.basin.bottom_node = tcx.basin.bottom_node->next;
- }
- if (tcx.basin.bottom_node == tcx.basin.left_node) {
- // No valid basin
- return;
- }
-
- tcx.basin.right_node = tcx.basin.bottom_node;
- while (tcx.basin.right_node->next
- && tcx.basin.right_node->point->y < tcx.basin.right_node->next->point->y) {
- tcx.basin.right_node = tcx.basin.right_node->next;
- }
- if (tcx.basin.right_node == tcx.basin.bottom_node) {
- // No valid basins
- return;
- }
-
- tcx.basin.width = tcx.basin.right_node->point->x - tcx.basin.left_node->point->x;
- tcx.basin.left_highest = tcx.basin.left_node->point->y > tcx.basin.right_node->point->y;
-
- FillBasinReq(tcx, tcx.basin.bottom_node);
-}
-
-void Sweep::FillBasinReq(SweepContext& tcx, Node* node)
-{
- // if shallow stop filling
- if (IsShallow(tcx, *node)) {
- return;
- }
-
- Fill(tcx, *node);
-
- if (node->prev == tcx.basin.left_node && node->next == tcx.basin.right_node) {
- return;
- } else if (node->prev == tcx.basin.left_node) {
- Orientation o = Orient2d(*node->point, *node->next->point, *node->next->next->point);
- if (o == CW) {
- return;
- }
- node = node->next;
- } else if (node->next == tcx.basin.right_node) {
- Orientation o = Orient2d(*node->point, *node->prev->point, *node->prev->prev->point);
- if (o == CCW) {
- return;
- }
- node = node->prev;
- } else {
- // Continue with the neighbor node with lowest Y value
- if (node->prev->point->y < node->next->point->y) {
- node = node->prev;
- } else {
- node = node->next;
- }
- }
-
- FillBasinReq(tcx, node);
-}
-
-bool Sweep::IsShallow(SweepContext& tcx, Node& node)
-{
- double height;
-
- if (tcx.basin.left_highest) {
- height = tcx.basin.left_node->point->y - node.point->y;
- } else {
- height = tcx.basin.right_node->point->y - node.point->y;
- }
-
- // if shallow stop filling
- if (tcx.basin.width > height) {
- return true;
- }
- return false;
-}
-
-void Sweep::FillEdgeEvent(SweepContext& tcx, Edge* edge, Node* node)
-{
- if (tcx.edge_event.right) {
- FillRightAboveEdgeEvent(tcx, edge, node);
- } else {
- FillLeftAboveEdgeEvent(tcx, edge, node);
- }
-}
-
-void Sweep::FillRightAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node)
-{
- while (node->next->point->x < edge->p->x) {
- // Check if next node is below the edge
- if (Orient2d(*edge->q, *node->next->point, *edge->p) == CCW) {
- FillRightBelowEdgeEvent(tcx, edge, *node);
- } else {
- node = node->next;
- }
- }
-}
-
-void Sweep::FillRightBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node)
-{
- if (node.point->x < edge->p->x) {
- if (Orient2d(*node.point, *node.next->point, *node.next->next->point) == CCW) {
- // Concave
- FillRightConcaveEdgeEvent(tcx, edge, node);
- } else{
- // Convex
- FillRightConvexEdgeEvent(tcx, edge, node);
- // Retry this one
- FillRightBelowEdgeEvent(tcx, edge, node);
- }
- }
-}
-
-void Sweep::FillRightConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node)
-{
- Fill(tcx, *node.next);
- if (node.next->point != edge->p) {
- // Next above or below edge?
- if (Orient2d(*edge->q, *node.next->point, *edge->p) == CCW) {
- // Below
- if (Orient2d(*node.point, *node.next->point, *node.next->next->point) == CCW) {
- // Next is concave
- FillRightConcaveEdgeEvent(tcx, edge, node);
- } else {
- // Next is convex
- }
- }
- }
-
-}
-
-void Sweep::FillRightConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node)
-{
- // Next concave or convex?
- if (Orient2d(*node.next->point, *node.next->next->point, *node.next->next->next->point) == CCW) {
- // Concave
- FillRightConcaveEdgeEvent(tcx, edge, *node.next);
- } else{
- // Convex
- // Next above or below edge?
- if (Orient2d(*edge->q, *node.next->next->point, *edge->p) == CCW) {
- // Below
- FillRightConvexEdgeEvent(tcx, edge, *node.next);
- } else{
- // Above
- }
- }
-}
-
-void Sweep::FillLeftAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node)
-{
- while (node->prev->point->x > edge->p->x) {
- // Check if next node is below the edge
- if (Orient2d(*edge->q, *node->prev->point, *edge->p) == CW) {
- FillLeftBelowEdgeEvent(tcx, edge, *node);
- } else {
- node = node->prev;
- }
- }
-}
-
-void Sweep::FillLeftBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node)
-{
- if (node.point->x > edge->p->x) {
- if (Orient2d(*node.point, *node.prev->point, *node.prev->prev->point) == CW) {
- // Concave
- FillLeftConcaveEdgeEvent(tcx, edge, node);
- } else {
- // Convex
- FillLeftConvexEdgeEvent(tcx, edge, node);
- // Retry this one
- FillLeftBelowEdgeEvent(tcx, edge, node);
- }
- }
-}
-
-void Sweep::FillLeftConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node)
-{
- // Next concave or convex?
- if (Orient2d(*node.prev->point, *node.prev->prev->point, *node.prev->prev->prev->point) == CW) {
- // Concave
- FillLeftConcaveEdgeEvent(tcx, edge, *node.prev);
- } else{
- // Convex
- // Next above or below edge?
- if (Orient2d(*edge->q, *node.prev->prev->point, *edge->p) == CW) {
- // Below
- FillLeftConvexEdgeEvent(tcx, edge, *node.prev);
- } else{
- // Above
- }
- }
-}
-
-void Sweep::FillLeftConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node)
-{
- Fill(tcx, *node.prev);
- if (node.prev->point != edge->p) {
- // Next above or below edge?
- if (Orient2d(*edge->q, *node.prev->point, *edge->p) == CW) {
- // Below
- if (Orient2d(*node.point, *node.prev->point, *node.prev->prev->point) == CW) {
- // Next is concave
- FillLeftConcaveEdgeEvent(tcx, edge, node);
- } else{
- // Next is convex
- }
- }
- }
-
-}
-
-void Sweep::FlipEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* t, Point& p)
-{
- Triangle& ot = t->NeighborAcross(p);
- Point& op = *ot.OppositePoint(*t, p);
-
- if (&ot == NULL) {
- // If we want to integrate the fillEdgeEvent do it here
- // With current implementation we should never get here
- //throw new RuntimeException( "[BUG:FIXME] FLIP failed due to missing triangle");
- assert(0);
- }
-
- if (InScanArea(p, *t->PointCCW(p), *t->PointCW(p), op)) {
- // Lets rotate shared edge one vertex CW
- RotateTrianglePair(*t, p, ot, op);
- tcx.MapTriangleToNodes(*t);
- tcx.MapTriangleToNodes(ot);
-
- if (p == eq && op == ep) {
- if (eq == *tcx.edge_event.constrained_edge->q && ep == *tcx.edge_event.constrained_edge->p) {
- t->MarkConstrainedEdge(&ep, &eq);
- ot.MarkConstrainedEdge(&ep, &eq);
- Legalize(tcx, *t);
- Legalize(tcx, ot);
- } else {
- // XXX: I think one of the triangles should be legalized here?
- }
- } else {
- Orientation o = Orient2d(eq, op, ep);
- t = &NextFlipTriangle(tcx, (int)o, *t, ot, p, op);
- FlipEdgeEvent(tcx, ep, eq, t, p);
- }
- } else {
- Point& newP = NextFlipPoint(ep, eq, ot, op);
- FlipScanEdgeEvent(tcx, ep, eq, *t, ot, newP);
- EdgeEvent(tcx, ep, eq, t, p);
- }
-}
-
-Triangle& Sweep::NextFlipTriangle(SweepContext& tcx, int o, Triangle& t, Triangle& ot, Point& p, Point& op)
-{
- if (o == CCW) {
- // ot is not crossing edge after flip
- int edge_index = ot.EdgeIndex(&p, &op);
- ot.delaunay_edge[edge_index] = true;
- Legalize(tcx, ot);
- ot.ClearDelunayEdges();
- return t;
- }
-
- // t is not crossing edge after flip
- int edge_index = t.EdgeIndex(&p, &op);
-
- t.delaunay_edge[edge_index] = true;
- Legalize(tcx, t);
- t.ClearDelunayEdges();
- return ot;
-}
-
-Point& Sweep::NextFlipPoint(Point& ep, Point& eq, Triangle& ot, Point& op)
-{
- Orientation o2d = Orient2d(eq, op, ep);
- if (o2d == CW) {
- // Right
- return *ot.PointCCW(op);
- } else if (o2d == CCW) {
- // Left
- return *ot.PointCW(op);
- } else{
- //throw new RuntimeException("[Unsupported] Opposing point on constrained edge");
- assert(0);
- }
-}
-
-void Sweep::FlipScanEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle& flip_triangle,
- Triangle& t, Point& p)
-{
- Triangle& ot = t.NeighborAcross(p);
- Point& op = *ot.OppositePoint(t, p);
-
- if (&t.NeighborAcross(p) == NULL) {
- // If we want to integrate the fillEdgeEvent do it here
- // With current implementation we should never get here
- //throw new RuntimeException( "[BUG:FIXME] FLIP failed due to missing triangle");
- assert(0);
- }
-
- if (InScanArea(eq, *flip_triangle.PointCCW(eq), *flip_triangle.PointCW(eq), op)) {
- // flip with new edge op->eq
- FlipEdgeEvent(tcx, eq, op, &ot, op);
- // TODO: Actually I just figured out that it should be possible to
- // improve this by getting the next ot and op before the the above
- // flip and continue the flipScanEdgeEvent here
- // set new ot and op here and loop back to inScanArea test
- // also need to set a new flip_triangle first
- // Turns out at first glance that this is somewhat complicated
- // so it will have to wait.
- } else{
- Point& newP = NextFlipPoint(ep, eq, ot, op);
- FlipScanEdgeEvent(tcx, ep, eq, flip_triangle, ot, newP);
- }
-}
-
-Sweep::~Sweep() {
-
- // Clean up memory
- for(unsigned int i = 0; i < nodes_.size(); i++) {
- delete nodes_[i];
- }
-
-}
-
-}
-
Index: sw/utils/fonter/poly2tri/sweep/advancing_front.h
===================================================================
--- sw/utils/fonter/poly2tri/sweep/advancing_front.h (revision 5)
+++ sw/utils/fonter/poly2tri/sweep/advancing_front.h (nonexistent)
@@ -1,118 +0,0 @@
-/*
- * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
- * http://code.google.com/p/poly2tri/
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither the name of Poly2Tri nor the names of its contributors may be
- * used to endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef ADVANCED_FRONT_H
-#define ADVANCED_FRONT_H
-
-#include "../common/shapes.h"
-
-namespace p2t {
-
-struct Node;
-
-// Advancing front node
-struct Node {
- Point* point;
- Triangle* triangle;
-
- Node* next;
- Node* prev;
-
- double value;
-
- Node(Point& p) : point(&p), triangle(NULL), next(NULL), prev(NULL), value(p.x)
- {
- }
-
- Node(Point& p, Triangle& t) : point(&p), triangle(&t), next(NULL), prev(NULL), value(p.x)
- {
- }
-
-};
-
-// Advancing front
-class AdvancingFront {
-public:
-
-AdvancingFront(Node& head, Node& tail);
-// Destructor
-~AdvancingFront();
-
-Node* head();
-void set_head(Node* node);
-Node* tail();
-void set_tail(Node* node);
-Node* search();
-void set_search(Node* node);
-
-/// Locate insertion point along advancing front
-Node* LocateNode(const double& x);
-
-Node* LocatePoint(const Point* point);
-
-private:
-
-Node* head_, *tail_, *search_node_;
-
-Node* FindSearchNode(const double& x);
-};
-
-inline Node* AdvancingFront::head()
-{
- return head_;
-}
-inline void AdvancingFront::set_head(Node* node)
-{
- head_ = node;
-}
-
-inline Node* AdvancingFront::tail()
-{
- return tail_;
-}
-inline void AdvancingFront::set_tail(Node* node)
-{
- tail_ = node;
-}
-
-inline Node* AdvancingFront::search()
-{
- return search_node_;
-}
-
-inline void AdvancingFront::set_search(Node* node)
-{
- search_node_ = node;
-}
-
-}
-
-#endif
Index: sw/utils/fonter/poly2tri/sweep/sweep.h
===================================================================
--- sw/utils/fonter/poly2tri/sweep/sweep.h (revision 5)
+++ sw/utils/fonter/poly2tri/sweep/sweep.h (nonexistent)
@@ -1,285 +0,0 @@
-/*
- * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
- * http://code.google.com/p/poly2tri/
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither the name of Poly2Tri nor the names of its contributors may be
- * used to endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/**
- * Sweep-line, Constrained Delauney Triangulation (CDT) See: Domiter, V. and
- * Zalik, B.(2008)'Sweep-line algorithm for constrained Delaunay triangulation',
- * International Journal of Geographical Information Science
- *
- * "FlipScan" Constrained Edge Algorithm invented by Thomas Åhlén, thahlen@gmail.com
- */
-
-#ifndef SWEEP_H
-#define SWEEP_H
-
-#include
-
-namespace p2t {
-
-class SweepContext;
-struct Node;
-struct Point;
-struct Edge;
-class Triangle;
-
-class Sweep
-{
-public:
-
- /**
- * Triangulate
- *
- * @param tcx
- */
- void Triangulate(SweepContext& tcx);
-
- /**
- * Destructor - clean up memory
- */
- ~Sweep();
-
-private:
-
- /**
- * Start sweeping the Y-sorted point set from bottom to top
- *
- * @param tcx
- */
- void SweepPoints(SweepContext& tcx);
-
- /**
- * Find closes node to the left of the new point and
- * create a new triangle. If needed new holes and basins
- * will be filled to.
- *
- * @param tcx
- * @param point
- * @return
- */
- Node& PointEvent(SweepContext& tcx, Point& point);
-
- /**
- *
- *
- * @param tcx
- * @param edge
- * @param node
- */
- void EdgeEvent(SweepContext& tcx, Edge* edge, Node* node);
-
- void EdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* triangle, Point& point);
-
- /**
- * Creates a new front triangle and legalize it
- *
- * @param tcx
- * @param point
- * @param node
- * @return
- */
- Node& NewFrontTriangle(SweepContext& tcx, Point& point, Node& node);
-
- /**
- * Adds a triangle to the advancing front to fill a hole.
- * @param tcx
- * @param node - middle node, that is the bottom of the hole
- */
- void Fill(SweepContext& tcx, Node& node);
-
- /**
- * Returns true if triangle was legalized
- */
- bool Legalize(SweepContext& tcx, Triangle& t);
-
- /**
- * Requirement:
- * 1. a,b and c form a triangle.
- * 2. a and d is know to be on opposite side of bc
- *
- * d is outside B if orient2d(a,b,d) or orient2d(c,a,d) is CW
- * This preknowledge gives us a way to optimize the incircle test - * @param a - triangle point, opposite d - * @param b - triangle point - * @param c - triangle point - * @param d - point opposite a - * @return true if d is inside circle, false if on circle edge - */ - bool Incircle(Point& pa, Point& pb, Point& pc, Point& pd); - - /** - * Rotates a triangle pair one vertex CW - *
- * First we decide a left,bottom and right node that forms the - * boundaries of the basin. Then we do a reqursive fill. - * - * @param tcx - * @param node - starting node, this or next node will be left node - */ - void FillBasin(SweepContext& tcx, Node& node); - - /** - * Recursive algorithm to fill a Basin with triangles - * - * @param tcx - * @param node - bottom_node - * @param cnt - counter used to alternate on even and odd numbers - */ - void FillBasinReq(SweepContext& tcx, Node* node); - - bool IsShallow(SweepContext& tcx, Node& node); - - bool IsEdgeSideOfTriangle(Triangle& triangle, Point& ep, Point& eq); - - void FillEdgeEvent(SweepContext& tcx, Edge* edge, Node* node); - - void FillRightAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node); - - void FillRightBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); - - void FillRightConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); - - void FillRightConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); - - void FillLeftAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node); - - void FillLeftBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); - - void FillLeftConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); - - void FillLeftConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); - - void FlipEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* t, Point& p); - - /** - * After a flip we have two triangles and know that only one will still be - * intersecting the edge. So decide which to contiune with and legalize the other - * - * @param tcx - * @param o - should be the result of an orient2d( eq, op, ep ) - * @param t - triangle 1 - * @param ot - triangle 2 - * @param p - a point shared by both triangles - * @param op - another point shared by both triangles - * @return returns the triangle still intersecting the edge - */ - Triangle& NextFlipTriangle(SweepContext& tcx, int o, Triangle& t, Triangle& ot, Point& p, Point& op); - - /** - * When we need to traverse from one triangle to the next we need - * the point in current triangle that is the opposite point to the next - * triangle. - * - * @param ep - * @param eq - * @param ot - * @param op - * @return - */ - Point& NextFlipPoint(Point& ep, Point& eq, Triangle& ot, Point& op); - - /** - * Scan part of the FlipScan algorithm
- * When a triangle pair isn't flippable we will scan for the next - * point that is inside the flip triangle scan area. When found - * we generate a new flipEdgeEvent - * - * @param tcx - * @param ep - last point on the edge we are traversing - * @param eq - first point on the edge we are traversing - * @param flipTriangle - the current triangle sharing the point eq with edge - * @param t - * @param p - */ - void FlipScanEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle& flip_triangle, Triangle& t, Point& p); - - void FinalizationPolygon(SweepContext& tcx); - - std::vector nodes_;
-
-};
-
-}
-
-#endif
Index: sw/utils/fonter/poly2tri/sweep/sweep_context.cc
===================================================================
--- sw/utils/fonter/poly2tri/sweep/sweep_context.cc (revision 5)
+++ sw/utils/fonter/poly2tri/sweep/sweep_context.cc (nonexistent)
@@ -1,202 +0,0 @@
-/*
- * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
- * http://code.google.com/p/poly2tri/
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither the name of Poly2Tri nor the names of its contributors may be
- * used to endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include "sweep_context.h"
-#include
-#include "advancing_front.h"
-
-namespace p2t {
-
-SweepContext::SweepContext(std::vector polyline)
-{
- basin = Basin();
- edge_event = EdgeEvent();
-
- points_ = polyline;
-
- InitEdges(points_);
-}
-
-void SweepContext::AddHole(std::vector polyline)
-{
- InitEdges(polyline);
- for(unsigned int i = 0; i < polyline.size(); i++) {
- points_.push_back(polyline[i]);
- }
-}
-
-void SweepContext::AddPoint(Point* point) {
- points_.push_back(point);
-}
-
-std::vector SweepContext::GetTriangles()
-{
- return triangles_;
-}
-
-std::list SweepContext::GetMap()
-{
- return map_;
-}
-
-void SweepContext::InitTriangulation()
-{
- double xmax(points_[0]->x), xmin(points_[0]->x);
- double ymax(points_[0]->y), ymin(points_[0]->y);
-
- // Calculate bounds.
- for (unsigned int i = 0; i < points_.size(); i++) {
- Point& p = *points_[i];
- if (p.x > xmax)
- xmax = p.x;
- if (p.x < xmin)
- xmin = p.x;
- if (p.y > ymax)
- ymax = p.y;
- if (p.y < ymin)
- ymin = p.y;
- }
-
- double dx = kAlpha * (xmax - xmin);
- double dy = kAlpha * (ymax - ymin);
- head_ = new Point(xmax + dx, ymin - dy);
- tail_ = new Point(xmin - dx, ymin - dy);
-
- // Sort points along y-axis
- std::sort(points_.begin(), points_.end(), cmp);
-
-}
-
-void SweepContext::InitEdges(std::vector polyline)
-{
- int num_points = polyline.size();
- for (int i = 0; i < num_points; i++) {
- int j = i < num_points - 1 ? i + 1 : 0;
- edge_list.push_back(new Edge(*polyline[i], *polyline[j]));
- }
-}
-
-Point* SweepContext::GetPoint(const int& index)
-{
- return points_[index];
-}
-
-void SweepContext::AddToMap(Triangle* triangle)
-{
- map_.push_back(triangle);
-}
-
-Node& SweepContext::LocateNode(Point& point)
-{
- // TODO implement search tree
- return *front_->LocateNode(point.x);
-}
-
-void SweepContext::CreateAdvancingFront(std::vector nodes)
-{
-
- (void) nodes;
- // Initial triangle
- Triangle* triangle = new Triangle(*points_[0], *tail_, *head_);
-
- map_.push_back(triangle);
-
- af_head_ = new Node(*triangle->GetPoint(1), *triangle);
- af_middle_ = new Node(*triangle->GetPoint(0), *triangle);
- af_tail_ = new Node(*triangle->GetPoint(2));
- front_ = new AdvancingFront(*af_head_, *af_tail_);
-
- // TODO: More intuitive if head is middles next and not previous?
- // so swap head and tail
- af_head_->next = af_middle_;
- af_middle_->next = af_tail_;
- af_middle_->prev = af_head_;
- af_tail_->prev = af_middle_;
-}
-
-void SweepContext::RemoveNode(Node* node)
-{
- delete node;
-}
-
-void SweepContext::MapTriangleToNodes(Triangle& t)
-{
- for (int i = 0; i < 3; i++) {
- if (!t.GetNeighbor(i)) {
- Node* n = front_->LocatePoint(t.PointCW(*t.GetPoint(i)));
- if (n)
- n->triangle = &t;
- }
- }
-}
-
-void SweepContext::RemoveFromMap(Triangle* triangle)
-{
- map_.remove(triangle);
-}
-
-void SweepContext::MeshClean(Triangle& triangle)
-{
- if (&triangle != NULL && !triangle.IsInterior()) {
- triangle.IsInterior(true);
- triangles_.push_back(&triangle);
- for (int i = 0; i < 3; i++) {
- if (!triangle.constrained_edge[i])
- MeshClean(*triangle.GetNeighbor(i));
- }
- }
-}
-
-SweepContext::~SweepContext()
-{
-
- // Clean up memory
-
- delete head_;
- delete tail_;
- delete front_;
- delete af_head_;
- delete af_middle_;
- delete af_tail_;
-
- typedef std::list type_list;
-
- for(type_list::iterator iter = map_.begin(); iter != map_.end(); ++iter) {
- Triangle* ptr = *iter;
- delete ptr;
- }
-
- for(unsigned int i = 0; i < edge_list.size(); i++) {
- delete edge_list[i];
- }
-
-}
-
-}
Index: sw/utils/fonter/poly2tri/sweep/sweep_context.h
===================================================================
--- sw/utils/fonter/poly2tri/sweep/sweep_context.h (revision 5)
+++ sw/utils/fonter/poly2tri/sweep/sweep_context.h (nonexistent)
@@ -1,186 +0,0 @@
-/*
- * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
- * http://code.google.com/p/poly2tri/
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither the name of Poly2Tri nor the names of its contributors may be
- * used to endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef SWEEP_CONTEXT_H
-#define SWEEP_CONTEXT_H
-
-#include
- * Positive if CCW
- * Negative if CW
- * 0 if collinear
- *
- * A[P1,P2,P3] = (x1*y2 - y1*x2) + (x2*y3 - y2*x3) + (x3*y1 - y3*x1) - * = (x1-x3)*(y2-y3) - (y1-y3)*(x2-x3) - *- */ -Orientation Orient2d(Point& pa, Point& pb, Point& pc) -{ - double detleft = (pa.x - pc.x) * (pb.y - pc.y); - double detright = (pa.y - pc.y) * (pb.x - pc.x); - double val = detleft - detright; - if (val > -EPSILON && val < EPSILON) { - return COLLINEAR; - } else if (val > 0) { - return CCW; - } - return CW; -} - -/* -bool InScanArea(Point& pa, Point& pb, Point& pc, Point& pd) -{ - double pdx = pd.x; - double pdy = pd.y; - double adx = pa.x - pdx; - double ady = pa.y - pdy; - double bdx = pb.x - pdx; - double bdy = pb.y - pdy; - - double adxbdy = adx * bdy; - double bdxady = bdx * ady; - double oabd = adxbdy - bdxady; - - if (oabd <= EPSILON) { - return false; - } - - double cdx = pc.x - pdx; - double cdy = pc.y - pdy; - - double cdxady = cdx * ady; - double adxcdy = adx * cdy; - double ocad = cdxady - adxcdy; - - if (ocad <= EPSILON) { - return false; - } - - return true; -} - -*/ - -bool InScanArea(Point& pa, Point& pb, Point& pc, Point& pd) -{ - double oadb = (pa.x - pb.x)*(pd.y - pb.y) - (pd.x - pb.x)*(pa.y - pb.y); - if (oadb >= -EPSILON) { - return false; - } - - double oadc = (pa.x - pc.x)*(pd.y - pc.y) - (pd.x - pc.x)*(pa.y - pc.y); - if (oadc <= EPSILON) { - return false; - } - return true; -} - -} - -#endif - Index: sw/utils/fonter/poly2tri/common/shapes.cc =================================================================== --- sw/utils/fonter/poly2tri/common/shapes.cc (revision 5) +++ sw/utils/fonter/poly2tri/common/shapes.cc (nonexistent) @@ -1,367 +0,0 @@ -/* - * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors - * http://code.google.com/p/poly2tri/ - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Poly2Tri nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "shapes.h" -#include
- * 1. a,b and c form a triangle.
- * 2. a and d is know to be on opposite side of bc
- *
- * a - * + - * / \ - * / \ - * b/ \c - * +-------+ - * / d \ - * / \ - *- * Fact: d has to be in area B to have a chance to be inside the circle formed by - * a,b and c
- * d is outside B if orient2d(a,b,d) or orient2d(c,a,d) is CW
- * This preknowledge gives us a way to optimize the incircle test - * @param a - triangle point, opposite d - * @param b - triangle point - * @param c - triangle point - * @param d - point opposite a - * @return true if d is inside circle, false if on circle edge - */ - bool Incircle(Point& pa, Point& pb, Point& pc, Point& pd); - - /** - * Rotates a triangle pair one vertex CW - *
- * n2 n2 - * P +-----+ P +-----+ - * | t /| |\ t | - * | / | | \ | - * n1| / |n3 n1| \ |n3 - * | / | after CW | \ | - * |/ oT | | oT \| - * +-----+ oP +-----+ - * n4 n4 - *- */ - void RotateTrianglePair(Triangle& t, Point& p, Triangle& ot, Point& op); - - /** - * Fills holes in the Advancing Front - * - * - * @param tcx - * @param n - */ - void FillAdvancingFront(SweepContext& tcx, Node& n); - - // Decision-making about when to Fill hole. - // Contributed by ToolmakerSteve2 - bool LargeHole_DontFill(Node* node); - bool AngleExceeds90Degrees(Point* origin, Point* pa, Point* pb); - bool AngleExceedsPlus90DegreesOrIsNegative(Point* origin, Point* pa, Point* pb); - double Angle(Point& origin, Point& pa, Point& pb); - - /** - * - * @param node - middle node - * @return the angle between 3 front nodes - */ - double HoleAngle(Node& node); - - /** - * The basin angle is decided against the horizontal line [1,0] - */ - double BasinAngle(Node& node); - - /** - * Fills a basin that has formed on the Advancing Front to the right - * of given node.
- * First we decide a left,bottom and right node that forms the - * boundaries of the basin. Then we do a reqursive fill. - * - * @param tcx - * @param node - starting node, this or next node will be left node - */ - void FillBasin(SweepContext& tcx, Node& node); - - /** - * Recursive algorithm to fill a Basin with triangles - * - * @param tcx - * @param node - bottom_node - * @param cnt - counter used to alternate on even and odd numbers - */ - void FillBasinReq(SweepContext& tcx, Node* node); - - bool IsShallow(SweepContext& tcx, Node& node); - - bool IsEdgeSideOfTriangle(Triangle& triangle, Point& ep, Point& eq); - - void FillEdgeEvent(SweepContext& tcx, Edge* edge, Node* node); - - void FillRightAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node); - - void FillRightBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); - - void FillRightConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); - - void FillRightConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); - - void FillLeftAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node); - - void FillLeftBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); - - void FillLeftConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); - - void FillLeftConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); - - void FlipEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* t, Point& p); - - /** - * After a flip we have two triangles and know that only one will still be - * intersecting the edge. So decide which to contiune with and legalize the other - * - * @param tcx - * @param o - should be the result of an orient2d( eq, op, ep ) - * @param t - triangle 1 - * @param ot - triangle 2 - * @param p - a point shared by both triangles - * @param op - another point shared by both triangles - * @return returns the triangle still intersecting the edge - */ - Triangle& NextFlipTriangle(SweepContext& tcx, int o, Triangle& t, Triangle& ot, Point& p, Point& op); - - /** - * When we need to traverse from one triangle to the next we need - * the point in current triangle that is the opposite point to the next - * triangle. - * - * @param ep - * @param eq - * @param ot - * @param op - * @return - */ - Point& NextFlipPoint(Point& ep, Point& eq, Triangle& ot, Point& op); - - /** - * Scan part of the FlipScan algorithm
- * When a triangle pair isn't flippable we will scan for the next - * point that is inside the flip triangle scan area. When found - * we generate a new flipEdgeEvent - * - * @param tcx - * @param ep - last point on the edge we are traversing - * @param eq - first point on the edge we are traversing - * @param flipTriangle - the current triangle sharing the point eq with edge - * @param t - * @param p - */ - void FlipScanEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle& flip_triangle, Triangle& t, Point& p); - - void FinalizationPolygon(SweepContext& tcx); - - std::vector
-
-#include
sw/utils/interptest.bmp
Property changes :
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: sw/utils/interptest.bmp.h
===================================================================
--- sw/utils/interptest.bmp.h (revision 5)
+++ sw/utils/interptest.bmp.h (nonexistent)
@@ -1,20 +0,0 @@
-/* Sprite definition */
-
-/* size: 10 * 10 at 16BPP */
-
-#ifndef interptest_H
-#define interptest_H
-unsigned int interptest[] = {
-63488u, 4160813056u, 4160813056u, 4160813056u, 4160749568u,
-4225773536u, 803221472u, 803221472u, 803221472u, 803272722u,
-4225773536u, 4091540447u, 4091540447u, 4091540447u, 803272722u,
-4225773536u, 4091478047u, 2031647u, 2094047u, 803272722u,
-4225773536u, 4091478047u, 4160751615u, 2094047u, 803272722u,
-4225773536u, 4091478047u, 4292901839u, 2094047u, 803272722u,
-4225773536u, 4091478047u, 2031647u, 2094047u, 803272722u,
-4225773536u, 4091540447u, 4091540447u, 4091540447u, 803272722u,
-4225773536u, 803221472u, 803221472u, 803221472u, 803272722u,
-4093u, 268242941u, 268242941u, 268242941u, 268238848u,
-};
-
-#endif // interptest_H
Index: sw/utils/teapot.obj
===================================================================
--- sw/utils/teapot.obj (revision 5)
+++ sw/utils/teapot.obj (nonexistent)
@@ -1,2090 +0,0 @@
-# OBJ file created by ply_to_obj.c
-#
-g Object001
-
-v 40.6266 28.3457 -1.10804
-v 40.0714 30.4443 -1.10804
-v 40.7155 31.1438 -1.10804
-v 42.0257 30.4443 -1.10804
-v 43.4692 28.3457 -1.10804
-v 37.5425 28.3457 14.5117
-v 37.0303 30.4443 14.2938
-v 37.6244 31.1438 14.5466
-v 38.8331 30.4443 15.0609
-v 40.1647 28.3457 15.6274
-v 29.0859 28.3457 27.1468
-v 28.6917 30.4443 26.7527
-v 29.149 31.1438 27.2099
-v 30.0792 30.4443 28.1402
-v 31.1041 28.3457 29.165
-v 16.4508 28.3457 35.6034
-v 16.2329 30.4443 35.0912
-v 16.4857 31.1438 35.6853
-v 16.9999 30.4443 36.894
-v 17.5665 28.3457 38.2256
-v 0.831025 28.3457 38.6876
-v 0.831025 30.4443 38.1324
-v 0.831025 31.1438 38.7764
-v 0.831025 30.4443 40.0866
-v 0.831025 28.3457 41.5301
-v -15.868 28.3457 35.6034
-v -15.0262 30.4443 35.0912
-v -14.9585 31.1438 35.6853
-v -15.3547 30.4443 36.894
-v -15.9044 28.3457 38.2256
-v -28.3832 28.3457 27.1468
-v -27.4344 30.4443 26.7527
-v -27.6068 31.1438 27.2099
-v -28.4322 30.4443 28.1402
-v -29.4421 28.3457 29.165
-v -36.2402 28.3457 14.5117
-v -35.52 30.4443 14.2938
-v -36.0073 31.1438 14.5466
-v -37.1767 30.4443 15.0609
-v -38.5027 28.3457 15.6274
-v -38.9646 28.3457 -1.10804
-v -38.4094 30.4443 -1.10804
-v -39.0534 31.1438 -1.10804
-v -40.3636 30.4443 -1.10804
-v -41.8071 28.3457 -1.10804
-v -35.8804 28.3457 -16.7278
-v -35.3683 30.4443 -16.5099
-v -35.9624 31.1438 -16.7627
-v -37.1711 30.4443 -17.2769
-v -38.5027 28.3457 -17.8435
-v -27.4238 28.3457 -29.3629
-v -27.0297 30.4443 -28.9687
-v -27.4869 31.1438 -29.426
-v -28.4172 30.4443 -30.3562
-v -29.4421 28.3457 -31.3811
-v -14.7887 28.3457 -37.8195
-v -14.5708 30.4443 -37.3073
-v -14.8236 31.1438 -37.9014
-v -15.3379 30.4443 -39.1101
-v -15.9044 28.3457 -40.4417
-v 0.831025 28.3457 -40.9036
-v 0.831025 30.4443 -40.3484
-v 0.831025 31.1438 -40.9925
-v 0.831025 30.4443 -42.3027
-v 0.831025 28.3457 -43.7462
-v 16.4508 28.3457 -37.8195
-v 16.2329 30.4443 -37.3073
-v 16.4857 31.1438 -37.9014
-v 16.9999 30.4443 -39.1101
-v 17.5665 28.3457 -40.4417
-v 29.0859 28.3457 -29.3629
-v 28.6917 30.4443 -28.9687
-v 29.149 31.1438 -29.426
-v 30.0792 30.4443 -30.3562
-v 31.1041 28.3457 -31.3811
-v 37.5425 28.3457 -16.7278
-v 37.0303 30.4443 -16.5099
-v 37.6244 31.1438 -16.7627
-v 38.8331 30.4443 -17.2769
-v 40.1647 28.3457 -17.8435
-v 48.6879 17.1865 -1.10804
-v 53.2404 6.22714 -1.10804
-v 56.4605 -4.33246 -1.10804
-v 57.6819 -14.2925 -1.10804
-v 44.979 17.1865 17.6758
-v 49.1787 6.22714 19.4626
-v 52.1492 -4.33246 20.7265
-v 53.2759 -14.2925 21.2059
-v 34.8094 17.1865 32.8703
-v 38.0417 6.22714 36.1026
-v 40.3279 -4.33246 38.3889
-v 41.1951 -14.2925 39.2561
-v 19.6148 17.1865 43.0399
-v 21.4017 6.22714 47.2396
-v 22.6656 -4.33246 50.2101
-v 23.145 -14.2925 51.3369
-v 0.831025 17.1865 46.7488
-v 0.831025 6.22714 51.3013
-v 0.831025 -4.33246 54.5214
-v 0.831025 -14.2925 55.7428
-v -17.9528 17.1865 43.0399
-v -19.7397 6.22714 47.2396
-v -21.0035 -4.33246 50.2101
-v -21.4829 -14.2925 51.3369
-v -33.1474 17.1865 32.8703
-v -36.3796 6.22714 36.1026
-v -38.6659 -4.33246 38.3889
-v -39.5331 -14.2925 39.2561
-v -43.3169 17.1865 17.6758
-v -47.5166 6.22714 19.4626
-v -50.4871 -4.33246 20.7265
-v -51.6139 -14.2925 21.2059
-v -47.0258 17.1865 -1.10804
-v -51.5784 6.22714 -1.10804
-v -54.7984 -4.33246 -1.10804
-v -56.0198 -14.2925 -1.10804
-v -43.3169 17.1865 -19.8919
-v -47.5166 6.22714 -21.6787
-v -50.4871 -4.33246 -22.9426
-v -51.6139 -14.2925 -23.422
-v -33.1474 17.1865 -35.0864
-v -36.3796 6.22714 -38.3187
-v -38.6659 -4.33246 -40.6049
-v -39.5331 -14.2925 -41.4721
-v -17.9528 17.1865 -45.256
-v -19.7397 6.22714 -49.4557
-v -21.0035 -4.33246 -52.4262
-v -21.4829 -14.2925 -53.5529
-v 0.831025 17.1865 -48.9649
-v 0.831025 6.22714 -53.5174
-v 0.831025 -4.33246 -56.7375
-v 0.831025 -14.2925 -57.9589
-v 19.6148 17.1865 -45.256
-v 21.4017 6.22714 -49.4557
-v 22.6656 -4.33246 -52.4262
-v 23.145 -14.2925 -53.5529
-v 34.8094 17.1865 -35.0864
-v 38.0417 6.22714 -38.3187
-v 40.3279 -4.33246 -40.6049
-v 41.1951 -14.2925 -41.4721
-v 44.979 17.1865 -19.8919
-v 49.1787 6.22714 -21.6787
-v 52.1492 -4.33246 -22.9426
-v 53.2759 -14.2925 -23.422
-v 55.4611 -22.7202 -1.10804
-v 50.5755 -28.9493 -1.10804
-v 45.6899 -33.1798 -1.10804
-v 43.4692 -35.6115 -1.10804
-v 51.2273 -22.7202 20.3343
-v 46.7203 -28.9493 18.4167
-v 42.2133 -33.1798 16.4991
-v 40.1647 -35.6115 15.6274
-v 39.6184 -22.7202 37.6793
-v 36.1496 -28.9493 34.2106
-v 32.6808 -33.1798 30.7418
-v 31.1041 -35.6115 29.165
-v 22.2733 -22.7202 49.2882
-v 20.3557 -28.9493 44.7813
-v 18.4381 -33.1798 40.2743
-v 17.5665 -35.6115 38.2256
-v 0.831025 -22.7202 53.5221
-v 0.831025 -28.9493 48.6365
-v 0.831025 -33.1798 43.7508
-v 0.831025 -35.6115 41.5301
-v -20.6113 -22.7202 49.2882
-v -18.6937 -28.9493 44.7813
-v -16.7761 -33.1798 40.2743
-v -15.9044 -35.6115 38.2256
-v -37.9564 -22.7202 37.6793
-v -34.4876 -28.9493 34.2106
-v -31.0188 -33.1798 30.7418
-v -29.4421 -35.6115 29.165
-v -49.5653 -22.7202 20.3343
-v -45.0583 -28.9493 18.4167
-v -40.5513 -33.1798 16.4991
-v -38.5027 -35.6115 15.6274
-v -53.7991 -22.7202 -1.10804
-v -48.9135 -28.9493 -1.10804
-v -44.0279 -33.1798 -1.10804
-v -41.8071 -35.6115 -1.10804
-v -49.5653 -22.7202 -22.5504
-v -45.0583 -28.9493 -20.6327
-v -40.5513 -33.1798 -18.7151
-v -38.5027 -35.6115 -17.8435
-v -37.9564 -22.7202 -39.8954
-v -34.4876 -28.9493 -36.4266
-v -31.0188 -33.1798 -32.9578
-v -29.4421 -35.6115 -31.3811
-v -20.6113 -22.7202 -51.5043
-v -18.6937 -28.9493 -46.9973
-v -16.7761 -33.1798 -42.4903
-v -15.9044 -35.6115 -40.4417
-v 0.831025 -22.7202 -55.7382
-v 0.831025 -28.9493 -50.8525
-v 0.831025 -33.1798 -45.9669
-v 0.831025 -35.6115 -43.7462
-v 22.2733 -22.7202 -51.5043
-v 20.3557 -28.9493 -46.9973
-v 18.4381 -33.1798 -42.4903
-v 17.5665 -35.6115 -40.4417
-v 39.6184 -22.7202 -39.8954
-v 36.1496 -28.9493 -36.4266
-v 32.6808 -33.1798 -32.9578
-v 31.1041 -35.6115 -31.3811
-v 51.2273 -22.7202 -22.5504
-v 46.7203 -28.9493 -20.6327
-v 42.2133 -33.1798 -18.7151
-v 40.1647 -35.6115 -17.8435
-v 42.5031 -37.1772 -1.10804
-v 37.3399 -38.5429 -1.10804
-v 24.5818 -39.5089 -1.10804
-v 0.831025 -39.8754 -1.10804
-v 39.2736 -37.1772 15.2483
-v 34.5105 -38.5429 13.2217
-v 22.7411 -39.5089 8.21414
-v 30.4182 -37.1772 28.4792
-v 26.7523 -38.5429 24.8133
-v 17.6941 -39.5089 15.755
-v 17.1873 -37.1772 37.3345
-v 15.1608 -38.5429 32.5714
-v 10.1532 -39.5089 20.8021
-v 0.831025 -37.1772 40.5641
-v 0.831025 -38.5429 35.4009
-v 0.831025 -39.5089 22.6427
-v -15.5253 -37.1772 37.3345
-v -13.4987 -38.5429 32.5714
-v -8.49115 -39.5089 20.8021
-v -28.7562 -37.1772 28.4792
-v -25.0903 -38.5429 24.8133
-v -16.032 -39.5089 15.755
-v -37.6115 -37.1772 15.2483
-v -32.8484 -38.5429 13.2217
-v -21.0791 -39.5089 8.21414
-v -40.8411 -37.1772 -1.10804
-v -35.6779 -38.5429 -1.10804
-v -22.9198 -39.5089 -1.10804
-v -37.6115 -37.1772 -17.4643
-v -32.8484 -38.5429 -15.4378
-v -21.0791 -39.5089 -10.4302
-v -28.7562 -37.1772 -30.6952
-v -25.0903 -38.5429 -27.0294
-v -16.032 -39.5089 -17.9711
-v -15.5253 -37.1772 -39.5506
-v -13.4987 -38.5429 -34.7875
-v -8.49115 -39.5089 -23.0181
-v 0.831025 -37.1772 -42.7802
-v 0.831025 -38.5429 -37.6169
-v 0.831025 -39.5089 -24.8588
-v 17.1873 -37.1772 -39.5506
-v 15.1608 -38.5429 -34.7875
-v 10.1532 -39.5089 -23.0181
-v 30.4182 -37.1772 -30.6952
-v 26.7523 -38.5429 -27.0294
-v 17.6941 -39.5089 -17.9711
-v 39.2736 -37.1772 -17.4643
-v 34.5105 -38.5429 -15.4378
-v 22.7411 -39.5089 -10.4302
-v -44.6497 17.6861 -1.10804
-v -57.9297 17.5862 -1.10804
-v -67.7453 16.8867 -1.10804
-v -73.8301 14.9879 -1.10804
-v -75.9176 11.2904 -1.10804
-v -44.2055 18.6855 3.68876
-v -58.3252 18.5699 3.68876
-v -68.6891 17.7611 3.68876
-v -75.0724 15.5657 3.68876
-v -77.2501 11.2904 3.68876
-v -43.2284 20.884 5.28769
-v -59.1955 20.7341 5.28769
-v -70.7655 19.6848 5.28769
-v -77.8053 16.8367 5.28769
-v -80.1814 11.2904 5.28769
-v -42.2513 23.0825 3.68876
-v -60.0657 22.8983 3.68876
-v -72.8419 21.6085 3.68876
-v -80.5381 18.1077 3.68876
-v -83.1128 11.2904 3.68876
-v -41.8071 24.0819 -1.10804
-v -60.4613 23.882 -1.10804
-v -73.7857 22.4829 -1.10804
-v -81.7804 18.6855 -1.10804
-v -84.4453 11.2904 -1.10804
-v -42.2513 23.0825 -5.90483
-v -60.0657 22.8983 -5.90483
-v -72.8419 21.6085 -5.90483
-v -80.5381 18.1077 -5.90483
-v -83.1128 11.2904 -5.90483
-v -43.2284 20.884 -7.50376
-v -59.1955 20.7341 -7.50376
-v -70.7655 19.6848 -7.50376
-v -77.8053 16.8367 -7.50376
-v -80.1814 11.2904 -7.50376
-v -44.2055 18.6855 -5.90483
-v -58.3252 18.5699 -5.90483
-v -68.6891 17.7611 -5.90483
-v -75.0724 15.5657 -5.90483
-v -77.2501 11.2904 -5.90483
-v -74.8073 5.4943 -1.10804
-v -71.2985 -1.50103 -1.10804
-v -65.1248 -8.49634 -1.10804
-v -56.0198 -14.2925 -1.10804
-v -76.0183 4.93477 3.68876
-v -72.159 -2.35462 3.68876
-v -65.4267 -9.55033 3.68876
-v -55.5757 -15.6249 3.68876
-v -78.6824 3.70383 5.28769
-v -74.0522 -4.23253 5.28769
-v -66.0909 -11.8691 5.28769
-v -54.5986 -18.5563 5.28769
-v -81.3466 2.47288 3.68876
-v -75.9454 -6.11044 3.68876
-v -66.755 -14.1878 3.68876
-v -53.6214 -21.4877 3.68876
-v -82.5576 1.91336 -1.10804
-v -76.8059 -6.96404 -1.10804
-v -67.0569 -15.2418 -1.10804
-v -53.1773 -22.8201 -1.10804
-v -81.3466 2.47288 -5.90483
-v -75.9454 -6.11044 -5.90483
-v -66.755 -14.1878 -5.90483
-v -53.6214 -21.4877 -5.90483
-v -78.6824 3.70383 -7.50376
-v -74.0522 -4.23253 -7.50376
-v -66.0909 -11.8691 -7.50376
-v -54.5986 -18.5563 -7.50376
-v -76.0183 4.93477 -5.90483
-v -72.159 -2.35462 -5.90483
-v -65.4267 -9.55033 -5.90483
-v -55.5757 -15.6249 -5.90483
-v 49.1543 0.630882 -1.10804
-v 62.7896 3.76212 -1.10804
-v 68.6967 11.2904 -1.10804
-v 71.939 20.4176 -1.10804
-v 77.5797 28.3457 -1.10804
-v 49.1543 -3.03333 9.4449
-v 63.8305 1.04519 8.42059
-v 70.0292 9.70814 6.1671
-v 73.5629 19.8451 3.91361
-v 80.2446 28.3457 2.88929
-v 49.1543 -11.0946 12.9626
-v 66.1207 -4.93206 11.5968
-v 72.9605 6.22714 8.59214
-v 77.1355 18.5855 5.58749
-v 86.1073 28.3457 4.22173
-v 49.1543 -19.1559 9.4449
-v 68.4108 -10.9093 8.42059
-v 75.8919 2.74614 6.1671
-v 80.7081 17.326 3.91361
-v 91.97 28.3457 2.88929
-v 49.1543 -22.8201 -1.10804
-v 69.4518 -13.6262 -1.10804
-v 77.2244 1.16386 -1.10804
-v 82.3321 16.7534 -1.10804
-v 94.6349 28.3457 -1.10804
-v 49.1543 -19.1559 -11.661
-v 68.4108 -10.9093 -10.6367
-v 75.8919 2.74614 -8.38317
-v 80.7081 17.326 -6.12968
-v 91.97 28.3457 -5.10536
-v 49.1543 -11.0946 -15.1786
-v 66.1207 -4.93206 -13.8129
-v 72.9605 6.22714 -10.8082
-v 77.1355 18.5855 -7.80356
-v 86.1073 28.3457 -6.4378
-v 49.1543 -3.03333 -11.661
-v 63.8305 1.04519 -10.6367
-v 70.0292 9.70814 -8.38317
-v 73.5629 19.8451 -6.12968
-v 80.2446 28.3457 -5.10536
-v 79.6227 29.5449 -1.10804
-v 81.1329 29.9446 -1.10804
-v 81.577 29.5449 -1.10804
-v 80.4222 28.3457 -1.10804
-v 82.4767 29.6034 2.63946
-v 83.8116 30.0383 2.08983
-v 83.8515 29.6268 1.54019
-v 82.1988 28.3457 1.29036
-v 88.7555 29.7322 3.88862
-v 89.7049 30.2444 3.15578
-v 88.8555 29.8072 2.42294
-v 86.1073 28.3457 2.08983
-v 95.0343 29.8611 2.63946
-v 95.5982 30.4505 2.08983
-v 93.8594 29.9875 1.54019
-v 90.0158 28.3457 1.29036
-v 97.8883 29.9196 -1.10804
-v 98.2769 30.5442 -1.10804
-v 96.1339 30.0695 -1.10804
-v 91.7924 28.3457 -1.10804
-v 95.0343 29.8611 -4.85553
-v 95.5982 30.4505 -4.3059
-v 93.8594 29.9875 -3.75626
-v 90.0158 28.3457 -3.50643
-v 88.7555 29.7322 -6.10469
-v 89.7049 30.2444 -5.37185
-v 88.8555 29.8072 -4.63901
-v 86.1073 28.3457 -4.3059
-v 82.4767 29.6034 -4.85553
-v 83.8116 30.0383 -4.3059
-v 83.8515 29.6268 -3.75626
-v 82.1988 28.3457 -3.50643
-v 0.831025 49.6647 -1.10804
-v 10.5134 48.2657 -1.10804
-v 10.0693 44.868 -1.10804
-v 6.42728 40.6708 -1.10804
-v 6.51611 36.8733 -1.10804
-v 9.76642 48.2657 2.70243
-v 9.35632 44.868 2.52698
-v 5.9947 40.6708 1.09187
-v 6.07552 36.8733 1.12336
-v 7.71453 48.2657 5.77547
-v 7.39819 44.868 5.45913
-v 4.80736 40.6708 2.8683
-v 4.86744 36.8733 2.92838
-v 4.64149 48.2657 7.82736
-v 4.46604 44.868 7.41726
-v 3.03093 40.6708 4.05564
-v 3.06242 36.8733 4.13646
-v 0.831025 48.2657 8.57438
-v 0.831025 44.868 8.13023
-v 0.831025 40.6708 4.48822
-v 0.831025 36.8733 4.57705
-v -2.97944 48.2657 7.82736
-v -2.80399 44.868 7.41726
-v -1.36888 40.6708 4.05564
-v -1.40037 36.8733 4.13646
-v -6.05248 48.2657 5.77547
-v -5.73614 44.868 5.45913
-v -3.14531 40.6708 2.8683
-v -3.20539 36.8733 2.92838
-v -8.10437 48.2657 2.70243
-v -7.69427 44.868 2.52698
-v -4.33265 40.6708 1.09187
-v -4.41347 36.8733 1.12336
-v -8.85139 48.2657 -1.10804
-v -8.40724 44.868 -1.10804
-v -4.76523 40.6708 -1.10804
-v -4.85406 36.8733 -1.10804
-v -8.10437 48.2657 -4.9185
-v -7.69427 44.868 -4.74305
-v -4.33265 40.6708 -3.30794
-v -4.41347 36.8733 -3.33943
-v -6.05248 48.2657 -7.99154
-v -5.73614 44.868 -7.6752
-v -3.14531 40.6708 -5.08437
-v -3.20539 36.8733 -5.14445
-v -2.97944 48.2657 -10.0434
-v -2.80399 44.868 -9.63333
-v -1.36888 40.6708 -6.27171
-v -1.40037 36.8733 -6.35253
-v 0.831025 48.2657 -10.7904
-v 0.831025 44.868 -10.3463
-v 0.831025 40.6708 -6.70429
-v 0.831025 36.8733 -6.79312
-v 4.64149 48.2657 -10.0434
-v 4.46604 44.868 -9.63333
-v 3.03093 40.6708 -6.27171
-v 3.06242 36.8733 -6.35253
-v 7.71453 48.2657 -7.99154
-v 7.39819 44.868 -7.6752
-v 4.80736 40.6708 -5.08437
-v 4.86744 36.8733 -5.14445
-v 9.76642 48.2657 -4.9185
-v 9.35632 44.868 -4.74305
-v 5.9947 40.6708 -3.30794
-v 6.07552 36.8733 -3.33943
-v 13.8001 34.3417 -1.10804
-v 24.282 32.6095 -1.10804
-v 33.6979 30.8773 -1.10804
-v 37.7841 28.3457 -1.10804
-v 12.795 34.3417 3.98234
-v 22.4646 32.6095 8.09647
-v 31.1507 30.8773 11.7922
-v 34.9202 28.3457 13.396
-v 10.0391 34.3417 8.10003
-v 17.4812 32.6095 15.5422
-v 24.1665 30.8773 22.2275
-v 27.0677 28.3457 25.1286
-v 5.9214 34.3417 10.856
-v 10.0355 32.6095 20.5255
-v 13.7313 30.8773 29.2117
-v 15.3351 28.3457 32.9812
-v 0.831025 34.3417 11.8611
-v 0.831025 32.6095 22.3429
-v 0.831025 30.8773 31.7589
-v 0.831025 28.3457 35.845
-v -4.25935 34.3417 10.856
-v -8.37348 32.6095 20.5255
-v -12.0692 30.8773 29.2117
-v -13.673 28.3457 32.9812
-v -8.37704 34.3417 8.10003
-v -15.8192 32.6095 15.5422
-v -22.5045 30.8773 22.2275
-v -25.4056 28.3457 25.1286
-v -11.133 34.3417 3.98234
-v -20.8025 32.6095 8.09647
-v -29.4887 30.8773 11.7922
-v -33.2582 28.3457 13.396
-v -12.1381 34.3417 -1.10804
-v -22.62 32.6095 -1.10804
-v -32.0359 30.8773 -1.10804
-v -36.122 28.3457 -1.10804
-v -11.133 34.3417 -6.19841
-v -20.8025 32.6095 -10.3125
-v -29.4887 30.8773 -14.0083
-v -33.2582 28.3457 -15.6121
-v -8.37704 34.3417 -10.3161
-v -15.8192 32.6095 -17.7582
-v -22.5045 30.8773 -24.4435
-v -25.4056 28.3457 -27.3447
-v -4.25935 34.3417 -13.072
-v -8.37348 32.6095 -22.7416
-v -12.0692 30.8773 -31.4277
-v -13.673 28.3457 -35.1972
-v 0.831025 34.3417 -14.0771
-v 0.831025 32.6095 -24.559
-v 0.831025 30.8773 -33.9749
-v 0.831025 28.3457 -38.0611
-v 5.9214 34.3417 -13.072
-v 10.0355 32.6095 -22.7416
-v 13.7313 30.8773 -31.4277
-v 15.3351 28.3457 -35.1972
-v 10.0391 34.3417 -10.3161
-v 17.4812 32.6095 -17.7582
-v 24.1665 30.8773 -24.4435
-v 27.0677 28.3457 -27.3447
-v 12.795 34.3417 -6.19841
-v 22.4646 32.6095 -10.3125
-v 31.1507 30.8773 -14.0083
-v 34.9202 28.3457 -15.6121
-
-vn -0.966742 -0.255752 9.97231e-09
-vn -0.966824 0.255443 3.11149e-08
-vn -0.092052 0.995754 4.45989e-08
-vn 0.68205 0.731305 0
-vn 0.870301 0.492521 -4.87195e-09
-vn -0.893014 -0.256345 -0.369882
-vn -0.893437 0.255997 -0.369102
-vn -0.0838771 0.995843 -0.0355068
-vn 0.629724 0.73186 0.260439
-vn 0.803725 0.49337 0.332584
-vn -0.683407 -0.256729 -0.683407
-vn -0.683531 0.256067 -0.683531
-vn -0.0649249 0.995776 -0.0649248
-vn 0.481398 0.732469 0.481398
-vn 0.614804 0.493997 0.614804
-vn -0.369882 -0.256345 -0.893014
-vn -0.369102 0.255997 -0.893437
-vn -0.0355067 0.995843 -0.0838772
-vn 0.260439 0.73186 0.629724
-vn 0.332584 0.49337 0.803725
-vn -0.00284834 -0.257863 -0.966177
-vn -0.00192311 0.254736 -0.967009
-vn -0.000266114 0.995734 -0.0922702
-vn 2.39288e-05 0.731295 0.682061
-vn 2.43342e-09 0.492521 0.870301
-vn 0.379058 -0.3593 -0.852771
-vn 0.37711 0.149086 -0.914091
-vn 0.0275022 0.992081 -0.122551
-vn -0.26101 0.726762 0.635367
-vn -0.332485 0.492546 0.804271
-vn 0.663548 -0.410791 -0.625264
-vn 0.712664 0.0737216 -0.697621
-vn 0.0997268 0.987509 -0.121984
-vn -0.48732 0.723754 0.488568
-vn -0.615242 0.492602 0.615484
-vn 0.880028 -0.332908 -0.338709
-vn 0.917276 0.167113 -0.361493
-vn 0.113584 0.992365 -0.0480695
-vn -0.63415 0.727508 0.261889
-vn -0.804126 0.492634 0.332705
-vn 0.96669 -0.255738 0.0104537
-vn 0.967442 0.252962 0.00810329
-vn 0.0934365 0.995624 0.00128063
-vn -0.682167 0.731196 -0.00034353
-vn -0.870322 0.492483 -5.42436e-05
-vn 0.893014 -0.256345 0.369882
-vn 0.893437 0.255997 0.369102
-vn 0.0838768 0.995843 0.0355066
-vn -0.629724 0.73186 -0.260439
-vn -0.803725 0.49337 -0.332584
-vn 0.683407 -0.256729 0.683407
-vn 0.683531 0.256067 0.683531
-vn 0.0649249 0.995776 0.0649249
-vn -0.481398 0.732469 -0.481398
-vn -0.614804 0.493997 -0.614804
-vn 0.369882 -0.256345 0.893014
-vn 0.369102 0.255997 0.893437
-vn 0.0355067 0.995843 0.083877
-vn -0.260439 0.73186 -0.629724
-vn -0.332584 0.49337 -0.803725
-vn 3.83985e-09 -0.255752 0.966742
-vn 2.59359e-09 0.255443 0.966824
-vn 3.99081e-08 0.995754 0.092052
-vn 1.03862e-08 0.731305 -0.68205
-vn -2.43342e-09 0.492521 -0.870301
-vn -0.369882 -0.256345 0.893014
-vn -0.369102 0.255996 0.893437
-vn -0.0355068 0.995843 0.0838771
-vn 0.260439 0.73186 -0.629724
-vn 0.332584 0.49337 -0.803725
-vn -0.683407 -0.256729 0.683407
-vn -0.683531 0.256067 0.683531
-vn -0.0649249 0.995776 0.064925
-vn 0.481398 0.732469 -0.481398
-vn 0.614804 0.493997 -0.614804
-vn -0.893014 -0.256345 0.369882
-vn -0.893437 0.255997 0.369102
-vn -0.0838767 0.995843 0.0355066
-vn 0.629724 0.73186 -0.260439
-vn 0.803725 0.49337 -0.332584
-vn 0.915321 0.402725 4.83311e-09
-vn 0.941808 0.336151 -4.85769e-09
-vn 0.97869 0.205342 4.90003e-09
-vn 0.997804 -0.0662397 1.0073e-08
-vn 0.845438 0.403546 0.349835
-vn 0.869996 0.336859 0.360047
-vn 0.904193 0.205791 0.37428
-vn 0.921879 -0.0663697 0.381752
-vn 0.646802 0.404096 0.646802
-vn 0.665655 0.337351 0.665655
-vn 0.691923 0.20612 0.691923
-vn 0.705542 -0.0664796 0.705543
-vn 0.349835 0.403546 0.845438
-vn 0.360047 0.336859 0.869996
-vn 0.37428 0.205791 0.904193
-vn 0.381752 -0.0663697 0.921879
-vn -1.31462e-09 0.402725 0.915321
-vn 9.76689e-10 0.336151 0.941808
-vn -1.9304e-08 0.205342 0.97869
-vn -2.15056e-08 -0.0662397 0.997804
-vn -0.349835 0.403546 0.845438
-vn -0.360047 0.336859 0.869996
-vn -0.37428 0.205791 0.904193
-vn -0.381752 -0.0663697 0.921879
-vn -0.646802 0.404096 0.646802
-vn -0.665655 0.337351 0.665655
-vn -0.691923 0.20612 0.691923
-vn -0.705543 -0.0664796 0.705543
-vn -0.845438 0.403546 0.349835
-vn -0.869996 0.336859 0.360047
-vn -0.904193 0.205791 0.37428
-vn -0.921879 -0.0663697 0.381752
-vn -0.915321 0.402725 -2.41655e-09
-vn -0.941808 0.336151 -1.21442e-08
-vn -0.97869 0.205342 -3.18502e-08
-vn -0.997804 -0.0662397 -2.26643e-08
-vn -0.845438 0.403546 -0.349835
-vn -0.869996 0.336859 -0.360047
-vn -0.904193 0.205791 -0.37428
-vn -0.921879 -0.0663697 -0.381752
-vn -0.646802 0.404096 -0.646802
-vn -0.665655 0.337351 -0.665655
-vn -0.691923 0.20612 -0.691923
-vn -0.705542 -0.0664796 -0.705543
-vn -0.349835 0.403546 -0.845438
-vn -0.360047 0.336859 -0.869996
-vn -0.37428 0.205791 -0.904193
-vn -0.381752 -0.0663697 -0.921879
-vn 1.31462e-09 0.402725 -0.915321
-vn -9.76689e-10 0.336151 -0.941808
-vn 1.9304e-08 0.205342 -0.97869
-vn 2.15056e-08 -0.0662397 -0.997804
-vn 0.349835 0.403546 -0.845438
-vn 0.360047 0.336859 -0.869996
-vn 0.37428 0.205791 -0.904193
-vn 0.381752 -0.0663697 -0.921879
-vn 0.646802 0.404096 -0.646802
-vn 0.665655 0.337351 -0.665655
-vn 0.691923 0.20612 -0.691923
-vn 0.705543 -0.0664796 -0.705542
-vn 0.845438 0.403546 -0.349835
-vn 0.869996 0.336859 -0.360047
-vn 0.904193 0.205791 -0.37428
-vn 0.921879 -0.0663697 -0.381752
-vn 0.900182 -0.435513 -1.50883e-08
-vn 0.729611 -0.683863 -9.71212e-09
-vn 0.693951 -0.720022 -9.54282e-09
-vn 0.79395 -0.607984 2.6277e-08
-vn 0.831437 -0.43618 0.344179
-vn 0.673512 -0.684665 0.278594
-vn 0.640399 -0.720924 0.264874
-vn 0.732949 -0.608996 0.303166
-vn 0.636092 -0.436777 0.636092
-vn 0.514965 -0.685289 0.514965
-vn 0.489651 -0.721446 0.489651
-vn 0.560555 -0.609554 0.560555
-vn 0.344179 -0.43618 0.831437
-vn 0.278594 -0.684665 0.673512
-vn 0.264874 -0.720924 0.640399
-vn 0.303166 -0.608996 0.732949
-vn 1.18057e-08 -0.435513 0.900182
-vn -4.75784e-09 -0.683863 0.729611
-vn 9.10217e-09 -0.720022 0.693951
-vn -2.68996e-08 -0.607984 0.79395
-vn -0.344179 -0.43618 0.831437
-vn -0.278594 -0.684665 0.673512
-vn -0.264874 -0.720924 0.640399
-vn -0.303166 -0.608996 0.732949
-vn -0.636092 -0.436777 0.636092
-vn -0.514965 -0.685289 0.514965
-vn -0.489651 -0.721446 0.489651
-vn -0.560555 -0.609554 0.560555
-vn -0.831437 -0.43618 0.344179
-vn -0.673512 -0.684665 0.278595
-vn -0.640399 -0.720924 0.264874
-vn -0.732949 -0.608996 0.303166
-vn -0.900182 -0.435513 -7.54414e-09
-vn -0.729611 -0.683863 -7.28409e-09
-vn -0.693951 -0.720022 4.77141e-09
-vn -0.79395 -0.607983 -2.6277e-08
-vn -0.831437 -0.43618 -0.344179
-vn -0.673512 -0.684665 -0.278594
-vn -0.640399 -0.720924 -0.264874
-vn -0.732949 -0.608996 -0.303166
-vn -0.636092 -0.436777 -0.636092
-vn -0.514965 -0.685289 -0.514965
-vn -0.489651 -0.721446 -0.489651
-vn -0.560555 -0.609554 -0.560555
-vn -0.344179 -0.43618 -0.831437
-vn -0.278594 -0.684665 -0.673512
-vn -0.264874 -0.720924 -0.640399
-vn -0.303166 -0.608996 -0.732949
-vn -1.18057e-08 -0.435513 -0.900182
-vn 4.75784e-09 -0.683863 -0.729611
-vn -9.10217e-09 -0.720022 -0.693951
-vn 2.68996e-08 -0.607984 -0.79395
-vn 0.344179 -0.43618 -0.831437
-vn 0.278594 -0.684665 -0.673512
-vn 0.264874 -0.720924 -0.640399
-vn 0.303167 -0.608996 -0.732949
-vn 0.636092 -0.436777 -0.636092
-vn 0.514965 -0.685289 -0.514965
-vn 0.489651 -0.721446 -0.489651
-vn 0.560555 -0.609554 -0.560555
-vn 0.831437 -0.43618 -0.344179
-vn 0.673512 -0.684665 -0.278595
-vn 0.640399 -0.720924 -0.264874
-vn 0.732949 -0.608996 -0.303166
-vn 0.62386 -0.781536 3.04248e-08
-vn 0.177291 -0.984159 -3.28321e-09
-vn 0.0492072 -0.998789 1.48326e-09
-vn 1.94668e-11 -1 -7.78368e-10
-vn 0.576229 -0.781801 0.238217
-vn 0.163629 -0.984208 0.0675273
-vn 0.0454217 -0.998792 0.0187357
-vn 0.440416 -0.782348 0.440416
-vn 0.124903 -0.984276 0.124903
-vn 0.0346621 -0.998798 0.0346621
-vn 0.238217 -0.781801 0.576229
-vn 0.0675273 -0.984208 0.163629
-vn 0.0187357 -0.998792 0.0454217
-vn -3.18434e-08 -0.781536 0.62386
-vn 3.33958e-09 -0.984159 0.177291
-vn -1.80438e-09 -0.998789 0.0492072
-vn -0.238216 -0.781801 0.576229
-vn -0.0675273 -0.984208 0.163629
-vn -0.0187357 -0.998792 0.0454217
-vn -0.440416 -0.782348 0.440416
-vn -0.124903 -0.984276 0.124903
-vn -0.0346621 -0.998798 0.0346621
-vn -0.576229 -0.781801 0.238217
-vn -0.163629 -0.984208 0.0675273
-vn -0.0454217 -0.998792 0.0187357
-vn -0.62386 -0.781536 -3.17476e-08
-vn -0.177291 -0.984159 3.13397e-09
-vn -0.0492072 -0.998789 -1.33493e-09
-vn -0.576229 -0.781801 -0.238217
-vn -0.163629 -0.984208 -0.0675273
-vn -0.0454217 -0.998792 -0.0187357
-vn -0.440416 -0.782348 -0.440416
-vn -0.124903 -0.984276 -0.124903
-vn -0.0346621 -0.998798 -0.0346621
-vn -0.238217 -0.781801 -0.576229
-vn -0.0675273 -0.984208 -0.163629
-vn -0.0187357 -0.998792 -0.0454217
-vn 3.18434e-08 -0.781536 -0.62386
-vn -3.28168e-09 -0.984159 -0.177291
-vn 1.46144e-09 -0.998789 -0.0492072
-vn 0.238217 -0.781801 -0.576229
-vn 0.0675273 -0.984208 -0.163629
-vn 0.0187357 -0.998792 -0.0454217
-vn 0.440416 -0.782348 -0.440416
-vn 0.124903 -0.984276 -0.124903
-vn 0.0346621 -0.998798 -0.0346621
-vn 0.576229 -0.781801 -0.238217
-vn 0.163629 -0.984208 -0.0675273
-vn 0.0454217 -0.998792 -0.0187357
-vn 0.00778619 -0.99997 -0.000215809
-vn 0.0391385 -0.999233 -0.000988567
-vn 0.179511 -0.983746 -0.00436856
-vn 0.6123 -0.790556 -0.0104598
-vn 0.986152 -0.165707 -0.00666949
-vn 0.00703893 -0.812495 0.582926
-vn 0.0361273 -0.837257 0.545614
-vn 0.161845 -0.810421 0.563048
-vn 0.482365 -0.595148 0.642746
-vn 0.73872 -0.114593 0.664199
-vn -0.00190867 0.162121 0.986769
-vn 0.0027616 0.0171073 0.99985
-vn 0.0105326 0.0733989 0.997247
-vn -0.0660406 0.130069 0.989303
-vn -0.0944272 0.0165946 0.995393
-vn -0.009203 0.871509 0.490293
-vn -0.0486064 0.840609 0.539457
-vn -0.223298 0.802881 0.552739
-vn -0.596365 0.559971 0.575135
-vn -0.803337 0.0682361 0.591602
-vn -0.0105609 0.999944 0.000103364
-vn -0.0587986 0.99827 0.000709759
-vn -0.28071 0.959787 0.00326876
-vn -0.749723 0.661738 0.0042684
-vn -0.997351 0.0727144 0.00205923
-vn -0.00879197 0.871493 -0.49033
-vn -0.0464937 0.841178 -0.538756
-vn -0.217909 0.806807 -0.549161
-vn -0.597291 0.560026 -0.574121
-vn -0.804 0.0629127 -0.591291
-vn -0.00180555 0.161691 -0.98684
-vn 0.00203087 0.014555 -0.999892
-vn 0.00921499 0.0600698 -0.998152
-vn -0.0593333 0.113865 -0.991723
-vn -0.0868992 0.0122903 -0.996141
-vn 0.00641779 -0.812379 -0.583094
-vn 0.0337833 -0.837512 -0.545373
-vn 0.157112 -0.811947 -0.56219
-vn 0.484407 -0.589365 -0.646528
-vn 0.73887 -0.10132 -0.666187
-vn 0.946512 0.32265 -0.0033571
-vn 0.82583 0.56387 -0.00745213
-vn 0.650011 0.759893 -0.00693681
-vn 0.532429 0.846458 -0.00524544
-vn 0.725608 0.259351 0.637362
-vn 0.645945 0.461988 0.607719
-vn 0.531614 0.63666 0.558615
-vn 0.424964 0.681717 0.59554
-vn -0.0495616 -0.019755 0.998576
-vn -0.0378162 -0.0356243 0.99865
-vn -0.0379139 -0.0365122 0.998614
-vn -0.168854 -0.297946 0.93953
-vn -0.742342 -0.299166 0.599523
-vn -0.619602 -0.529406 0.579503
-vn -0.483708 -0.685761 0.543837
-vn -0.445293 -0.794355 0.413176
-vn -0.926513 -0.376257 0.00199587
-vn -0.75392 -0.656952 0.00431723
-vn -0.566224 -0.824244 0.00346105
-vn -0.481804 -0.876277 0.00185047
-vn -0.744675 -0.294424 -0.598977
-vn -0.621949 -0.528114 -0.578165
-vn -0.481171 -0.68834 -0.542828
-vn -0.438055 -0.797035 -0.415744
-vn -0.0443368 -0.0170558 -0.998871
-vn -0.0261761 -0.0281665 -0.99926
-vn -0.0252939 -0.0283323 -0.999278
-vn -0.157482 -0.289392 -0.944167
-vn 0.728244 0.25241 -0.637142
-vn 0.647055 0.459725 -0.608254
-vn 0.522994 0.640657 -0.562171
-vn 0.409978 0.682857 -0.604669
-vn -0.230787 0.972982 -0.00652338
-vn -0.548936 0.835863 -0.00151111
-vn -0.875671 0.482807 0.00989278
-vn -0.877554 0.479097 0.0190923
-vn -0.69619 0.717439 0.024497
-vn -0.152878 0.687211 0.71019
-vn -0.316721 0.63775 0.702113
-vn -0.601067 0.471452 0.64533
-vn -0.635889 0.44609 0.6298
-vn -0.435746 0.601008 0.670011
-vn 0.111112 -0.0850694 0.99016
-vn 0.22331 0.00654036 0.974726
-vn 0.190097 0.154964 0.969458
-vn 0.00527077 0.189482 0.98187
-vn -0.0117518 0.246688 0.969024
-vn 0.343906 -0.722796 0.599412
-vn 0.572489 -0.567656 0.591627
-vn 0.787436 -0.256459 0.560512
-vn 0.647097 -0.306374 0.698141
-vn 0.427528 -0.499343 0.753576
-vn 0.410926 -0.911668 0.00128446
-vn 0.67152 -0.740986 -0.000899122
-vn 0.922026 -0.38706 -0.00725269
-vn 0.84691 -0.531556 -0.0138542
-vn 0.535925 -0.8442 -0.0105045
-vn 0.341188 -0.722822 -0.600931
-vn 0.578664 -0.561139 -0.591838
-vn 0.784869 -0.25102 -0.566542
-vn 0.642681 -0.302257 -0.70399
-vn 0.418589 -0.500042 -0.758117
-vn 0.115806 -0.0791394 -0.990114
-vn 0.232811 0.0125652 -0.972441
-vn 0.206662 0.153601 -0.96628
-vn 0.0244996 0.161443 -0.986578
-vn 0.00338193 0.211115 -0.977455
-vn -0.134912 0.687491 -0.713551
-vn -0.31954 0.633073 -0.705062
-vn -0.603902 0.461442 -0.649903
-vn -0.631816 0.437169 -0.640072
-vn -0.424306 0.612706 -0.66675
-vn -0.4258 0.904753 0.0108049
-vn 0.0220472 0.999756 0.00162273
-vn 0.999599 0.0258705 0.0115556
-vn 0.709585 -0.704553 0.00967183
-vn -0.259858 0.791936 0.552549
-vn 0.00953916 0.99972 -0.0216718
-vn 0.410156 0.332912 -0.849083
-vn 0.541523 -0.54862 -0.637
-vn 0.0463104 0.455224 0.889172
-vn -0.0106883 0.988794 0.148901
-vn -0.0443756 0.682947 -0.729118
-vn 0.122825 0.00923214 -0.992385
-vn 0.481839 -0.180439 0.85748
-vn 0.455272 0.736752 0.499925
-vn -0.220542 0.907193 -0.358276
-vn -0.23592 0.657249 -0.715797
-vn 0.728092 -0.685302 -0.0155853
-vn 0.888739 0.45811 -0.0166791
-vn -0.260097 0.965582 0.000800195
-vn -0.371612 0.928378 -0.00441745
-vn 0.480166 -0.17836 -0.858853
-vn 0.488103 0.716801 -0.497947
-vn -0.222004 0.905399 0.361893
-vn -0.235405 0.66318 0.710477
-vn 0.0587203 0.437704 -0.8972
-vn 0.00132612 0.986459 -0.164003
-vn -0.0441901 0.681677 0.730317
-vn 0.138801 -0.0341896 0.98973
-vn -0.25889 0.797206 -0.54538
-vn 0.0122703 0.999739 0.0192865
-vn 0.39863 0.35489 0.845663
-vn 0.537564 -0.5814 0.610737
-vn -7.79193e-10 1 6.50944e-09
-vn 0.82454 0.565804 1.72913e-05
-vn 0.917701 -0.397272 3.35502e-05
-vn 0.935269 -0.353939 0.000112842
-vn 0.780712 0.624891 7.51916e-05
-vn 0.762641 0.565035 0.314825
-vn 0.847982 -0.397998 0.350034
-vn 0.864141 -0.355261 0.356441
-vn 0.720991 0.625625 0.297933
-vn 0.583357 0.565165 0.583338
-vn 0.648485 -0.398726 0.648448
-vn 0.660872 -0.355894 0.660748
-vn 0.551862 0.62529 0.55178
-vn 0.314824 0.565051 0.762629
-vn 0.350045 -0.397976 0.847988
-vn 0.356474 -0.3552 0.864153
-vn 0.297983 0.625515 0.721067
-vn -1.7299e-05 0.565804 0.82454
-vn -3.35448e-05 -0.397272 0.917701
-vn -0.000112839 -0.353939 0.935269
-vn -7.51869e-05 0.624891 0.780712
-vn -0.314825 0.565035 0.762641
-vn -0.350034 -0.397998 0.847982
-vn -0.356441 -0.355261 0.864141
-vn -0.297933 0.625625 0.720991
-vn -0.583338 0.565165 0.583357
-vn -0.648448 -0.398726 0.648485
-vn -0.660748 -0.355894 0.660872
-vn -0.55178 0.62529 0.551862
-vn -0.762629 0.565051 0.314824
-vn -0.847988 -0.397976 0.350045
-vn -0.864153 -0.3552 0.356474
-vn -0.721067 0.625515 0.297983
-vn -0.82454 0.565804 -1.72877e-05
-vn -0.917701 -0.397272 -3.35262e-05
-vn -0.935269 -0.353939 -0.000112839
-vn -0.780712 0.624891 -7.51882e-05
-vn -0.76264 0.565035 -0.314825
-vn -0.847982 -0.397998 -0.350034
-vn -0.864141 -0.355261 -0.356441
-vn -0.720991 0.625625 -0.297933
-vn -0.583357 0.565165 -0.583338
-vn -0.648485 -0.398726 -0.648448
-vn -0.660872 -0.355894 -0.660748
-vn -0.551862 0.62529 -0.55178
-vn -0.314824 0.565051 -0.762629
-vn -0.350045 -0.397976 -0.847988
-vn -0.356474 -0.3552 -0.864153
-vn -0.297983 0.625515 -0.721067
-vn 1.72918e-05 0.565804 -0.82454
-vn 3.35344e-05 -0.397272 -0.917701
-vn 0.000112839 -0.353939 -0.935269
-vn 7.51869e-05 0.624891 -0.780712
-vn 0.314825 0.565035 -0.762641
-vn 0.350034 -0.397998 -0.847982
-vn 0.356441 -0.355261 -0.864141
-vn 0.297933 0.625625 -0.720991
-vn 0.583338 0.565165 -0.583357
-vn 0.648448 -0.398726 -0.648485
-vn 0.660748 -0.355894 -0.660872
-vn 0.55178 0.62529 -0.551862
-vn 0.762629 0.565051 -0.314824
-vn 0.847988 -0.397976 -0.350045
-vn 0.864153 -0.3552 -0.356474
-vn 0.721067 0.625515 -0.297983
-vn 0.236584 0.971611 8.31862e-09
-vn 0.173084 0.984907 -1.18677e-09
-vn 0.379703 0.925108 2.44118e-09
-vn 0.526673 0.850068 2.66504e-09
-vn 0.217978 0.971775 0.0902162
-vn 0.15959 0.984977 0.0659615
-vn 0.350498 0.925312 0.14474
-vn 0.48559 0.850653 0.201474
-vn 0.166631 0.971838 0.166631
-vn 0.121908 0.985026 0.121908
-vn 0.267668 0.925585 0.267668
-vn 0.371315 0.851029 0.371315
-vn 0.0902162 0.971775 0.217978
-vn 0.0659615 0.984977 0.15959
-vn 0.14474 0.925312 0.350498
-vn 0.201474 0.850653 0.48559
-vn -8.2649e-09 0.971611 0.236584
-vn 1.37744e-09 0.984907 0.173084
-vn 2.79781e-10 0.925108 0.379703
-vn 2.55497e-09 0.850068 0.526673
-vn -0.0902162 0.971775 0.217978
-vn -0.0659615 0.984977 0.15959
-vn -0.14474 0.925312 0.350498
-vn -0.201474 0.850653 0.48559
-vn -0.166631 0.971838 0.166631
-vn -0.121908 0.985026 0.121908
-vn -0.267668 0.925585 0.267668
-vn -0.371315 0.851029 0.371315
-vn -0.217978 0.971775 0.0902162
-vn -0.15959 0.984977 0.0659615
-vn -0.350498 0.925312 0.14474
-vn -0.48559 0.850653 0.201474
-vn -0.236583 0.971611 -6.23897e-09
-vn -0.173084 0.984907 2.37354e-09
-vn -0.379703 0.925108 -2.44118e-09
-vn -0.526673 0.850068 0
-vn -0.217978 0.971775 -0.0902162
-vn -0.15959 0.984977 -0.0659615
-vn -0.350498 0.925312 -0.14474
-vn -0.48559 0.850653 -0.201474
-vn -0.166631 0.971838 -0.166631
-vn -0.121908 0.985026 -0.121908
-vn -0.267668 0.925585 -0.267668
-vn -0.371315 0.851029 -0.371315
-vn -0.0902162 0.971775 -0.217978
-vn -0.0659615 0.984977 -0.15959
-vn -0.14474 0.925312 -0.350498
-vn -0.201474 0.850653 -0.485589
-vn 6.16189e-09 0.971611 -0.236584
-vn -1.37744e-09 0.984907 -0.173084
-vn -2.79781e-10 0.925108 -0.379703
-vn -2.55497e-09 0.850068 -0.526673
-vn 0.0902162 0.971775 -0.217978
-vn 0.0659615 0.984977 -0.15959
-vn 0.14474 0.925312 -0.350498
-vn 0.201474 0.850653 -0.48559
-vn 0.166631 0.971838 -0.166631
-vn 0.121908 0.985026 -0.121908
-vn 0.267668 0.925585 -0.267668
-vn 0.371315 0.851029 -0.371315
-vn 0.217978 0.971775 -0.0902162
-vn 0.15959 0.984977 -0.0659615
-vn 0.350498 0.925312 -0.14474
-vn 0.48559 0.850653 -0.201474
-
-f 7 6 1
-f 1 2 7
-f 8 7 2
-f 2 3 8
-f 9 8 3
-f 3 4 9
-f 10 9 4
-f 4 5 10
-f 12 11 6
-f 6 7 12
-f 13 12 7
-f 7 8 13
-f 14 13 8
-f 8 9 14
-f 15 14 9
-f 9 10 15
-f 17 16 11
-f 11 12 17
-f 18 17 12
-f 12 13 18
-f 19 18 13
-f 13 14 19
-f 20 19 14
-f 14 15 20
-f 22 21 16
-f 16 17 22
-f 23 22 17
-f 17 18 23
-f 24 23 18
-f 18 19 24
-f 25 24 19
-f 19 20 25
-f 27 26 21
-f 21 22 27
-f 28 27 22
-f 22 23 28
-f 29 28 23
-f 23 24 29
-f 30 29 24
-f 24 25 30
-f 32 31 26
-f 26 27 32
-f 33 32 27
-f 27 28 33
-f 34 33 28
-f 28 29 34
-f 35 34 29
-f 29 30 35
-f 37 36 31
-f 31 32 37
-f 38 37 32
-f 32 33 38
-f 39 38 33
-f 33 34 39
-f 40 39 34
-f 34 35 40
-f 42 41 36
-f 36 37 42
-f 43 42 37
-f 37 38 43
-f 44 43 38
-f 38 39 44
-f 45 44 39
-f 39 40 45
-f 47 46 41
-f 41 42 47
-f 48 47 42
-f 42 43 48
-f 49 48 43
-f 43 44 49
-f 50 49 44
-f 44 45 50
-f 52 51 46
-f 46 47 52
-f 53 52 47
-f 47 48 53
-f 54 53 48
-f 48 49 54
-f 55 54 49
-f 49 50 55
-f 57 56 51
-f 51 52 57
-f 58 57 52
-f 52 53 58
-f 59 58 53
-f 53 54 59
-f 60 59 54
-f 54 55 60
-f 62 61 56
-f 56 57 62
-f 63 62 57
-f 57 58 63
-f 64 63 58
-f 58 59 64
-f 65 64 59
-f 59 60 65
-f 67 66 61
-f 61 62 67
-f 68 67 62
-f 62 63 68
-f 69 68 63
-f 63 64 69
-f 70 69 64
-f 64 65 70
-f 72 71 66
-f 66 67 72
-f 73 72 67
-f 67 68 73
-f 74 73 68
-f 68 69 74
-f 75 74 69
-f 69 70 75
-f 77 76 71
-f 71 72 77
-f 78 77 72
-f 72 73 78
-f 79 78 73
-f 73 74 79
-f 80 79 74
-f 74 75 80
-f 2 1 76
-f 76 77 2
-f 3 2 77
-f 77 78 3
-f 4 3 78
-f 78 79 4
-f 5 4 79
-f 79 80 5
-f 85 10 5
-f 5 81 85
-f 86 85 81
-f 81 82 86
-f 87 86 82
-f 82 83 87
-f 88 87 83
-f 83 84 88
-f 89 15 10
-f 10 85 89
-f 90 89 85
-f 85 86 90
-f 91 90 86
-f 86 87 91
-f 92 91 87
-f 87 88 92
-f 93 20 15
-f 15 89 93
-f 94 93 89
-f 89 90 94
-f 95 94 90
-f 90 91 95
-f 96 95 91
-f 91 92 96
-f 97 25 20
-f 20 93 97
-f 98 97 93
-f 93 94 98
-f 99 98 94
-f 94 95 99
-f 100 99 95
-f 95 96 100
-f 101 30 25
-f 25 97 101
-f 102 101 97
-f 97 98 102
-f 103 102 98
-f 98 99 103
-f 104 103 99
-f 99 100 104
-f 105 35 30
-f 30 101 105
-f 106 105 101
-f 101 102 106
-f 107 106 102
-f 102 103 107
-f 108 107 103
-f 103 104 108
-f 109 40 35
-f 35 105 109
-f 110 109 105
-f 105 106 110
-f 111 110 106
-f 106 107 111
-f 112 111 107
-f 107 108 112
-f 113 45 40
-f 40 109 113
-f 114 113 109
-f 109 110 114
-f 115 114 110
-f 110 111 115
-f 116 115 111
-f 111 112 116
-f 117 50 45
-f 45 113 117
-f 118 117 113
-f 113 114 118
-f 119 118 114
-f 114 115 119
-f 120 119 115
-f 115 116 120
-f 121 55 50
-f 50 117 121
-f 122 121 117
-f 117 118 122
-f 123 122 118
-f 118 119 123
-f 124 123 119
-f 119 120 124
-f 125 60 55
-f 55 121 125
-f 126 125 121
-f 121 122 126
-f 127 126 122
-f 122 123 127
-f 128 127 123
-f 123 124 128
-f 129 65 60
-f 60 125 129
-f 130 129 125
-f 125 126 130
-f 131 130 126
-f 126 127 131
-f 132 131 127
-f 127 128 132
-f 133 70 65
-f 65 129 133
-f 134 133 129
-f 129 130 134
-f 135 134 130
-f 130 131 135
-f 136 135 131
-f 131 132 136
-f 137 75 70
-f 70 133 137
-f 138 137 133
-f 133 134 138
-f 139 138 134
-f 134 135 139
-f 140 139 135
-f 135 136 140
-f 141 80 75
-f 75 137 141
-f 142 141 137
-f 137 138 142
-f 143 142 138
-f 138 139 143
-f 144 143 139
-f 139 140 144
-f 81 5 80
-f 80 141 81
-f 82 81 141
-f 141 142 82
-f 83 82 142
-f 142 143 83
-f 84 83 143
-f 143 144 84
-f 149 88 84
-f 84 145 149
-f 150 149 145
-f 145 146 150
-f 151 150 146
-f 146 147 151
-f 152 151 147
-f 147 148 152
-f 153 92 88
-f 88 149 153
-f 154 153 149
-f 149 150 154
-f 155 154 150
-f 150 151 155
-f 156 155 151
-f 151 152 156
-f 157 96 92
-f 92 153 157
-f 158 157 153
-f 153 154 158
-f 159 158 154
-f 154 155 159
-f 160 159 155
-f 155 156 160
-f 161 100 96
-f 96 157 161
-f 162 161 157
-f 157 158 162
-f 163 162 158
-f 158 159 163
-f 164 163 159
-f 159 160 164
-f 165 104 100
-f 100 161 165
-f 166 165 161
-f 161 162 166
-f 167 166 162
-f 162 163 167
-f 168 167 163
-f 163 164 168
-f 169 108 104
-f 104 165 169
-f 170 169 165
-f 165 166 170
-f 171 170 166
-f 166 167 171
-f 172 171 167
-f 167 168 172
-f 173 112 108
-f 108 169 173
-f 174 173 169
-f 169 170 174
-f 175 174 170
-f 170 171 175
-f 176 175 171
-f 171 172 176
-f 177 116 112
-f 112 173 177
-f 178 177 173
-f 173 174 178
-f 179 178 174
-f 174 175 179
-f 180 179 175
-f 175 176 180
-f 181 120 116
-f 116 177 181
-f 182 181 177
-f 177 178 182
-f 183 182 178
-f 178 179 183
-f 184 183 179
-f 179 180 184
-f 185 124 120
-f 120 181 185
-f 186 185 181
-f 181 182 186
-f 187 186 182
-f 182 183 187
-f 188 187 183
-f 183 184 188
-f 189 128 124
-f 124 185 189
-f 190 189 185
-f 185 186 190
-f 191 190 186
-f 186 187 191
-f 192 191 187
-f 187 188 192
-f 193 132 128
-f 128 189 193
-f 194 193 189
-f 189 190 194
-f 195 194 190
-f 190 191 195
-f 196 195 191
-f 191 192 196
-f 197 136 132
-f 132 193 197
-f 198 197 193
-f 193 194 198
-f 199 198 194
-f 194 195 199
-f 200 199 195
-f 195 196 200
-f 201 140 136
-f 136 197 201
-f 202 201 197
-f 197 198 202
-f 203 202 198
-f 198 199 203
-f 204 203 199
-f 199 200 204
-f 205 144 140
-f 140 201 205
-f 206 205 201
-f 201 202 206
-f 207 206 202
-f 202 203 207
-f 208 207 203
-f 203 204 208
-f 145 84 144
-f 144 205 145
-f 146 145 205
-f 205 206 146
-f 147 146 206
-f 206 207 147
-f 148 147 207
-f 207 208 148
-f 213 152 148
-f 148 209 213
-f 214 213 209
-f 209 210 214
-f 215 214 210
-f 210 211 215
-f 212 215 211
-f 211 212 212
-f 216 156 152
-f 152 213 216
-f 217 216 213
-f 213 214 217
-f 218 217 214
-f 214 215 218
-f 212 218 215
-f 215 212 212
-f 219 160 156
-f 156 216 219
-f 220 219 216
-f 216 217 220
-f 221 220 217
-f 217 218 221
-f 212 221 218
-f 218 212 212
-f 222 164 160
-f 160 219 222
-f 223 222 219
-f 219 220 223
-f 224 223 220
-f 220 221 224
-f 212 224 221
-f 221 212 212
-f 225 168 164
-f 164 222 225
-f 226 225 222
-f 222 223 226
-f 227 226 223
-f 223 224 227
-f 212 227 224
-f 224 212 212
-f 228 172 168
-f 168 225 228
-f 229 228 225
-f 225 226 229
-f 230 229 226
-f 226 227 230
-f 212 230 227
-f 227 212 212
-f 231 176 172
-f 172 228 231
-f 232 231 228
-f 228 229 232
-f 233 232 229
-f 229 230 233
-f 212 233 230
-f 230 212 212
-f 234 180 176
-f 176 231 234
-f 235 234 231
-f 231 232 235
-f 236 235 232
-f 232 233 236
-f 212 236 233
-f 233 212 212
-f 237 184 180
-f 180 234 237
-f 238 237 234
-f 234 235 238
-f 239 238 235
-f 235 236 239
-f 212 239 236
-f 236 212 212
-f 240 188 184
-f 184 237 240
-f 241 240 237
-f 237 238 241
-f 242 241 238
-f 238 239 242
-f 212 242 239
-f 239 212 212
-f 243 192 188
-f 188 240 243
-f 244 243 240
-f 240 241 244
-f 245 244 241
-f 241 242 245
-f 212 245 242
-f 242 212 212
-f 246 196 192
-f 192 243 246
-f 247 246 243
-f 243 244 247
-f 248 247 244
-f 244 245 248
-f 212 248 245
-f 245 212 212
-f 249 200 196
-f 196 246 249
-f 250 249 246
-f 246 247 250
-f 251 250 247
-f 247 248 251
-f 212 251 248
-f 248 212 212
-f 252 204 200
-f 200 249 252
-f 253 252 249
-f 249 250 253
-f 254 253 250
-f 250 251 254
-f 212 254 251
-f 251 212 212
-f 255 208 204
-f 204 252 255
-f 256 255 252
-f 252 253 256
-f 257 256 253
-f 253 254 257
-f 212 257 254
-f 254 212 212
-f 209 148 208
-f 208 255 209
-f 210 209 255
-f 255 256 210
-f 211 210 256
-f 256 257 211
-f 212 211 257
-f 257 212 212
-f 264 263 258
-f 258 259 264
-f 265 264 259
-f 259 260 265
-f 266 265 260
-f 260 261 266
-f 267 266 261
-f 261 262 267
-f 269 268 263
-f 263 264 269
-f 270 269 264
-f 264 265 270
-f 271 270 265
-f 265 266 271
-f 272 271 266
-f 266 267 272
-f 274 273 268
-f 268 269 274
-f 275 274 269
-f 269 270 275
-f 276 275 270
-f 270 271 276
-f 277 276 271
-f 271 272 277
-f 279 278 273
-f 273 274 279
-f 280 279 274
-f 274 275 280
-f 281 280 275
-f 275 276 281
-f 282 281 276
-f 276 277 282
-f 284 283 278
-f 278 279 284
-f 285 284 279
-f 279 280 285
-f 286 285 280
-f 280 281 286
-f 287 286 281
-f 281 282 287
-f 289 288 283
-f 283 284 289
-f 290 289 284
-f 284 285 290
-f 291 290 285
-f 285 286 291
-f 292 291 286
-f 286 287 292
-f 294 293 288
-f 288 289 294
-f 295 294 289
-f 289 290 295
-f 296 295 290
-f 290 291 296
-f 297 296 291
-f 291 292 297
-f 259 258 293
-f 293 294 259
-f 260 259 294
-f 294 295 260
-f 261 260 295
-f 295 296 261
-f 262 261 296
-f 296 297 262
-f 302 267 262
-f 262 298 302
-f 303 302 298
-f 298 299 303
-f 304 303 299
-f 299 300 304
-f 305 304 300
-f 300 301 305
-f 306 272 267
-f 267 302 306
-f 307 306 302
-f 302 303 307
-f 308 307 303
-f 303 304 308
-f 309 308 304
-f 304 305 309
-f 310 277 272
-f 272 306 310
-f 311 310 306
-f 306 307 311
-f 312 311 307
-f 307 308 312
-f 313 312 308
-f 308 309 313
-f 314 282 277
-f 277 310 314
-f 315 314 310
-f 310 311 315
-f 316 315 311
-f 311 312 316
-f 317 316 312
-f 312 313 317
-f 318 287 282
-f 282 314 318
-f 319 318 314
-f 314 315 319
-f 320 319 315
-f 315 316 320
-f 321 320 316
-f 316 317 321
-f 322 292 287
-f 287 318 322
-f 323 322 318
-f 318 319 323
-f 324 323 319
-f 319 320 324
-f 325 324 320
-f 320 321 325
-f 326 297 292
-f 292 322 326
-f 327 326 322
-f 322 323 327
-f 328 327 323
-f 323 324 328
-f 329 328 324
-f 324 325 329
-f 298 262 297
-f 297 326 298
-f 299 298 326
-f 326 327 299
-f 300 299 327
-f 327 328 300
-f 301 300 328
-f 328 329 301
-f 336 335 330
-f 330 331 336
-f 337 336 331
-f 331 332 337
-f 338 337 332
-f 332 333 338
-f 339 338 333
-f 333 334 339
-f 341 340 335
-f 335 336 341
-f 342 341 336
-f 336 337 342
-f 343 342 337
-f 337 338 343
-f 344 343 338
-f 338 339 344
-f 346 345 340
-f 340 341 346
-f 347 346 341
-f 341 342 347
-f 348 347 342
-f 342 343 348
-f 349 348 343
-f 343 344 349
-f 351 350 345
-f 345 346 351
-f 352 351 346
-f 346 347 352
-f 353 352 347
-f 347 348 353
-f 354 353 348
-f 348 349 354
-f 356 355 350
-f 350 351 356
-f 357 356 351
-f 351 352 357
-f 358 357 352
-f 352 353 358
-f 359 358 353
-f 353 354 359
-f 361 360 355
-f 355 356 361
-f 362 361 356
-f 356 357 362
-f 363 362 357
-f 357 358 363
-f 364 363 358
-f 358 359 364
-f 366 365 360
-f 360 361 366
-f 367 366 361
-f 361 362 367
-f 368 367 362
-f 362 363 368
-f 369 368 363
-f 363 364 369
-f 331 330 365
-f 365 366 331
-f 332 331 366
-f 366 367 332
-f 333 332 367
-f 367 368 333
-f 334 333 368
-f 368 369 334
-f 374 339 334
-f 334 370 374
-f 375 374 370
-f 370 371 375
-f 376 375 371
-f 371 372 376
-f 377 376 372
-f 372 373 377
-f 378 344 339
-f 339 374 378
-f 379 378 374
-f 374 375 379
-f 380 379 375
-f 375 376 380
-f 381 380 376
-f 376 377 381
-f 382 349 344
-f 344 378 382
-f 383 382 378
-f 378 379 383
-f 384 383 379
-f 379 380 384
-f 385 384 380
-f 380 381 385
-f 386 354 349
-f 349 382 386
-f 387 386 382
-f 382 383 387
-f 388 387 383
-f 383 384 388
-f 389 388 384
-f 384 385 389
-f 390 359 354
-f 354 386 390
-f 391 390 386
-f 386 387 391
-f 392 391 387
-f 387 388 392
-f 393 392 388
-f 388 389 393
-f 394 364 359
-f 359 390 394
-f 395 394 390
-f 390 391 395
-f 396 395 391
-f 391 392 396
-f 397 396 392
-f 392 393 397
-f 398 369 364
-f 364 394 398
-f 399 398 394
-f 394 395 399
-f 400 399 395
-f 395 396 400
-f 401 400 396
-f 396 397 401
-f 370 334 369
-f 369 398 370
-f 371 370 398
-f 398 399 371
-f 372 371 399
-f 399 400 372
-f 373 372 400
-f 400 401 373
-f 407 402 402
-f 402 403 407
-f 408 407 403
-f 403 404 408
-f 409 408 404
-f 404 405 409
-f 410 409 405
-f 405 406 410
-f 411 402 402
-f 402 407 411
-f 412 411 407
-f 407 408 412
-f 413 412 408
-f 408 409 413
-f 414 413 409
-f 409 410 414
-f 415 402 402
-f 402 411 415
-f 416 415 411
-f 411 412 416
-f 417 416 412
-f 412 413 417
-f 418 417 413
-f 413 414 418
-f 419 402 402
-f 402 415 419
-f 420 419 415
-f 415 416 420
-f 421 420 416
-f 416 417 421
-f 422 421 417
-f 417 418 422
-f 423 402 402
-f 402 419 423
-f 424 423 419
-f 419 420 424
-f 425 424 420
-f 420 421 425
-f 426 425 421
-f 421 422 426
-f 427 402 402
-f 402 423 427
-f 428 427 423
-f 423 424 428
-f 429 428 424
-f 424 425 429
-f 430 429 425
-f 425 426 430
-f 431 402 402
-f 402 427 431
-f 432 431 427
-f 427 428 432
-f 433 432 428
-f 428 429 433
-f 434 433 429
-f 429 430 434
-f 435 402 402
-f 402 431 435
-f 436 435 431
-f 431 432 436
-f 437 436 432
-f 432 433 437
-f 438 437 433
-f 433 434 438
-f 439 402 402
-f 402 435 439
-f 440 439 435
-f 435 436 440
-f 441 440 436
-f 436 437 441
-f 442 441 437
-f 437 438 442
-f 443 402 402
-f 402 439 443
-f 444 443 439
-f 439 440 444
-f 445 444 440
-f 440 441 445
-f 446 445 441
-f 441 442 446
-f 447 402 402
-f 402 443 447
-f 448 447 443
-f 443 444 448
-f 449 448 444
-f 444 445 449
-f 450 449 445
-f 445 446 450
-f 451 402 402
-f 402 447 451
-f 452 451 447
-f 447 448 452
-f 453 452 448
-f 448 449 453
-f 454 453 449
-f 449 450 454
-f 455 402 402
-f 402 451 455
-f 456 455 451
-f 451 452 456
-f 457 456 452
-f 452 453 457
-f 458 457 453
-f 453 454 458
-f 459 402 402
-f 402 455 459
-f 460 459 455
-f 455 456 460
-f 461 460 456
-f 456 457 461
-f 462 461 457
-f 457 458 462
-f 463 402 402
-f 402 459 463
-f 464 463 459
-f 459 460 464
-f 465 464 460
-f 460 461 465
-f 466 465 461
-f 461 462 466
-f 403 402 402
-f 402 463 403
-f 404 403 463
-f 463 464 404
-f 405 404 464
-f 464 465 405
-f 406 405 465
-f 465 466 406
-f 471 410 406
-f 406 467 471
-f 472 471 467
-f 467 468 472
-f 473 472 468
-f 468 469 473
-f 474 473 469
-f 469 470 474
-f 475 414 410
-f 410 471 475
-f 476 475 471
-f 471 472 476
-f 477 476 472
-f 472 473 477
-f 478 477 473
-f 473 474 478
-f 479 418 414
-f 414 475 479
-f 480 479 475
-f 475 476 480
-f 481 480 476
-f 476 477 481
-f 482 481 477
-f 477 478 482
-f 483 422 418
-f 418 479 483
-f 484 483 479
-f 479 480 484
-f 485 484 480
-f 480 481 485
-f 486 485 481
-f 481 482 486
-f 487 426 422
-f 422 483 487
-f 488 487 483
-f 483 484 488
-f 489 488 484
-f 484 485 489
-f 490 489 485
-f 485 486 490
-f 491 430 426
-f 426 487 491
-f 492 491 487
-f 487 488 492
-f 493 492 488
-f 488 489 493
-f 494 493 489
-f 489 490 494
-f 495 434 430
-f 430 491 495
-f 496 495 491
-f 491 492 496
-f 497 496 492
-f 492 493 497
-f 498 497 493
-f 493 494 498
-f 499 438 434
-f 434 495 499
-f 500 499 495
-f 495 496 500
-f 501 500 496
-f 496 497 501
-f 502 501 497
-f 497 498 502
-f 503 442 438
-f 438 499 503
-f 504 503 499
-f 499 500 504
-f 505 504 500
-f 500 501 505
-f 506 505 501
-f 501 502 506
-f 507 446 442
-f 442 503 507
-f 508 507 503
-f 503 504 508
-f 509 508 504
-f 504 505 509
-f 510 509 505
-f 505 506 510
-f 511 450 446
-f 446 507 511
-f 512 511 507
-f 507 508 512
-f 513 512 508
-f 508 509 513
-f 514 513 509
-f 509 510 514
-f 515 454 450
-f 450 511 515
-f 516 515 511
-f 511 512 516
-f 517 516 512
-f 512 513 517
-f 518 517 513
-f 513 514 518
-f 519 458 454
-f 454 515 519
-f 520 519 515
-f 515 516 520
-f 521 520 516
-f 516 517 521
-f 522 521 517
-f 517 518 522
-f 523 462 458
-f 458 519 523
-f 524 523 519
-f 519 520 524
-f 525 524 520
-f 520 521 525
-f 526 525 521
-f 521 522 526
-f 527 466 462
-f 462 523 527
-f 528 527 523
-f 523 524 528
-f 529 528 524
-f 524 525 529
-f 530 529 525
-f 525 526 530
-f 467 406 466
-f 466 527 467
-f 468 467 527
-f 527 528 468
-f 469 468 528
-f 528 529 469
-f 470 469 529
-f 529 530 470
Index: sw/utils/bitfontmaker.cpp
===================================================================
--- sw/utils/bitfontmaker.cpp (revision 5)
+++ sw/utils/bitfontmaker.cpp (nonexistent)
@@ -1,268 +0,0 @@
-/*
-Per Lenander 2012
-
-Bitmap font tool:
------------------
-
-The tool utilize SDL/SDL_image for graphics conversion
-*/
-
-#include
-#include
-
-#define SCREEN_WIDTH 640
-#define SCREEN_HEIGHT 480
-#define SCREEN_DEPTH 32
-
-#include
-#include
-#include
-#include
-
-using namespace std;
-
-SDL_Surface *screen;
-
-int spriteW = 0;
-int spriteH = 0;
-
-/* Ordinary inits */
-int InitSDL(void)
-{
- if (SDL_Init(SDL_INIT_VIDEO) < 0)
- {
- cerr << "Unable to init SDL: " << SDL_GetError() << endl;
- return 1;
- }
-
- screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_HWSURFACE | SDL_DOUBLEBUF);
-
- if (!screen)
- {
- cerr << "Unable to set video: " << SDL_GetError() << endl;
- return 1;
- }
- // make sure SDL cleans up before exit
- atexit(SDL_Quit);
-
- return 0;
-}
-
-/* Loads the spritesheet (or any image, but this is the only thing it is used for) */
-SDL_Surface * LoadImage(std::string s)
-{
- SDL_Surface *loaded = NULL;
-
- loaded = IMG_Load(s.c_str());
-
- if(!loaded) return NULL;
-
- SDL_Surface *optimized = NULL;
-
- optimized = SDL_DisplayFormatAlpha(loaded);
-
- SDL_FreeSurface(loaded);
-
- if(!optimized) return NULL;
-
- return optimized;
-}
-
-SDL_Color GetPixel ( SDL_Surface* pSurface , int x , int y )
-{
- SDL_Color color ;
- Uint32 col = 0 ;
-
- //determine position
- char* pPosition = ( char* ) pSurface->pixels ;
-
- //offset by y
- pPosition += ( pSurface->pitch * y ) ;
-
- //offset by x
- pPosition += ( pSurface->format->BytesPerPixel * x ) ;
-
- //copy pixel data
- memcpy ( &col , pPosition , pSurface->format->BytesPerPixel ) ;
-
- //convert color
- SDL_GetRGB ( col , pSurface->format , &color.r , &color.g , &color.b ) ;
- return ( color ) ;
-}
-
-int main ( int argc, char** argv )
-{
- if( argc < 2 )
- {
- cout << "Usage: " << argv[0] << " filename. [bpp=16] [glyphsize=32]" << endl;
- return 1;
- }
-
- if( InitSDL() )
- return 1;
- cout << "SDL successfully initialized." << endl;
-
- SDL_Surface *spritesheet = LoadImage( argv[1] );
- if( spritesheet == NULL )
- {
- cout << "Couldn't load " << argv[1] << "!" << endl;
- return 1;
- }
-
- int outputBpp = 16;
- if(argc >= 3)
- {
- stringstream ss(argv[2]);
- ss >> outputBpp;
-
- if(outputBpp != 8 && outputBpp != 16 && outputBpp != 24 && outputBpp != 32)
- {
- cout << "Mode: '" << argv[2] << "' not supported, choose between 8, 16, 24, and 32" << endl;
- return 1;
- }
- else if(outputBpp == 8 && spritesheet->w % 4)
- {
- cout << "Mode: 8bpp requires the width to be divisible by 4!" << endl;
- return 1;
- }
- else if(outputBpp == 16 && spritesheet->w % 2)
- {
- cout << "Mode: 16bpp requires the width to be divisible by 2!" << endl;
- return 1;
- }
- }
-
- int stride = 1;
- if(outputBpp == 8)
- stride = 4;
- else if(outputBpp == 16)
- stride = 2;
-
- int glyphsize = 32;
- if(argc >= 4)
- {
- stringstream ss(argv[3]);
- ss >> glyphsize;
-
- if(glyphsize <= 0)
- {
- cout << "Negative glyph width not supported." << endl;
- return 1;
- }
- }
-
- string filename(argv[1]);
- filename = filename.substr(0, filename.find('.'));
-
- /* Open an output file */
- string offilename = filename + "_font.h";
- ofstream output(offilename.c_str(),ofstream::out);
- if( !output )
- {
- cout << "Couldn't open output file!" << endl;
- return 1;
- }
-
- SDL_Color bg = GetPixel(spritesheet, 0, 0);
-
- output << "/* Bitmap font definition */" << endl << endl;
- output << "/* size: " << spritesheet->w << " * " << spritesheet->h << " at " << outputBpp << "BPP */" << endl << endl;
- output << "#ifndef " << filename << "_H" << endl;
- output << "#define " << filename << "_H" << endl;
-
- output << "// Create the font with the following command:" << endl;
- output << "// -------------------------------------------" << endl;
- output << "orgfx_bitmap_font init_" << filename << "_font(int spacing, int spacewidth);" << endl << endl;
- output << "// SPACING refers to the number of pixels between characters in a string." << endl;
- output << "// SPACEWIDTH refers to the number of pixels used for the space char." << endl << endl;
-
-
- output << "// Write a string using this syntax:" << endl;
- output << "// ---------------------------------" << endl;
- output << "// orgfx_put_bitmap_text(&" << filename << "_font, x*FIXEDW, y*FIXEDW, \"Some text\");" << endl << endl;
-
- output << "orgfx_sprite_rect " << filename << "_glyphs[] = {" << endl;
-
- for(int glyphid = 0; glyphid < 256; glyphid++)
- {
- int startX = (glyphid%16) * glyphsize;
- int endX = startX + glyphsize;
- int startY = (glyphid/16) * glyphsize;
- int endY = startY + glyphsize;
-
- bool foundPixel = false;
-
- for(int x = endX-1; x >= startX; x--)
- {
- for(int y = startY; y < endY; y++)
- {
- SDL_Color col = GetPixel(spritesheet, x, y);
- if(col.r != bg.r || col.g != bg.g || col.b != bg.b)
- {
- foundPixel = true;
- break;
- }
- }
-
- if(foundPixel)
- break;
-
- endX--;
- }
-
- output << "{" << startX << ", " << startY << ", " << endX+1 << ", " << endY << "}, // " << glyphid << endl;
- }
-
- output << "};" << endl << endl;
-
- output << "unsigned int " << filename << "_img[] = {" << endl;
-
- for(int y = 0; y < spritesheet->h; y++)
- {
- for(int x = 0; x < spritesheet->w; x+=stride)
- {
- unsigned int pixel = 0;
- for(int s = 0; s < stride; s++)
- {
- SDL_Color c = GetPixel(spritesheet, x+s, y);
-
- if(outputBpp == 8)
- {
- pixel += (unsigned char)(0.3 * c.r + 0.59 * c.g + 0.11 * c.b);
- if(s != 3) pixel = pixel << 8;
- }
- else if(outputBpp == 16)
- {
- c.r = c.r >> 3;
- c.g = c.g >> 2;
- c.b = c.b >> 3;
- pixel += (c.r << 11) | (c.g << 5) | c.b;
- if(s != 1) pixel = pixel << 16;
- }
- else
- pixel = (c.r << 16) | (c.g << 8) | c.b;
- }
- output << pixel << "u, ";
- }
- output << endl;
- }
-
- output << "};" << endl << endl;
-
- output << "orgfx_tileset " << filename << "_ts;" << endl << endl;
-
- output << "orgfx_bitmap_font init_" << filename << "_font(int spacing, int spacewidth)" << endl;
- output << "{" << endl;
- output << " int " << filename << "_surface = orgfxplus_init_surface(" << spritesheet->w << ", " << spritesheet->h << ", " << filename << "_img" << ");" << endl;
- output << " " << filename << "_ts = orgfx_make_tileset(" << filename << "_surface, " << filename << "_glyphs, 256);" << endl;
- output << " return orgfx_make_bitmap_font(&" << filename << "_ts, spacing, spacewidth);" << endl << endl;
- output << "}" << endl;
-
- output << "#endif // " << filename << "_H" << endl;
-
- output.close();
- SDL_FreeSurface( spritesheet );
-
- return 0;
-}
-
Index: sw/utils/cube.obj
===================================================================
--- sw/utils/cube.obj (revision 5)
+++ sw/utils/cube.obj (nonexistent)
@@ -1,33 +0,0 @@
-# cube.obj
-#
-
-g cube
-
-v 0.0 0.0 0.0
-v 0.0 0.0 1.0
-v 0.0 1.0 0.0
-v 0.0 1.0 1.0
-v 1.0 0.0 0.0
-v 1.0 0.0 1.0
-v 1.0 1.0 0.0
-v 1.0 1.0 1.0
-
-vn 0.0 0.0 1.0
-vn 0.0 0.0 -1.0
-vn 0.0 1.0 0.0
-vn 0.0 -1.0 0.0
-vn 1.0 0.0 0.0
-vn -1.0 0.0 0.0
-
-f 1//2 7//2 5//2
-f 1//2 3//2 7//2
-f 1//6 4//6 3//6
-f 1//6 2//6 4//6
-f 3//3 8//3 7//3
-f 3//3 4//3 8//3
-f 5//5 7//5 8//5
-f 5//5 8//5 6//5
-f 1//4 5//4 6//4
-f 1//4 6//4 2//4
-f 2//1 6//1 8//1
-f 2//1 8//1 4//1
Index: sw/utils/spritemaker.cpp
===================================================================
--- sw/utils/spritemaker.cpp (revision 5)
+++ sw/utils/spritemaker.cpp (nonexistent)
@@ -1,211 +0,0 @@
-/*
-Per Lenander 2008
-
-Aniconv tool:
--------------
-
-The tool utilize SDL/SDL_image for graphics conversion
-*/
-
-#include
-#include
-
-#define SCREEN_WIDTH 640
-#define SCREEN_HEIGHT 480
-#define SCREEN_DEPTH 32
-
-#include
-#include
-#include
-#include
-
-using namespace std;
-
-SDL_Surface *screen;
-
-int spriteW = 0;
-int spriteH = 0;
-
-/* Ordinary inits */
-int InitSDL(void)
-{
- if (SDL_Init(SDL_INIT_VIDEO) < 0)
- {
- cerr << "Unable to init SDL: " << SDL_GetError() << endl;
- return 1;
- }
-
- screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_HWSURFACE | SDL_DOUBLEBUF);
-
- if (!screen)
- {
- cerr << "Unable to set video: " << SDL_GetError() << endl;
- return 1;
- }
- // make sure SDL cleans up before exit
- atexit(SDL_Quit);
-
- return 0;
-};
-
-/* Loads the spritesheet (or any image, but this is the only thing it is used for) */
-SDL_Surface * LoadImage(std::string s)
-{
- SDL_Surface *loaded = NULL;
-
- loaded = IMG_Load(s.c_str());
-
- if(!loaded) return NULL;
-
- SDL_Surface *optimized = NULL;
-
- optimized = SDL_DisplayFormatAlpha(loaded);
-
- SDL_FreeSurface(loaded);
-
- if(!optimized) return NULL;
-
- return optimized;
-};
-
-SDL_Color GetPixel ( SDL_Surface* pSurface , int x , int y )
-{
- SDL_Color color ;
- Uint32 col = 0 ;
-
- //determine position
- char* pPosition = ( char* ) pSurface->pixels ;
-
- //offset by y
- pPosition += ( pSurface->pitch * y ) ;
-
- //offset by x
- pPosition += ( pSurface->format->BytesPerPixel * x ) ;
-
- //copy pixel data
- memcpy ( &col , pPosition , pSurface->format->BytesPerPixel ) ;
-
- //convert color
- SDL_GetRGB ( col , pSurface->format , &color.r , &color.g , &color.b ) ;
- return ( color ) ;
-}
-
-int main ( int argc, char** argv )
-{
- if( argc < 2 )
- {
- cout << "Usage: " << argv[0] << " filename. [bpp=16]" << endl;
- return 1;
- }
-
- if( InitSDL() )
- return 1;
- cout << "SDL successfully initialized." << endl;
-
- SDL_Surface *spritesheet = LoadImage( argv[1] );
- if( spritesheet == NULL )
- {
- cout << "Couldn't load " << argv[1] << "!" << endl;
- return 1;
- }
-
- /* Open an output file */
- string filename(argv[1]);
- filename += ".h";
- ofstream output(filename.c_str(),ofstream::out);
- if( !output )
- {
- cout << "Couldn't open output file!" << endl;
- return 1;
- }
-
- int outputBpp = 16;
- if(argc >= 3)
- {
- stringstream ss(argv[2]);
- ss >> outputBpp;
-
- if(outputBpp != 8 && outputBpp != 16 && outputBpp != 24 && outputBpp != 32)
- {
- cout << "Mode: '" << argv[2] << "' not supported, choose between 8, 16, 24, and 32" << endl;
- return 1;
- }
- else if(outputBpp == 8 && spritesheet->w % 4)
- {
- cout << "Mode: 8bpp requires the width to be divisible by 4!" << endl;
- return 1;
- }
- else if(outputBpp == 16 && spritesheet->w % 2)
- {
- cout << "Mode: 16bpp requires the width to be divisible by 2!" << endl;
- return 1;
- }
- }
-
- int stride = 1;
- if(outputBpp == 8)
- stride = 4;
- else if(outputBpp == 16)
- stride = 2;
-
- filename = filename.substr(0, filename.find('.'));
-
- output << "/* Sprite definition */" << endl << endl;
- output << "/* size: " << spritesheet->w << " * " << spritesheet->h << " at " << outputBpp << "BPP */" << endl << endl;
- output << "#ifndef " << filename << "_H" << endl;
- output << "#define " << filename << "_H" << endl << endl;
-
- output << "#include \"orgfx_plus.h\"" << endl << endl;
-
-
- output << "// This sprite can be loaded by calling:" << endl;
- output << "int init_" << filename << "_sprite();" << endl << endl;
-
- output << "// The return value is a loaded surface using the orgfxplus_init_surface method" << endl << endl;
-
- output << "unsigned int " << filename << "[] = {" << endl;
-
- for(int y = 0; y < spritesheet->h; y++)
- {
- for(int x = 0; x < spritesheet->w; x+=stride)
- {
- unsigned int pixel = 0;
- for(int s = 0; s < stride; s++)
- {
- SDL_Color c = GetPixel(spritesheet, x+s, y);
-
- if(outputBpp == 8)
- {
- pixel += (unsigned char)(0.3 * c.r + 0.59 * c.g + 0.11 * c.b);
- if(s != 3) pixel = pixel << 8;
- }
- else if(outputBpp == 16)
- {
- c.r = c.r >> 3;
- c.g = c.g >> 2;
- c.b = c.b >> 3;
- pixel += (c.r << 11) | (c.g << 5) | c.b;
- if(s != 1) pixel = pixel << 16;
- }
- else
- pixel = (c.r << 16) | (c.g << 8) | c.b;
- }
- output << pixel << "u, ";
- }
- output << endl;
- }
-
- output << "};" << endl << endl;
-
- output << "int init_" << filename << "_sprite()" << endl;
- output << "{" << endl;
- output << " return orgfxplus_init_surface(" << spritesheet->w << ", " << spritesheet->h << ", " << filename << ");" << endl;
- output << "}" << endl << endl;
-
- output << "#endif // " << filename << "_H" << endl;
-
- output.close();
- SDL_FreeSurface( spritesheet );
-
- return 0;
-}