Changeset 139 for cpp/frams/_demos/part_shapes.cpp
 Timestamp:
 02/20/14 17:49:28 (10 years ago)
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

cpp/frams/_demos/part_shapes.cpp
r121 r139 9 9 int main() 10 10 { 11 Model *m=new Model;12 Part *p1,*p2;13 Joint *j;11 Model m; 12 Part *p1, *p2; 13 Joint *j; 14 14 15 m>open();15 m.open(); 16 16 17 // chain of ellipsoids  subsequent parts are placed relative to the previous part's orientation and location18 p1=m>addNewPart(Part::SHAPE_ELLIPSOID); //initial part19 p1>scale=Pt3D(1.0,0.7,0.4);17 // chain of ellipsoids  subsequent parts are placed relative to the previous part's orientation and location 18 p1 = m.addNewPart(Part::SHAPE_ELLIPSOID); //initial part 19 p1>scale = Pt3D(1.0, 0.7, 0.4); 20 20 21 Orient rotation=Orient_1; //must be initialized explicitly because the default Orient constructor does not initialize anything22 rotation.rotate(Pt3D(0.1,0.2,0.3));21 Orient rotation = Orient_1; //must be initialized explicitly because the default Orient constructor does not initialize anything 22 rotation.rotate(Pt3D(0.1, 0.2, 0.3)); 23 23 24 for(int N=10;N>0;N,p1=p2)24 for (int N = 10; N > 0; N, p1 = p2) 25 25 { 26 p2=m>addNewPart(Part::SHAPE_ELLIPSOID); 27 p2>scale=p1>scale*0.9; //each part is smaller than its predecessor 28 29 Pt3D advance(p1>scale.x,0,0); //advance by previous part's ellipsoid x radius 30 p2>p = p1>p + p1>o.transform(advance); //advance vector transformed by p1 orientation == in p1 local coordinates 31 p2>setOrient(p1>o.transform(rotation)); //rotation transformed by p1 orientation 26 p2 = m.addNewPart(Part::SHAPE_ELLIPSOID); 27 p2>scale = p1>scale*0.9; //each part is smaller than its predecessor 32 28 33 m>addNewJoint(p1,p2,Joint::SHAPE_SOLID); //all parts must be connected 29 Pt3D advance(p1>scale.x, 0, 0); //advance by previous part's ellipsoid x radius 30 p2>p = p1>p + p1>o.transform(advance); //advance vector transformed by p1's orientation (i.e., in p1's local coordinates) 31 p2>setOrient(p1>o.transform(rotation)); //rotation transformed by p1's orientation 32 33 m.addNewJoint(p1, p2, Joint::SHAPE_SOLID); //all parts must be connected 34 34 } 35 35 36 // chain of cyllinders  line segments between points calculated from the parametric formula P(a)=(22*cos(a),2*sin(a)) (circle with r=2)37 Pt3D prev,next;38 p1=m>getPart(0);39 for(float a=0;a<M_PI;a+=M_PI/10)36 // chain of cyllinders  line segments between points calculated from the parametric formula P(a)=(22*cos(a),2*sin(a)) (circle with r=2) 37 Pt3D prev, next; 38 p1 = m.getPart(0); 39 for (float a = 0; a<M_PI; a += M_PI / 10) 40 40 { 41 Pt3D next(22*cos(a),0,2*sin(a));42 if (a>0)41 Pt3D next(2  2 * cos(a), 0, 2 * sin(a)); 42 if (a>0) 43 43 { 44 p2=m>addNewPart(Part::SHAPE_CYLINDER);45 p2>setPositionAndRotationFromAxis(prev,next);46 p2>scale=Pt3D(prev.distanceTo(next)*0.5,0.05,0.05);// distance*0.5 because scale is "radius", not cylinder length44 p2 = m.addNewPart(Part::SHAPE_CYLINDER); 45 p2>setPositionAndRotationFromAxis(prev, next); 46 p2>scale = Pt3D(prev.distanceTo(next)*0.5, 0.05, 0.05);// distance*0.5 because scale is "radius", not cylinder length 47 47 48 m>addNewJoint(p1,p2,Joint::SHAPE_SOLID); //all parts must be connected48 m.addNewJoint(p1, p2, Joint::SHAPE_SOLID); //all parts must be connected 49 49 } 50 p1=p2;51 prev=next;50 p1 = p2; 51 prev = next; 52 52 } 53 53 54 m>close();55 puts((const char*)m>getF0Geno().toString());56 // the genotype can be fed directly to the genotype viewer, like this:57 // part_shapes  theater g vpart_shapes 54 m.close(); 55 puts((const char*)m.getF0Geno().toString()); 56 // the genotype can be fed directly to the genotype viewer, like this: 57 // part_shapes  theater g vpart_shapes  58 58 }
Note: See TracChangeset
for help on using the changeset viewer.