OpenCores
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/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
- *








    - * 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 - -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
- *








    -   *                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 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 -#include -#include - -namespace p2t { - -// Inital triangle factor, seed triangle will extend 30% of -// PointSet width to both left and right. -const double kAlpha = 0.3; - -struct Point; -class Triangle; -struct Node; -struct Edge; -class AdvancingFront; - -class SweepContext { -public: - -/// Constructor -SweepContext(std::vector polyline); -/// Destructor -~SweepContext(); - -void set_head(Point* p1); - -Point* head(); - -void set_tail(Point* p1); - -Point* tail(); - -int point_count(); - -Node& LocateNode(Point& point); - -void RemoveNode(Node* node); - -void CreateAdvancingFront(std::vector nodes); - -/// Try to map a node to all sides of this triangle that don't have a neighbor -void MapTriangleToNodes(Triangle& t); - -void AddToMap(Triangle* triangle); - -Point* GetPoint(const int& index); - -Point* GetPoints(); - -void RemoveFromMap(Triangle* triangle); - -void AddHole(std::vector polyline); - -void AddPoint(Point* point); - -AdvancingFront* front(); - -void MeshClean(Triangle& triangle); - -std::vector GetTriangles(); -std::list GetMap(); - -std::vector edge_list; - -struct Basin { - Node* left_node; - Node* bottom_node; - Node* right_node; - double width; - bool left_highest; - - Basin() : left_node(NULL), bottom_node(NULL), right_node(NULL), width(0.0), left_highest(false) - { - } - - void Clear() - { - left_node = NULL; - bottom_node = NULL; - right_node = NULL; - width = 0.0; - left_highest = false; - } -}; - -struct EdgeEvent { - Edge* constrained_edge; - bool right; - - EdgeEvent() : constrained_edge(NULL), right(false) - { - } -}; - -Basin basin; -EdgeEvent edge_event; - -private: - -friend class Sweep; - -std::vector triangles_; -std::list map_; -std::vector points_; - -// Advancing front -AdvancingFront* front_; -// head point used with advancing front -Point* head_; -// tail point used with advancing front -Point* tail_; - -Node *af_head_, *af_middle_, *af_tail_; - -void InitTriangulation(); -void InitEdges(std::vector polyline); - -}; - -inline AdvancingFront* SweepContext::front() -{ - return front_; -} - -inline int SweepContext::point_count() -{ - return points_.size(); -} - -inline void SweepContext::set_head(Point* p1) -{ - head_ = p1; -} - -inline Point* SweepContext::head() -{ - return head_; -} - -inline void SweepContext::set_tail(Point* p1) -{ - tail_ = p1; -} - -inline Point* SweepContext::tail() -{ - return tail_; -} - -} - -#endif Index: sw/utils/fonter/poly2tri/sweep/cdt.cc =================================================================== --- sw/utils/fonter/poly2tri/sweep/cdt.cc (revision 5) +++ sw/utils/fonter/poly2tri/sweep/cdt.cc (nonexistent) @@ -1,72 +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 "cdt.h" - -namespace p2t { - -CDT::CDT(std::vector polyline) -{ - sweep_context_ = new SweepContext(polyline); - sweep_ = new Sweep; -} - -void CDT::AddHole(std::vector polyline) -{ - sweep_context_->AddHole(polyline); -} - -void CDT::AddPoint(Point* point) { - sweep_context_->AddPoint(point); -} - -void CDT::Triangulate() -{ - sweep_->Triangulate(*sweep_context_); -} - -std::vector CDT::GetTriangles() -{ - return sweep_context_->GetTriangles(); -} - -std::list CDT::GetMap() -{ - return sweep_context_->GetMap(); -} - -CDT::~CDT() -{ - delete sweep_context_; - delete sweep_; -} - -} - Index: sw/utils/fonter/poly2tri/sweep/cdt.h =================================================================== --- sw/utils/fonter/poly2tri/sweep/cdt.h (revision 5) +++ sw/utils/fonter/poly2tri/sweep/cdt.h (nonexistent) @@ -1,105 +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 CDT_H -#define CDT_H - -#include "advancing_front.h" -#include "sweep_context.h" -#include "sweep.h" - -/** - * - * @author Mason Green - * - */ - -namespace p2t { - -class CDT -{ -public: - - /** - * Constructor - add polyline with non repeating points - * - * @param polyline - */ - CDT(std::vector polyline); - - /** - * Destructor - clean up memory - */ - ~CDT(); - - /** - * Add a hole - * - * @param polyline - */ - void AddHole(std::vector polyline); - - /** - * Add a steiner point - * - * @param point - */ - void AddPoint(Point* point); - - /** - * Triangulate - do this AFTER you've added the polyline, holes, and Steiner points - */ - void Triangulate(); - - /** - * Get CDT triangles - */ - std::vector GetTriangles(); - - /** - * Get triangle map - */ - std::list GetMap(); - - private: - - /** - * Internals - */ - - SweepContext* sweep_context_; - Sweep* sweep_; - -}; - -} - -#endif Index: sw/utils/fonter/poly2tri/sweep/advancing_front.cc =================================================================== --- sw/utils/fonter/poly2tri/sweep/advancing_front.cc (revision 5) +++ sw/utils/fonter/poly2tri/sweep/advancing_front.cc (nonexistent) @@ -1,109 +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 "advancing_front.h" - -namespace p2t { - -AdvancingFront::AdvancingFront(Node& head, Node& tail) -{ - head_ = &head; - tail_ = &tail; - search_node_ = &head; -} - -Node* AdvancingFront::LocateNode(const double& x) -{ - Node* node = search_node_; - - if (x < node->value) { - while ((node = node->prev) != NULL) { - if (x >= node->value) { - search_node_ = node; - return node; - } - } - } else { - while ((node = node->next) != NULL) { - if (x < node->value) { - search_node_ = node->prev; - return node->prev; - } - } - } - return NULL; -} - -Node* AdvancingFront::FindSearchNode(const double& x) -{ - (void)x; // suppress compiler warnings "unused parameter 'x'" - // TODO: implement BST index - return search_node_; -} - -Node* AdvancingFront::LocatePoint(const Point* point) -{ - const double px = point->x; - Node* node = FindSearchNode(px); - const double nx = node->point->x; - - if (px == nx) { - if (point != node->point) { - // We might have two nodes with same x value for a short time - if (point == node->prev->point) { - node = node->prev; - } else if (point == node->next->point) { - node = node->next; - } else { - assert(0); - } - } - } else if (px < nx) { - while ((node = node->prev) != NULL) { - if (point == node->point) { - break; - } - } - } else { - while ((node = node->next) != NULL) { - if (point == node->point) - break; - } - } - if(node) search_node_ = node; - return node; -} - -AdvancingFront::~AdvancingFront() -{ -} - -} - Index: sw/utils/fonter/poly2tri/AUTHORS =================================================================== --- sw/utils/fonter/poly2tri/AUTHORS (revision 5) +++ sw/utils/fonter/poly2tri/AUTHORS (nonexistent) @@ -1,8 +0,0 @@ -Primary Contributors: - - Mason Green (C++, Python) - Thomas Åhlén (Java) - -Other Contributors: - - Index: sw/utils/fonter/main.cpp =================================================================== --- sw/utils/fonter/main.cpp (revision 5) +++ sw/utils/fonter/main.cpp (nonexistent) @@ -1,43 +0,0 @@ -#include -#include -#include -#include -#include FT_FREETYPE_H - -#include "ttfpoint.h" - -using namespace std; - -int main(int argc,char** argv) -{ - if( argc < 2 ) - { - cout << "Usage: " << argv[0] << " filename.ttf" << endl; - return 1; - } - - try - { - TTFPoint::InitFreeType(); - - /* Open an output file */ - string inFilename(argv[1]); - - TTFPoint points; - points.LoadFont(inFilename); - - points.GenerateWrites(false, L"ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖabcdefghijklmnopqrstuvwxyzåäö"); - - string fontname = inFilename.substr(0, inFilename.find('.')); - fontname += "_font"; - - points.WriteFontFile(fontname); - - return 0; - } - catch(int error) - { - cout << "Error code " << error << endl; - return 1; - } -} Index: sw/utils/fonter/build.sh =================================================================== --- sw/utils/fonter/build.sh (revision 5) +++ sw/utils/fonter/build.sh (nonexistent) @@ -1,16 +0,0 @@ -echo "Generate makefile --->" -qmake - -#echo "Cleaning ------------>" -#make clean - -echo "Building ------------>" -make - -echo "Running converter --->" -./fonter test.ttf - -echo "Exporting ----------->" -cp test_font.h ../../examples/bare/ - -echo "Done ---------------->" Index: sw/utils/fonter/ttfpoint.cpp =================================================================== --- sw/utils/fonter/ttfpoint.cpp (revision 5) +++ sw/utils/fonter/ttfpoint.cpp (nonexistent) @@ -1,707 +0,0 @@ -#include "ttfpoint.h" - -FT_Library TTFPoint::mLibrary; -FT_Error TTFPoint::mError; - -TTFPoint::TTFPoint() -{ -} - -void TTFPoint::InitFreeType() -{ - // intit freetype - mError = FT_Init_FreeType( &mLibrary ); - if(mError) - { - cout << "Error loading freetype" << endl; - throw mError; - } -} - -void TTFPoint::LoadFont(string filename) -{ - // open font - mError = FT_New_Face( mLibrary,filename.c_str(),0,&mFace ); - if(mError) - { - cout << "Error loading font" << endl; - throw mError; - } - - - // set the fontSize - FT_F26Dot6 font_size = 100; - mError = FT_Set_Char_Size( mFace, font_size, font_size, 72, 72 ); - if(mError) - { - cout << "error setting char size" << endl; - throw mError; - } - - cout << "Font: " << filename << " Loaded with " << mFace->num_glyphs << " Glyphs " << endl; -} - -int BezierWrite::FixArea() -{ - //float area = (p1.x - p0.x)*(p2.y-p0.y) - (p2.x-p0.x)*(p1.y-p0.y); - float area = (control.x - start.x)*(end.y-start.y) - (end.x-start.x)*(control.y-start.y); - if(area < 0) - { - // outside - fillInside = 0; - swap(start, end); - return 1; - } - else - { - // inside - fillInside = 1; - return 0; - } -} - -FT_Outline TTFPoint::LoadGlyphOutline(int character, FT_Matrix &matrix, FT_Vector &pen) -{ - FT_UInt glyph_index = FT_Get_Char_Index( mFace, character ); - cout << "glyph; - FT_Outline outline = slot->outline; - cout << " and " << outline.n_contours << " outlines and " << outline.n_points << " points. "; - - return outline; -} - -Glyph TTFPoint::BuildGlyph(deque &untangledPointList, int character) -{ - Glyph current_glyph; - current_glyph.index = character; - current_glyph.advance_x = mFace->glyph->advance.x; - - int firstObject = 0; - for(unsigned int j=0; j" << endl; - throw 1; - } - - FT_Matrix matrix; // transformation matrix - FT_Vector pen; // untransformed origin - - // set up matrix - matrix.xx = (FT_Fixed)(1 * 0x10000L ); - matrix.xy = (FT_Fixed)(0 * 0x10000L ); - matrix.yx = (FT_Fixed)(0 * 0x10000L ); - matrix.yy = (FT_Fixed)(-1 * 0x10000L ); - - // the pen position in 26.6 cartesian space coordinates; - // start at (300,200) relative to the upper left corner - pen.x = 0; - pen.y = 0; - - //save selected characters - for(unsigned int i=0; i untangledPointList = UntangleGlyphPoints(outline); - - cout << " Untangled: " << untangledPointList.size() << " from " << outline.n_points << " points>" << endl; - - mGlyphs.push_back(BuildGlyph(untangledPointList, charmap[i])); - } -} - -deque TTFPoint::UntangleGlyphPoints(FT_Outline outline) -{ - deque untangledPointList; - bool last_off = false; - - BPoint lastPoint(-60000, -60000); - - for(int i=0; i TTFPoint::GetShapePoints(int i, vector< vector > &shapes) -{ - vector polyline; - vector &shape = shapes[i]; - for(unsigned int j = 0; j < shape.size(); j++) - polyline.push_back(new Point(shape[j].x, shape[j].y)); - return polyline; -} - -deque TTFPoint::Triangulate(deque &untangledPointList) -{ - vector polyline; - vector< vector > shapes; - deque triangle_writes; - - // add all points to polyline - bool empty = true; - for(unsigned int i=0; i< untangledPointList.size(); i++) - { - if(untangledPointList[i].internalControlPoint == 1 || untangledPointList[i].onLine) - { - polyline.push_back(BPoint(untangledPointList[i].x, untangledPointList[i].y)); - empty = false; - } - if(untangledPointList[i].endOfContour == 1 && i > 0) - { - shapes.push_back(polyline); - polyline.clear(); - empty = true; - } - } - if(empty == false) - { - shapes.push_back(polyline); - } - - if(!shapes.size()) - return triangle_writes; - - CDT* cdt = new CDT(GetShapePoints(0, shapes)); - cdt->Triangulate(); - int beginningOfShape = 0; - - cout << "Triangulating " << shapes.size() << " contours..." << endl; - - for(unsigned int i=1; i triangles = cdt->GetTriangles(); - cout << "Triangles: " << triangles.size() << endl; - - // Pick the first point in the shape - BPoint firstPoint = shapes[i][0]; - float x = firstPoint.x; - float y = firstPoint.y; - - bool isHole = false; - - // Check this point against all triangles - for(unsigned int j=0; jGetPoint(0); - Point *p1 = triangles[j]->PointCCW(*p0); // get clockwise next point after point - Point *p2 = triangles[j]->PointCCW(*p1); // get clockwise next point after point - - // Calculate edges - float e0 = -(p2->y-p1->y)*(x-p1->x)+(p2->x-p1->x)*(y-p1->y); - float e1 = -(p0->y-p2->y)*(x-p2->x)+(p0->x-p2->x)*(y-p2->y); - float e2 = -(p1->y-p0->y)*(x-p0->x)+(p1->x-p0->x)*(y-p0->y); - - // If the point is inside the triangle, this must be a hole - - if(e0 >= 0 && e1 >= 0 && e2 >= 0) - { - isHole = true; - break; - } - } - - // If this is a hole, we need to add it and start over - if(isHole) - { - cout << "Found hole!" << endl; - delete cdt; - cdt = new CDT(GetShapePoints(beginningOfShape, shapes)); - for(unsigned int j = beginningOfShape + 1; j <= i; j++) - cdt->AddHole(GetShapePoints(j, shapes)); - cdt->Triangulate(); - } - // If this isn't a hole, it is a new shape - // Print the old one to writes, then create a new one - else - { - cout << "Writing shape with " << triangles.size() << " triangles!" << endl; - - for(unsigned int j=0; jGetPoint(0); - Point *p1 = triangles[j]->PointCCW(*p0); // get clockwise next point after point - Point *p2 = triangles[j]->PointCCW(*p1); // get clockwise next point after point - - triangle_writes.push_back(TriangleWrite(BPoint(p0->x, p0->y), - BPoint(p1->x, p1->y), - BPoint(p2->x, p2->y))); - } - - delete cdt; - cdt = new CDT(GetShapePoints(i, shapes)); - cdt->Triangulate(); - beginningOfShape = i; - } - - } - - - vector triangles = cdt->GetTriangles(); - cout << "Writing shape with " << triangles.size() << " triangles!" << endl; - - // Write the final shape - for(unsigned int j=0; jGetPoint(0); - Point *p1 = triangles[j]->PointCCW(*p0); // get clockwise next point after point - Point *p2 = triangles[j]->PointCCW(*p1); // get clockwise next point after point - - triangle_writes.push_back(TriangleWrite(BPoint(p0->x, p0->y), - BPoint(p1->x, p1->y), - BPoint(p2->x, p2->y))); - } - - - - /* - - for(unsigned int i=1; iAddHole(shapes[i]); - } - - cdt->Triangulate(); - triangles = cdt->GetTriangles(); - cout << "Triangles: " << triangles.size() << endl; - - for(unsigned int i=0; iGetPoint(0); - Point *p1 = triangles[i]->PointCCW(*p0); // get clockwise next point after point - Point *p2 = triangles[i]->PointCCW(*p1); // get clockwise next point after point - - triangle_writes.push_back(TriangleWrite(BPoint(p0->x, p0->y), - BPoint(p1->x, p1->y), - BPoint(p2->x, p2->y))); - } - - */ - - delete cdt; - return triangle_writes; -} Index: sw/utils/meshmaker.cpp =================================================================== --- sw/utils/meshmaker.cpp (revision 5) +++ sw/utils/meshmaker.cpp (nonexistent) @@ -1,286 +0,0 @@ -/* -Per Lenander 2012 - -Meshconv tool: -------------- -Converts obj files into a .h file -*/ - -#include -#include -#include -#include -#include -#include -#include -#include - -#define GFX_PIXEL_16(R,G,B) (((R >> 3) << 11) | ((G >> 2) << 5) | (B>>3)) - -using namespace std; - -class Point -{ -public: - Point(float X = 0, float Y = 0, float Z = 0) - : x(X), y(Y), z(Z) - {} - - float x, y, z; -}; - -class Face -{ -public: - Face(int P1 = 0, int P2 = 0, int P3 = 0, - unsigned int Color1 = 0, unsigned int Color2 = 0, unsigned int Color3 = 0) - : v1(P1), v2(P2), v3(P3), color1(Color1), color2(Color2), color3(Color3) - { - vt1 = vt2 = vt3 = 0; - vn1 = vn2 = vn3 = 0; - } - - void ParseLine(stringstream& ss) - { - // Parse vertex, texture and normal coordinates for p1 - ss >> v1; - if(ss.peek() == '/') - { - ss.ignore(); - - if(ss.peek() != '/') - ss >> vt1; - - if(ss.peek() == '/') - { - ss.ignore(); - ss >> vn1; - } - } - - // Parse vertex, texture and normal coordinates for p2 - ss >> v2; - if(ss.peek() == '/') - { - ss.ignore(); - - if(ss.peek() != '/') - ss >> vt2; - - if(ss.peek() == '/') - { - ss.ignore(); - ss >> vn2; - } - } - - // Parse vertex, texture and normal coordinates for p3 - ss >> v3; - if(ss.peek() == '/') - { - ss.ignore(); - - if(ss.peek() != '/') - ss >> vt3; - - if(ss.peek() == '/') - { - ss.ignore(); - ss >> vn3; - } - } - - unsigned char r, g, b; - // Temporary - r = rand() % 256; - g = rand() % 256; - b = rand() % 256; - - color1 = GFX_PIXEL_16(r,g,b); // TODO: color - - r = rand() % 256; - g = rand() % 256; - b = rand() % 256; - - color2 = GFX_PIXEL_16(r,g,b); // TODO: color - - r = rand() % 256; - g = rand() % 256; - b = rand() % 256; - - color3 = GFX_PIXEL_16(r,g,b); // TODO: color - - // .obj uses 1 indexed, reduce - v1--; - v2--; - v3--; - - vt1--; - vt2--; - vt3--; - - vn1--; - vn2--; - vn3--; - } - - int v1, v2, v3; // points - int vt1, vt2, vt3; // texture coords (uvs) - int vn1, vn2, vn3; // normals - unsigned int color1, color2, color3; -}; - -int main ( int argc, char** argv ) -{ - if( argc < 2 ) - { - cout << "Usage: " << argv[0] << " filename.obj [bpp=16]" << endl; - return 1; - } - - srand(time(NULL)); - - string filename(argv[1]); - - ifstream input; - input.open(filename.c_str(), ifstream::in); - - if( !input ) - { - cout << "Couldn't load " << filename << "!" << endl; - return 1; - } - - int outputBpp = 16; - if(argc >= 3) - { - stringstream ss(argv[2]); - ss >> outputBpp; - - if(outputBpp != 8 && outputBpp != 16 && outputBpp != 32) - { - cout << "Mode: '" << argv[2] << "' not supported, choose between 8, 16 and 32" << endl; - return 1; - } - } - - // Load mesh into internal structure - vector faces; - vector verts; - vector uvs; - vector normals; - - // Parse obj file - while(input) - { - char buf[1024]; - input.getline(buf, 1024); - string s(buf); - - if(s.empty()) - continue; - - stringstream ss(s); - string type; - ss >> type; - - if(type[0] == '#') - continue; - else if(type == "v") // Vertex coordinates: x y z [w] (discarded) - { - Point p; - ss >> p.x >> p.y >> p.z; - verts.push_back(p); - } - else if(type == "vt") // Texture coordinates: u [v] [w] - { - Point t; - ss >> t.x >> t.y >> t.z; - uvs.push_back(t); - } - else if(type == "vn") // Normals: x y z, does not have to be unit - { - Point n; - ss >> n.x >> n.y >> n.z; - normals.push_back(n); - } - else if(type == "f") // Face - { - Face f; - f.ParseLine(ss); - faces.push_back(f); - } - } - - // Done loading - input.close(); - - /* Open an output file */ - filename += ".h"; - ofstream output(filename.c_str(),ofstream::out); - if( !output ) - { - cout << "Couldn't open output file!" << endl; - return 1; - } - - // ------------------------- // - // Write mesh to output file // - // ------------------------- // - filename = filename.substr(0, filename.find('.')); - - output << "/* Mesh definition */" << endl << endl; - output << "#ifndef " << filename << "_H" << endl; - output << "#define " << filename << "_H" << endl; - - output << "#include \"orgfx_3d.h\"" << endl << endl; - - // Init function - output << "// Call this function to get an initialized mesh:" << endl; - output << "orgfx_mesh init_" << filename << "_mesh();" << endl << endl; - - // define the number of faces, verts and uvs - output << "unsigned int " << filename << "_nverts = " << verts.size() << ";" << endl << endl; - output << "unsigned int " << filename << "_nuvs = " << uvs.size() << ";" << endl << endl; - output << "unsigned int " << filename << "_nfaces = " << faces.size() << ";" << endl << endl; - - // define all verts - output << "orgfx_point3 " << filename << "_verts[] = {" << endl; - for(unsigned int i = 0; i < verts.size(); i++) - output << "{" << verts[i].x << ", " << verts[i].y << ", " << verts[i].z << "}," << endl; - output << "};" << endl << endl; - - // define all uvs - output << "orgfx_point2 " << filename << "_uvs[] = {" << endl; - for(unsigned int i = 0; i < uvs.size(); i++) - output << "{" << uvs[i].x << ", " << uvs[i].y << "}," << endl; - output << "};" << endl << endl; - - // define all faces - output << "orgfx_face " << filename << "_faces[] = {" << endl; - for(unsigned int i = 0; i < faces.size(); i++) - { - const Face& f = faces[i]; - output << "{" << f.v1 << "u, " << f.v2 << "u, " << f.v3 << "u, " - << f.vt1 << "u, " << f.vt2 << "u, " << f.vt3 << "u, " - << f.color1 << "u, " << f.color2 << "u, " << f.color3 << "u}," << endl; - } - output << "};" << endl << endl; - - output << "orgfx_mesh init_" << filename << "_mesh()" << endl; - output << "{" << endl; - output << " return orgfx3d_make_mesh(" << filename << "_faces," << endl - << " " << filename << "_nfaces," << endl - << " " << filename << "_verts," << endl - << " " << filename << "_nverts," << endl - << " " << filename << "_uvs," << endl - << " " << filename << "_nuvs);" << endl; - output << "}" << endl << endl; - - output << "#endif // " << filename << "_H" << endl; - - // done! - output.close(); - - return 0; -} Index: sw/utils/Makefile =================================================================== --- sw/utils/Makefile (revision 5) +++ sw/utils/Makefile (nonexistent) @@ -1,4 +0,0 @@ -all: - g++ -Wall spritemaker.cpp -lSDL -lSDL_image -o spritemaker - g++ -Wall bitfontmaker.cpp -lSDL -lSDL_image -o bitfontmaker - g++ -Wall meshmaker.cpp -o meshmaker Index: sw/utils/setregs.cpp =================================================================== --- sw/utils/setregs.cpp (revision 5) +++ sw/utils/setregs.cpp (nonexistent) @@ -1,74 +0,0 @@ -/* -this script sets the registers in the driver, based on the gfx_params. -*/ - -#include -#include -#include -using namespace std; - -struct param -{ -string name; -string value; -} - -class regger -{ -public: - SetDriverToRTL(); - SetRTLToDriver(); - ShowRegs(); - ScanFiles(); -private: - deque rtl_params; - deque driver_params; -} - -int menu() -{ - int option = 0; - - cout << "<------------- Menu ------------------->" << endl - << "1. Set Driver regs to RTL & Bench values" << endl - << "2. Set RTL & Bench regs to Driver values" << endl - << "3. View Regs" << endl; - while(option < 1 || option > 3) - { - cin >> option; - } - - return option; -} - -void SetDriverToRTL() -{ - -} - -void SetRTLToDriver() -{ - -} - -void ShowRegs() -{ - -} - -int main() -{ - int option = menu(); - - switch(option) - { - case 1: - break; - case 2: - break; - case 3: - break; - default: - break; - } -} Index: sw/utils/interptest.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: sw/utils/interptest.bmp =================================================================== --- sw/utils/interptest.bmp (revision 5) +++ sw/utils/interptest.bmp (nonexistent)
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; -}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.