Ignore:
Timestamp:
Jan 17, 2013, 9:49:29 PM (7 years ago)
Author:
touky
Message:

Added CSG v0.001a : not optimized, too much operation makes it slow. triangle count is not optimized.
Useage : "...[.... csg*]" equals "current mesh -CSG- the mesh in the braces".
Keywords : CsgUnion<csgu>, CsgSubstract<csgs>, CsgAnd<csga>, CsgXor<csgx>
TODO : cleanup useless code.
TODO : Some bugs are still present, some face that disappear should not.
TODO : Correct epsilon useage (see geometry files).
TODO : Coplanar face are not handled -at all-.
TODO : Vertex count goes through the roof in case of a Xor.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/generated/easymesh-scanner.cpp

    r2183 r2226  
    331331        (yy_c_buf_p) = yy_cp;
    332332
    333 #define YY_NUM_RULES 46
    334 #define YY_END_OF_BUFFER 47
     333#define YY_NUM_RULES 50
     334#define YY_END_OF_BUFFER 51
    335335/* This struct is not used in this scanner,
    336336   but its presence is necessary. */
     
    340340        flex_int32_t yy_nxt;
    341341        };
    342 static yyconst flex_int16_t yy_accept[75] =
     342static yyconst flex_int16_t yy_accept[81] =
    343343    {   0,
    344         0,    0,   47,   45,   44,   43,   45,   45,   40,   45,
    345        39,   41,   42,   45,   45,   45,   45,   17,    7,    0,
    346         0,   39,   39,    0,   22,   23,   26,    0,    0,   29,
    347        30,   33,    3,   19,   20,   21,    8,    9,   10,    1,
    348        14,   15,   16,    0,    0,    4,    5,    6,    0,    0,
    349        39,    0,   25,   27,    0,    0,    0,   34,    2,   11,
    350        12,   13,   18,   35,   24,   28,   31,   32,   36,    0,
    351        37,    0,   38,    0
     344        0,    0,   51,   49,   48,   47,   49,   49,   44,   49,
     345       43,   45,   46,   49,   49,   49,   49,   17,    7,    0,
     346        0,   43,   43,    0,   26,   27,   30,    0,    0,   33,
     347       34,   37,    3,    0,   19,   20,   21,    8,    9,   10,
     348        1,   14,   15,   16,    0,    0,    4,    5,    6,    0,
     349        0,   43,    0,   29,   31,    0,    0,    0,   38,    0,
     350        2,   11,   12,   13,   18,   39,   28,   32,   35,   36,
     351       24,   23,   22,   25,   40,    0,   41,    0,   42,    0
    352352    } ;
    353353
     
    366366
    367367       17,   18,   19,   20,    1,    1,    1,    1,   21,    1,
    368        22,   23,   24,   25,   26,   27,    1,    1,   28,   29,
    369        30,   31,    1,    1,    1,    1,    1,    1,    1,    1,
     368       22,   23,   24,   25,   26,   27,   28,    1,   29,   30,
     369       31,   32,    1,    1,    1,    1,    1,    1,    1,    1,
    370370        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    371371        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     
    384384    } ;
    385385
    386 static yyconst flex_int32_t yy_meta[32] =
     386static yyconst flex_int32_t yy_meta[33] =
    387387    {   0,
    388388        1,    1,    1,    1,    1,    1,    1,    2,    2,    2,
    389389        1,    1,    2,    2,    2,    2,    2,    2,    1,    1,
    390390        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    391         1
     391        1,    1
    392392    } ;
    393393
    394 static yyconst flex_int16_t yy_base[83] =
     394static yyconst flex_int16_t yy_base[89] =
    395395    {   0,
    396         0,    0,  102,  103,  103,  103,    0,   25,   27,   93,
    397        29,  103,  103,   33,   80,   11,   14,   23,   48,    0,
    398        91,   48,   54,   61,  103,   57,  103,   72,   82,  103,
    399        57,   74,  103,  103,  103,  103,  103,  103,  103,   81,
    400       103,  103,  103,   52,   66,  103,  103,  103,    0,   85,
    401        84,   68,  103,  103,   76,   75,   68,  103,  103,  103,
    402       103,  103,  103,    0,  103,  103,  103,  103,    0,    0,
    403         0,    0,  103,  103,   85,   84,   83,   82,   73,   71,
    404        66,   61
     396        0,    0,  109,  110,  110,  110,    0,   26,   28,  100,
     397       30,  110,  110,   34,   19,   11,   23,   41,   61,    0,
     398       99,   58,   59,   72,  110,   44,  110,   80,   90,  110,
     399       47,   82,  110,   84,  110,  110,  110,  110,  110,  110,
     400       88,  110,  110,  110,   51,   71,  110,  110,  110,    0,
     401       90,   88,   72,  110,  110,   80,   76,   69,  110,   71,
     402      110,  110,  110,  110,  110,    0,  110,  110,  110,  110,
     403      110,  110,  110,  110,    0,    0,    0,    0,  110,  110,
     404       86,   84,   83,   77,   62,   57,   44,   42
    405405    } ;
    406406
    407 static yyconst flex_int16_t yy_def[83] =
     407static yyconst flex_int16_t yy_def[89] =
    408408    {   0,
    409        74,    1,   74,   74,   74,   74,   75,   74,   74,   74,
    410        74,   74,   74,   74,   74,   74,   74,   74,   74,   76,
    411        74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
    412        74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
    413        74,   74,   74,   74,   74,   74,   74,   74,   77,   74,
    414        74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
    415        74,   74,   74,   78,   74,   74,   74,   74,   79,   80,
    416        81,   82,   74,    0,   74,   74,   74,   74,   74,   74,
    417        74,   74
     409       80,    1,   80,   80,   80,   80,   81,   80,   80,   80,
     410       80,   80,   80,   80,   80,   80,   80,   80,   80,   82,
     411       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
     412       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
     413       80,   80,   80,   80,   80,   80,   80,   80,   80,   83,
     414       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
     415       80,   80,   80,   80,   80,   84,   80,   80,   80,   80,
     416       80,   80,   80,   80,   85,   86,   87,   88,   80,    0,
     417       80,   80,   80,   80,   80,   80,   80,   80
    418418    } ;
    419419
    420 static yyconst flex_int16_t yy_nxt[135] =
     420static yyconst flex_int16_t yy_nxt[143] =
    421421    {   0,
    422422        4,    5,    6,    7,    8,    9,   10,   11,    4,    4,
    423423       12,   13,   14,    4,   15,    4,    4,    4,    4,    4,
    424424       16,    4,    4,    4,   17,   18,   19,    4,    4,    4,
    425         4,   21,   22,   21,   22,   21,   22,   40,   24,   34,
    426        35,   36,   37,   38,   39,   24,   25,   26,   27,   28,
    427        29,   41,   42,   43,   21,   22,   30,   24,   31,   32,
    428        44,   23,   73,   24,   24,   50,   50,   72,   51,   52,
    429        24,   56,   71,   45,   70,   53,   46,   47,   48,   57,
    430        60,   61,   62,   69,   64,   49,   20,   68,   67,   66,
    431        65,   51,   51,   63,   59,   58,   55,   54,   23,   33,
    432 
    433        23,   74,    3,   74,   74,   74,   74,   74,   74,   74,
    434        74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
    435        74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
    436        74,   74,   74,   74
     425        4,    4,   21,   22,   21,   22,   21,   22,   33,   24,
     426       35,   36,   37,   79,   34,   78,   24,   25,   26,   27,
     427       28,   29,   38,   39,   40,   41,   53,   30,   77,   31,
     428       32,   57,   54,   76,   21,   22,   23,   24,   24,   58,
     429       42,   43,   44,   45,   24,   24,   51,   51,   75,   52,
     430       62,   63,   64,   71,   66,   50,   46,   20,   70,   69,
     431       47,   48,   49,   68,   67,   52,   72,   52,   73,   65,
     432
     433       74,   61,   60,   59,   56,   55,   23,   23,   80,    3,
     434       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
     435       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
     436       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
     437       80,   80
    437438    } ;
    438439
    439 static yyconst flex_int16_t yy_chk[135] =
     440static yyconst flex_int16_t yy_chk[143] =
    440441    {   0,
    441442        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    442443        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    443444        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    444         1,    8,    8,    9,    9,   11,   11,   18,   11,   16,
    445        16,   16,   17,   17,   17,   11,   14,   14,   14,   14,
    446        14,   18,   18,   18,   22,   22,   14,   22,   14,   14,
    447        19,   23,   82,   23,   22,   24,   24,   81,   24,   26,
    448        23,   31,   80,   19,   79,   26,   19,   19,   19,   31,
    449        44,   44,   44,   78,   77,   76,   75,   57,   56,   55,
    450        52,   51,   50,   45,   40,   32,   29,   28,   21,   15,
    451 
    452        10,    3,   74,   74,   74,   74,   74,   74,   74,   74,
    453        74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
    454        74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
    455        74,   74,   74,   74
     445        1,    1,    8,    8,    9,    9,   11,   11,   15,   11,
     446       16,   16,   16,   88,   15,   87,   11,   14,   14,   14,
     447       14,   14,   17,   17,   17,   18,   26,   14,   86,   14,
     448       14,   31,   26,   85,   22,   22,   23,   22,   23,   31,
     449       18,   18,   18,   19,   22,   23,   24,   24,   84,   24,
     450       45,   45,   45,   60,   83,   82,   19,   81,   58,   57,
     451       19,   19,   19,   56,   53,   52,   60,   51,   60,   46,
     452
     453       60,   41,   34,   32,   29,   28,   21,   10,    3,   80,
     454       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
     455       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
     456       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
     457       80,   80
    456458    } ;
    457459
     
    468470// Lol Engine
    469471//
    470 // Copyright: (c) 2010-2012 Sam Hocevar <sam@hocevar.net>
    471 //            (c) 2009-2012 Cédric Lecacheur <jordx@free.fr>
    472 //            (c) 2009-2012 Benjamin Huet <huet.benjamin@gmail.com>
     472// Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net>
     473//            (c) 2009-2013 Cédric Lecacheur <jordx@free.fr>
     474//            (c) 2009-2013 Benjamin "Touky" Huet <huet.benjamin@gmail.com>
    473475//   This program is free software; you can redistribute it and/or
    474476//   modify it under the terms of the Do What The Fuck You Want To
     
    502504#define YY_NO_UNISTD_H
    503505#define YY_USER_ACTION yylloc->columns(yyleng);
    504 #line 505 "generated/easymesh-scanner.cpp"
     506#line 507 "generated/easymesh-scanner.cpp"
    505507
    506508#define INITIAL 0
     
    615617
    616618
    617 #line 618 "generated/easymesh-scanner.cpp"
     619#line 620 "generated/easymesh-scanner.cpp"
    618620
    619621        if ( !(yy_init) )
     
    668670                                {
    669671                                yy_current_state = (int) yy_def[yy_current_state];
    670                                 if ( yy_current_state >= 75 )
     672                                if ( yy_current_state >= 81 )
    671673                                        yy_c = yy_meta[(unsigned int) yy_c];
    672674                                }
     
    674676                        ++yy_cp;
    675677                        }
    676                 while ( yy_current_state != 74 );
     678                while ( yy_current_state != 80 );
    677679                yy_cp = (yy_last_accepting_cpos);
    678680                yy_current_state = (yy_last_accepting_state);
     
    802804YY_RULE_SETUP
    803805#line 74 "easymesh/easymesh-scanner.l"
     806{ return token::T_CSGUNION; }
     807        YY_BREAK
     808case 23:
     809YY_RULE_SETUP
     810#line 75 "easymesh/easymesh-scanner.l"
     811{ return token::T_CSGSUBSTRACT; }
     812        YY_BREAK
     813case 24:
     814YY_RULE_SETUP
     815#line 76 "easymesh/easymesh-scanner.l"
     816{ return token::T_CSGAND; }
     817        YY_BREAK
     818case 25:
     819YY_RULE_SETUP
     820#line 77 "easymesh/easymesh-scanner.l"
     821{ return token::T_CSGXOR; }
     822        YY_BREAK
     823case 26:
     824YY_RULE_SETUP
     825#line 79 "easymesh/easymesh-scanner.l"
    804826{ return token::T_BOX; }
    805827        YY_BREAK
    806 case 23:
    807 YY_RULE_SETUP
    808 #line 75 "easymesh/easymesh-scanner.l"
     828case 27:
     829YY_RULE_SETUP
     830#line 80 "easymesh/easymesh-scanner.l"
    809831{ return token::T_CYLINDER; }
    810832        YY_BREAK
    811 case 24:
    812 YY_RULE_SETUP
    813 #line 76 "easymesh/easymesh-scanner.l"
     833case 28:
     834YY_RULE_SETUP
     835#line 81 "easymesh/easymesh-scanner.l"
    814836{ return token::T_CAPSULE; }
    815837        YY_BREAK
    816 case 25:
    817 YY_RULE_SETUP
    818 #line 77 "easymesh/easymesh-scanner.l"
     838case 29:
     839YY_RULE_SETUP
     840#line 82 "easymesh/easymesh-scanner.l"
    819841{ return token::T_COG; }
    820842        YY_BREAK
    821 case 26:
    822 YY_RULE_SETUP
    823 #line 78 "easymesh/easymesh-scanner.l"
     843case 30:
     844YY_RULE_SETUP
     845#line 83 "easymesh/easymesh-scanner.l"
    824846{ return token::T_DISC; }
    825847        YY_BREAK
    826 case 27:
    827 YY_RULE_SETUP
    828 #line 79 "easymesh/easymesh-scanner.l"
     848case 31:
     849YY_RULE_SETUP
     850#line 84 "easymesh/easymesh-scanner.l"
    829851{ return token::T_EXPANDEDSTAR; }
    830852        YY_BREAK
    831 case 28:
    832 YY_RULE_SETUP
    833 #line 80 "easymesh/easymesh-scanner.l"
     853case 32:
     854YY_RULE_SETUP
     855#line 85 "easymesh/easymesh-scanner.l"
    834856{ return token::T_FLATCHAMFBOX; }
    835857        YY_BREAK
    836 case 29:
    837 YY_RULE_SETUP
    838 #line 81 "easymesh/easymesh-scanner.l"
     858case 33:
     859YY_RULE_SETUP
     860#line 86 "easymesh/easymesh-scanner.l"
    839861{ return token::T_QUAD; }
    840862        YY_BREAK
    841 case 30:
    842 YY_RULE_SETUP
    843 #line 82 "easymesh/easymesh-scanner.l"
     863case 34:
     864YY_RULE_SETUP
     865#line 87 "easymesh/easymesh-scanner.l"
    844866{ return token::T_STAR; }
    845867        YY_BREAK
    846 case 31:
    847 YY_RULE_SETUP
    848 #line 83 "easymesh/easymesh-scanner.l"
     868case 35:
     869YY_RULE_SETUP
     870#line 88 "easymesh/easymesh-scanner.l"
    849871{ return token::T_SMOOTHCHAMFBOX; }
    850872        YY_BREAK
    851 case 32:
    852 YY_RULE_SETUP
    853 #line 84 "easymesh/easymesh-scanner.l"
     873case 36:
     874YY_RULE_SETUP
     875#line 89 "easymesh/easymesh-scanner.l"
    854876{ return token::T_SPHERE; }
    855877        YY_BREAK
    856 case 33:
    857 YY_RULE_SETUP
    858 #line 85 "easymesh/easymesh-scanner.l"
     878case 37:
     879YY_RULE_SETUP
     880#line 90 "easymesh/easymesh-scanner.l"
    859881{ return token::T_TRIANGLE; }
    860882        YY_BREAK
    861 case 34:
    862 YY_RULE_SETUP
    863 #line 86 "easymesh/easymesh-scanner.l"
     883case 38:
     884YY_RULE_SETUP
     885#line 91 "easymesh/easymesh-scanner.l"
    864886{ return token::T_TORUS; }
    865887        YY_BREAK
    866 case 35:
    867 YY_RULE_SETUP
    868 #line 88 "easymesh/easymesh-scanner.l"
     888case 39:
     889YY_RULE_SETUP
     890#line 93 "easymesh/easymesh-scanner.l"
    869891{
    870892        uint32_t tmp = std::strtol(yytext + 1, NULL, 16);
     
    875897        return token::COLOR; }
    876898        YY_BREAK
    877 case 36:
    878 YY_RULE_SETUP
    879 #line 95 "easymesh/easymesh-scanner.l"
     899case 40:
     900YY_RULE_SETUP
     901#line 100 "easymesh/easymesh-scanner.l"
    880902{
    881903        uint32_t tmp = std::strtol(yytext + 1, NULL, 16);
     
    886908        return token::COLOR; }
    887909        YY_BREAK
    888 case 37:
    889 YY_RULE_SETUP
    890 #line 102 "easymesh/easymesh-scanner.l"
     910case 41:
     911YY_RULE_SETUP
     912#line 107 "easymesh/easymesh-scanner.l"
    891913{
    892914        yylval->u32val = 0xffu
     
    894916        return token::COLOR; }
    895917        YY_BREAK
    896 case 38:
    897 YY_RULE_SETUP
    898 #line 106 "easymesh/easymesh-scanner.l"
     918case 42:
     919YY_RULE_SETUP
     920#line 111 "easymesh/easymesh-scanner.l"
    899921{
    900922        yylval->u32val = (uint32_t)std::strtol(yytext + 1, NULL, 16);
    901923        return token::COLOR; }
    902924        YY_BREAK
    903 case 39:
    904 YY_RULE_SETUP
    905 #line 109 "easymesh/easymesh-scanner.l"
     925case 43:
     926YY_RULE_SETUP
     927#line 114 "easymesh/easymesh-scanner.l"
    906928{
    907929        yylval->fval = std::atof(yytext); return token::NUMBER; }
    908930        YY_BREAK
    909 case 40:
    910 YY_RULE_SETUP
    911 #line 111 "easymesh/easymesh-scanner.l"
     931case 44:
     932YY_RULE_SETUP
     933#line 116 "easymesh/easymesh-scanner.l"
    912934{ return token_type('-'); }
    913935        YY_BREAK
    914 case 41:
    915 YY_RULE_SETUP
    916 #line 112 "easymesh/easymesh-scanner.l"
     936case 45:
     937YY_RULE_SETUP
     938#line 117 "easymesh/easymesh-scanner.l"
    917939{ return token_type('['); }
    918940        YY_BREAK
    919 case 42:
    920 YY_RULE_SETUP
    921 #line 113 "easymesh/easymesh-scanner.l"
     941case 46:
     942YY_RULE_SETUP
     943#line 118 "easymesh/easymesh-scanner.l"
    922944{ return token_type(']'); }
    923945        YY_BREAK
    924 case 43:
    925 YY_RULE_SETUP
    926 #line 114 "easymesh/easymesh-scanner.l"
     946case 47:
     947YY_RULE_SETUP
     948#line 119 "easymesh/easymesh-scanner.l"
    927949{ /* ignore this */ }
    928950        YY_BREAK
    929 case 44:
    930 /* rule 44 can match eol */
    931 YY_RULE_SETUP
    932 #line 115 "easymesh/easymesh-scanner.l"
     951case 48:
     952/* rule 48 can match eol */
     953YY_RULE_SETUP
     954#line 120 "easymesh/easymesh-scanner.l"
    933955{ /* ignore this */ }
    934956        YY_BREAK
    935 case 45:
    936 YY_RULE_SETUP
    937 #line 116 "easymesh/easymesh-scanner.l"
     957case 49:
     958YY_RULE_SETUP
     959#line 121 "easymesh/easymesh-scanner.l"
    938960{ return token::T_ERROR; }
    939961        YY_BREAK
    940 case 46:
    941 YY_RULE_SETUP
    942 #line 118 "easymesh/easymesh-scanner.l"
     962case 50:
     963YY_RULE_SETUP
     964#line 123 "easymesh/easymesh-scanner.l"
    943965ECHO;
    944966        YY_BREAK
    945 #line 946 "generated/easymesh-scanner.cpp"
     967#line 968 "generated/easymesh-scanner.cpp"
    946968case YY_STATE_EOF(INITIAL):
    947969        yyterminate();
     
    13251347                        {
    13261348                        yy_current_state = (int) yy_def[yy_current_state];
    1327                         if ( yy_current_state >= 75 )
     1349                        if ( yy_current_state >= 81 )
    13281350                                yy_c = yy_meta[(unsigned int) yy_c];
    13291351                        }
     
    13531375                {
    13541376                yy_current_state = (int) yy_def[yy_current_state];
    1355                 if ( yy_current_state >= 75 )
     1377                if ( yy_current_state >= 81 )
    13561378                        yy_c = yy_meta[(unsigned int) yy_c];
    13571379                }
    13581380        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
    1359         yy_is_jam = (yy_current_state == 74);
     1381        yy_is_jam = (yy_current_state == 80);
    13601382
    13611383        return yy_is_jam ? 0 : yy_current_state;
     
    18441866#define YYTABLES_NAME "yytables"
    18451867
    1846 #line 118 "easymesh/easymesh-scanner.l"
     1868#line 123 "easymesh/easymesh-scanner.l"
    18471869
    18481870
Note: See TracChangeset for help on using the changeset viewer.