[120] | 1 | // This file is a part of the Framsticks GDK. |
---|
| 2 | // Copyright (C) 2002-2014 Maciej Komosinski and Szymon Ulatowski. See LICENSE.txt for details. |
---|
| 3 | // Refer to http://www.framsticks.com/ for further information. |
---|
| 4 | |
---|
| 5 | #ifndef _CONV_F9_H_ |
---|
| 6 | #define _CONV_F9_H_ |
---|
| 7 | |
---|
| 8 | #include <ctype.h> |
---|
| 9 | #include <common/nonstd_math.h> |
---|
| 10 | #include <frams/model/modelparts.h> |
---|
| 11 | #include <frams/util/multimap.h> |
---|
| 12 | #include <frams/util/sstring.h> |
---|
| 13 | #include <frams/genetics/genoconv.h> |
---|
| 14 | #include <vector> |
---|
| 15 | using std::vector; |
---|
| 16 | |
---|
| 17 | |
---|
| 18 | extern const char* turtle_commands_f9; |
---|
| 19 | |
---|
| 20 | |
---|
| 21 | struct XYZ_LOC |
---|
| 22 | { |
---|
| 23 | int x,y,z; //coordinates xyz of a vertex - represented as int's so that it is easy and safe to check identity. Could also be done using lists of Model's Parts, but that would involve comparing floats |
---|
| 24 | XYZ_LOC() {x=y=z=0;} |
---|
| 25 | void add(int delta[3]) {x+=delta[0]; y+=delta[1]; z+=delta[2];} |
---|
| 26 | bool same_coordinates(const XYZ_LOC &loc) {return x==loc.x && y==loc.y && z==loc.z;} |
---|
| 27 | }; |
---|
| 28 | |
---|
| 29 | |
---|
| 30 | // The f9->f0 converter |
---|
[139] | 31 | class GenoConv_f90: public GenoConverter |
---|
[120] | 32 | { |
---|
| 33 | public: |
---|
[139] | 34 | GenoConv_f90(); |
---|
[120] | 35 | |
---|
[139] | 36 | //implementation of the GenoConverter method |
---|
[120] | 37 | SString convert(SString &in, MultiMap *map); |
---|
| 38 | |
---|
| 39 | protected: |
---|
| 40 | //auxiliary methods |
---|
| 41 | int addSegment(Model &m,vector<XYZ_LOC> &vertices,const XYZ_LOC &new_vertex,int recently_added); |
---|
| 42 | int findVertexAt(vector<XYZ_LOC> &vertices,const XYZ_LOC &new_vertex); |
---|
| 43 | int addNewVertex(Model &m,vector<XYZ_LOC> &punkty,const XYZ_LOC &nowypunkt); |
---|
| 44 | void setColors(Model &m); //sets fixed (independent from genes) colors and widths on a model, purely for aesthetic purposes |
---|
[125] | 45 | void perturbPartLocations(Model &m); //deterministic "body noise", see APPLY_DETERMINISTIC_BODY_NOISE |
---|
[120] | 46 | }; |
---|
| 47 | |
---|
| 48 | #endif |
---|