1 | // This file is a part of the Framsticks GDK. |
---|

2 | // Copyright (C) 1999-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 |
---|

31 | class GenoConv_f90 : public GenoConverter |
---|

32 | { |
---|

33 | public: |
---|

34 | GenoConv_f90(); |
---|

35 | |
---|

36 | //implementation of the GenoConverter method |
---|

37 | SString convert(SString &in, MultiMap *map); |
---|

38 | |
---|

39 | protected: |
---|

40 | //auxiliary methods |
---|

41 | int addSegment(Model &m, int genenr, 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 |
---|

45 | void perturbPartLocations(Model &m); //deterministic "body noise", see APPLY_DETERMINISTIC_BODY_NOISE |
---|

46 | }; |
---|

47 | |
---|

48 | #endif |
---|