Ignore:
Timestamp:
02/15/18 00:42:07 (6 years ago)
Author:
Maciej Komosinski
Message:

Added support for "checkpoints" (intermediate phases of development of the Model when converting between genetic encodings). See Model.checkpoint() and conv_f1.cpp for an example.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/_demos/geometry/geometrytestutils.cpp

    r662 r732  
    1818        long count = 0;
    1919        long totalSize = 0;
    20         MiniGenotypeLoader loader(file);
    21         MiniGenotype *genotype;
    22        
     20        GenotypeMiniLoader loader(file);
     21        GenotypeMini *genotype;
     22
    2323        while (genotype = loader.loadNextGenotype())
    2424        {
    2525                count++;
    2626                totalSize += genotype->genotype.len();
    27                
     27
    2828                fprintf(stderr, "%d. (%6d chars) %s\n", count, genotype->genotype.len(),
    2929                        genotype->name.c_str());
    3030        }
    31        
    32         if (loader.getStatus() == MiniGenotypeLoader::OnError)
     31
     32        if (loader.getStatus() == GenotypeMiniLoader::OnError)
    3333        {
    3434                fprintf(stderr, "Error: %s\n", loader.getError().c_str());
     
    4444class TestInvoker
    4545{
    46         public:
    47                 virtual void operator()(Model &model) = 0;
     46public:
     47        virtual void operator()(Model &model) = 0;
    4848};
    4949
     
    5353        const int genoIndex = isdigit(genoId[0]) ? atol(genoId) : 0;
    5454        long count = 0;
    55         MiniGenotypeLoader loader(file);
    56         MiniGenotype *genotype;
    57        
     55        GenotypeMiniLoader loader(file);
     56        GenotypeMini *genotype;
     57
    5858        while (genotype = loader.loadNextGenotype())
    5959        {
    6060                count++;
    61                
     61
    6262                if ((genoIndex == count) || (strcmp(genotype->name.c_str(), genoName) == 0))
    6363                {
    6464                        Model model(genotype->genotype);
    65                        
     65
    6666                        if (!model.isValid())
    6767                        {
     
    7474                }
    7575        }
    76        
    77         if (loader.getStatus() == MiniGenotypeLoader::OnError)
     76
     77        if (loader.getStatus() == GenotypeMiniLoader::OnError)
    7878        {
    7979                fprintf(stderr, "Error: %s\n", loader.getError().c_str());
     
    9494        if ((shape < 1) || (shape > 3))
    9595        {
    96                 shape = (rand()%3) + 1;
     96                shape = (rand() % 3) + 1;
    9797        }
    9898
     
    106106}
    107107
    108 class ModelBasedTestInvoker: public TestInvoker
    109 {
    110         private:
    111                 void (*test)(Model &);
    112         public:
    113                 ModelBasedTestInvoker(void (*_test)(Model &)):
    114                         test(_test)
    115                 {}
    116                 void operator()(Model &model)
    117                 {
    118                         test(model);
    119                 }
     108class ModelBasedTestInvoker : public TestInvoker
     109{
     110private:
     111        void(*test)(Model &);
     112public:
     113        ModelBasedTestInvoker(void(*_test)(Model &)) :
     114                test(_test)
     115        {}
     116        void operator()(Model &model)
     117        {
     118                test(model);
     119        }
    120120};
    121121
    122 int GeometryTestUtils::execute(const SString header, int argc, char *argv[], void (*test)(Model &))
     122int GeometryTestUtils::execute(const SString header, int argc, char *argv[], void(*test)(Model &))
    123123{
    124124        LoggerToStdout messages_to_stdout(LoggerBase::Enable); //comment this object out to mute error/warning messages
    125125        StdioFileSystem_autoselect stdiofilesys;
    126126        PreconfiguredGenetics genetics;
    127        
     127
    128128        srand(time(NULL));
    129129
     
    132132                return printGenotypesList(argv[2]);
    133133        }
    134        
     134
    135135        if ((argc == 4) && (strcmp("-l", argv[1]) == 0))
    136136        {
     
    138138                return executeTestUsingLoadedModel(argv[2], argv[3], invoker);
    139139        }
    140        
     140
    141141        if ((argc == 2) && (strcmp("-c", argv[1]) == 0))
    142142        {
     
    144144                return executeTestUsingRandomModel(-1, invoker);
    145145        }
    146        
     146
    147147        if ((argc == 3) && (strcmp("-c", argv[1]) == 0) && isdigit(argv[2][0]))
    148148        {
     
    151151                return executeTestUsingRandomModel(shape, invoker);
    152152        }
    153        
     153
    154154        fprintf(stderr,
    155155                "%s\n\n"
     
    165165}
    166166
    167 class ModelAndDensityBasedTestInvoker: public TestInvoker
    168 {
    169         private:
    170                 void (*test)(Model &, const double);
    171                 double density;
    172         public:
    173                 ModelAndDensityBasedTestInvoker(void (*_test)(Model &, const double), double _density):
    174                         test(_test),
    175                         density(_density)
    176                 {}
    177                
    178                 void operator()(Model &model)
    179                 {
    180                         test(model, density);
    181                 }
     167class ModelAndDensityBasedTestInvoker : public TestInvoker
     168{
     169private:
     170        void(*test)(Model &, const double);
     171        double density;
     172public:
     173        ModelAndDensityBasedTestInvoker(void(*_test)(Model &, const double), double _density) :
     174                test(_test),
     175                density(_density)
     176        {}
     177
     178        void operator()(Model &model)
     179        {
     180                test(model, density);
     181        }
    182182};
    183183
    184184int GeometryTestUtils::execute(const SString header, int argc, char *argv[],
    185         void (*test)(Model &, const double))
     185        void(*test)(Model &, const double))
    186186{
    187187        LoggerToStdout messages_to_stdout(LoggerBase::Enable); //comment this object out to mute error/warning messages
    188188        StdioFileSystem_autoselect stdiofilesys;
    189189        PreconfiguredGenetics genetics;
    190        
     190
    191191        srand(time(NULL));
    192192
     
    202202                return executeTestUsingLoadedModel(argv[2], argv[3], invoker);
    203203        }
    204        
     204
    205205        if ((argc == 3) && (strcmp("-c", argv[1]) == 0) && isdigit(argv[2][0]))
    206206        {
     
    209209                return executeTestUsingRandomModel(-1, invoker);
    210210        }
    211        
     211
    212212        if ((argc == 4) && (strcmp("-c", argv[1]) == 0) && isdigit(argv[2][0]) && isdigit(argv[3][0]))
    213213        {
     
    217217                return executeTestUsingRandomModel(shape, invoker);
    218218        }
    219        
     219
    220220        fprintf(stderr,
    221221                "%s\n\n"
     
    235235{
    236236        Part *part = model.addNewPart(Part::SHAPE_ELLIPSOID);
    237        
     237
    238238        part->p = Pt3D(0);
    239239        part->scale = Pt3D(0.1);
    240240        part->vcolor = Pt3D(1.0, 0.0, 1.0);
    241        
     241
    242242        addAxesToModel(Pt3D(0.5), Orient(Orient_1), Pt3D(0.0), model);
    243243}
     
    247247        Part *anchor = model.getPart(0);
    248248        Part *part = model.addNewPart(Part::SHAPE_ELLIPSOID);
    249        
     249
    250250        part->p = Pt3D(markerLocation);
    251251        part->scale = Pt3D(0.05);
    252252        part->vcolor = Pt3D(1.0, 1.0, 0.0);
    253        
     253
    254254        model.addNewJoint(anchor, part, Joint::SHAPE_FIXED);
    255255}
     
    260260        Part *anchor = model.getPart(0);
    261261        Part *part;
    262        
     262
    263263        part = model.addNewPart(Part::SHAPE_CUBOID);
    264264        part->scale = Pt3D(sizes.x, 0.05, 0.05);
     
    267267        part->vcolor = Pt3D(1.0, 0.0, 0.0);
    268268        model.addNewJoint(anchor, part, Joint::SHAPE_FIXED);
    269        
     269
    270270        part = model.addNewPart(Part::SHAPE_CUBOID);
    271271        part->scale = Pt3D(0.05, sizes.y, 0.05);
     
    274274        part->vcolor = Pt3D(0.0, 1.0, 0.0);
    275275        model.addNewJoint(anchor, part, Joint::SHAPE_FIXED);
    276        
     276
    277277        part = model.addNewPart(Part::SHAPE_CUBOID);
    278278        part->scale = Pt3D(0.05, 0.05, sizes.z);
     
    287287        Part *targetAnchor = target.getPart(0);
    288288        Part *sourceAnchor = source.getPart(0);
    289        
     289
    290290        target.moveElementsFrom(source);
    291        
     291
    292292        target.addNewJoint(targetAnchor, sourceAnchor, Joint::SHAPE_FIXED);
    293293}
     
    295295double frand(double from, double width)
    296296{
    297         return from + width * ((rand()%10000) / 10000.0);
     297        return from + width * ((rand() % 10000) / 10000.0);
    298298}
    299299
Note: See TracChangeset for help on using the changeset viewer.