Ignore:
Timestamp:
03/11/14 14:45:29 (10 years ago)
Author:
sz
Message:

reformatting

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/genetics/f9/conv_f9.cpp

    r157 r168  
    1313{
    1414        name = "Turtle3D-ortho encoding";
    15         in_format  = '9';
     15        in_format = '9';
    1616        out_format = '0';
    1717        mapsupport = 0; //would be easy and nice to add!
     
    1919
    2020
    21 const char* turtle_commands_f9 ="LRDUBF";
     21const char* turtle_commands_f9 = "LRDUBF";
    2222
    2323//const char* turtle_commandsX_f9="-+0000";
     
    3131        Model m;
    3232        m.open();
    33         int recently_added=addSegment(m,vertices,current,0xDead);
    34         for(int i=0;i<in.len();i++)
     33        int recently_added = addSegment(m, vertices, current, 0xDead);
     34        for (int i = 0; i < in.len(); i++)
    3535        {
    36                 char command=in[i];
    37                 char *ptr=strchr((char*)turtle_commands_f9,command);
     36                char command = in[i];
     37                char *ptr = strchr((char*)turtle_commands_f9, command);
    3838                if (ptr)
    3939                {
    40                         int delta[]={0,0,0};
    41                         int pos=ptr-turtle_commands_f9;
    42                         int axis=pos/2;
    43                         int dir=pos%2;
    44                         (*(delta+axis))+=dir*2-1; //+1 or -1 in the given axis
     40                        int delta[] = { 0, 0, 0 };
     41                        int pos = ptr - turtle_commands_f9;
     42                        int axis = pos / 2;
     43                        int dir = pos % 2;
     44                        (*(delta + axis)) += dir * 2 - 1; //+1 or -1 in the given axis
    4545                        current.add(delta);
    46                         recently_added=addSegment(m,vertices,current,recently_added);
     46                        recently_added = addSegment(m, vertices, current, recently_added);
    4747                }
    4848        }
     
    5757}
    5858
    59 int GenoConv_f90::addSegment(Model &m,vector<XYZ_LOC> &vertices,const XYZ_LOC &new_vertex,int recently_added)
     59int GenoConv_f90::addSegment(Model &m, vector<XYZ_LOC> &vertices, const XYZ_LOC &new_vertex, int recently_added)
    6060{
    61         if (vertices.size()<1) //empty model?
     61        if (vertices.size() < 1) //empty model?
    6262        {
    63                 return addNewVertex(m,vertices,new_vertex);
    64         } else
     63                return addNewVertex(m, vertices, new_vertex);
     64        }
     65        else
    6566        {
    66                 int vertex_here=findVertexAt(vertices,new_vertex);
    67                 if (vertex_here<0) //need to create a new Part
     67                int vertex_here = findVertexAt(vertices, new_vertex);
     68                if (vertex_here < 0) //need to create a new Part
    6869                {
    69                         vertex_here=addNewVertex(m,vertices,new_vertex);
     70                        vertex_here = addNewVertex(m, vertices, new_vertex);
    7071                } //else there already exists a Part in new_vertex; new Joint may or may not be needed
    71                 Part *p1=m.getPart(recently_added);
    72                 Part *p2=m.getPart(vertex_here);
    73                 if (m.findJoint(p1,p2)<0 && m.findJoint(p2,p1)<0) //new Joint needed? should always be true if we just created a new Part (vertex_here was <0)
     72                Part *p1 = m.getPart(recently_added);
     73                Part *p2 = m.getPart(vertex_here);
     74                if (m.findJoint(p1, p2) < 0 && m.findJoint(p2, p1) < 0) //new Joint needed? should always be true if we just created a new Part (vertex_here was <0)
    7475                {
    75                         m.addNewJoint(p1,p2);
     76                        m.addNewJoint(p1, p2);
    7677                }
    7778                return vertex_here;
     
    7980}
    8081
    81 int GenoConv_f90::findVertexAt(vector<XYZ_LOC> &vertices,const XYZ_LOC &vertex)
     82int GenoConv_f90::findVertexAt(vector<XYZ_LOC> &vertices, const XYZ_LOC &vertex)
    8283{
    83         for(int i=0;i<vertices.size();i++)
     84        for (int i = 0; i < vertices.size(); i++)
    8485                if (vertices[i].same_coordinates(vertex)) return i;
    8586        return -1;
     
    8788
    8889
    89 int GenoConv_f90::addNewVertex(Model &m,vector<XYZ_LOC> &vertices,const XYZ_LOC &new_vertex)
     90int GenoConv_f90::addNewVertex(Model &m, vector<XYZ_LOC> &vertices, const XYZ_LOC &new_vertex)
    9091{
    91         Part *p=new Part;
    92         p->p.x=new_vertex.x;
    93         p->p.y=new_vertex.y;
    94         p->p.z=new_vertex.z;
     92        Part *p = new Part;
     93        p->p.x = new_vertex.x;
     94        p->p.y = new_vertex.y;
     95        p->p.z = new_vertex.z;
    9596        m.addPart(p);
    9697
    9798        vertices.push_back(new_vertex);
    98         return vertices.size()-1;
     99        return vertices.size() - 1;
    99100}
    100101
    101 double mix(int *colortab,int maxind,double ind)
     102double mix(int *colortab, int maxind, double ind)
    102103{
    103         int indpre=(int)ind;
    104         int indpost=indpre+1;
    105         if (indpost>maxind) indpost=maxind;
    106         int v1=colortab[indpre];
    107         int v2=colortab[indpost];
    108         double d1=ind-indpre;
    109         double d2=indpost-ind;
    110         double v=indpre==indpost?v1:d2*v1+d1*v2; //d1+d2==1
     104        int indpre = (int)ind;
     105        int indpost = indpre + 1;
     106        if (indpost > maxind) indpost = maxind;
     107        int v1 = colortab[indpre];
     108        int v2 = colortab[indpost];
     109        double d1 = ind - indpre;
     110        double d2 = indpost - ind;
     111        double v = indpre == indpost ? v1 : d2*v1 + d1*v2; //d1+d2==1
    111112        return v;
    112113}
     
    115116{
    116117        //a rainbow on Joints: from the first one red, through middle green, to blue or violet - last
    117         static int r[]={1,1,0,0,0,1};
    118         static int g[]={0,1,1,1,0,0};
    119         static int b[]={0,0,0,1,1,1};
    120         int maxind=ARRAY_LENGTH(r)-1;
     118        static int r[] = { 1, 1, 0, 0, 0, 1 };
     119        static int g[] = { 0, 1, 1, 1, 0, 0 };
     120        static int b[] = { 0, 0, 0, 1, 1, 1 };
     121        int maxind = ARRAY_LENGTH(r) - 1;
    121122
    122         int joints_count=m.getJointCount();
    123         for(int i=0;i<joints_count;i++)
     123        int joints_count = m.getJointCount();
     124        for (int i = 0; i < joints_count; i++)
    124125        {
    125                 Joint *j=m.getJoint(i);
    126                 double x=joints_count<2?0:(double)i/(joints_count-1); //0..1, postion in the rainbow
    127                 double ind=x*maxind;
    128                 j->vcolor.x=mix(r,maxind,ind);
    129                 j->vcolor.y=mix(g,maxind,ind);
    130                 j->vcolor.z=mix(b,maxind,ind);
     126                Joint *j = m.getJoint(i);
     127                double x = joints_count < 2 ? 0 : (double)i / (joints_count - 1); //0..1, postion in the rainbow
     128                double ind = x*maxind;
     129                j->vcolor.x = mix(r, maxind, ind);
     130                j->vcolor.y = mix(g, maxind, ind);
     131                j->vcolor.z = mix(b, maxind, ind);
    131132        }
    132133
    133         int parts_count=m.getPartCount();
     134        int parts_count = m.getPartCount();
    134135        SList jlist;
    135         for(int i=0;i<parts_count;i++)
     136        for (int i = 0; i<parts_count; i++)
    136137        {
    137                 Part *p=m.getPart(i);
     138                Part *p = m.getPart(i);
    138139                jlist.clear();
    139                 int count=m.findJoints(jlist,p);
    140                 Pt3D averagecolor(0,0,0); //Parts will get averaged colors from all attached Joints
    141                 FOREACH(Joint*,j,jlist)
    142                         averagecolor+=j->vcolor;
    143                 if (count>5) count=5; //avoid too fat...
    144                 p->vsize=0.3+count/15.0; //the more Joints is attached to a Part, the fatter it is
    145                 p->vcolor=averagecolor/count;
     140                int count = m.findJoints(jlist, p);
     141                Pt3D averagecolor(0, 0, 0); //Parts will get averaged colors from all attached Joints
     142                FOREACH(Joint*, j, jlist)
     143                        averagecolor += j->vcolor;
     144                p->vcolor = averagecolor / count;
     145                if (count>5) count = 5; //avoid too fat...
     146                p->vsize = 0.3 + count / 15.0; //the more Joints is attached to a Part, the fatter it is
    146147        }
    147148}
     
    149150void GenoConv_f90::perturbPartLocations(Model &m) //deterministic "body noise", see APPLY_DETERMINISTIC_BODY_NOISE
    150151{
    151         for(int i=0;i<m.getPartCount();i++)
     152        for (int i = 0; i < m.getPartCount(); i++)
    152153        {
    153                 Part *p=m.getPart(i);
     154                Part *p = m.getPart(i);
    154155                Pt3D noise(
    155                         ((i+1)  %10)-4.5  ,
    156                         ((3*i+5)%10)-4.5  ,
    157                         ((7*i+2)%10)-4.5
     156                        ((i + 1) % 10) - 4.5,
     157                        ((3 * i + 5) % 10) - 4.5,
     158                        ((7 * i + 2) % 10) - 4.5
    158159                        ); //-4.5 .. 4.5 in each axis
    159                 p->p+=noise/1000;
     160                p->p += noise / 1000;
    160161        }
    161162}
Note: See TracChangeset for help on using the changeset viewer.