REPY-2.0 1.0
Mechanical module for modular robotics
Component BasicServo::build ( ) [protected, virtual]

Builds and returns the BasicServo.

Todo:
Change this

Reimplemented in TowerProSG90servo.

{
    //-- Create body
    Component body = Cube::create( width + width_tol, length + length_tol, height + height_tol, false);
    body.translate( -width/2, 0,0);

    //-- Create axis
    Component axis = Cylinder::create( axis_r, axis_h, 20, true);
    axis.translate( 0, axis_y, height + axis_h / 2);

    //-- Create legs
    Component leg_top = Cube::create( leg_x, leg_y, leg_z, false);
    leg_top.translate( -leg_x/2, length, leg_h);

    Component leg_bottom = leg_top.translatedCopy( 0, -( length + leg_y), 0);


    //-- Create holes:
    Component holes;
    Component hole_base = Cylinder( hole_r, leg_z + 0.2, 20, true);

    if (num_holes == 4) //-- 4 holes, 2 on each leg
    {

        Component hole01 = hole_base.translatedCopy(  hole_x, length + hole_y, leg_h + leg_z/2.0);
        Component hole02 = hole_base.translatedCopy( -hole_x, length + hole_y, leg_h + leg_z/2.0);
        Component hole03 = hole_base.translatedCopy(  hole_x,         -hole_y, leg_h + leg_z/2.0);
        Component hole04 = hole_base.translatedCopy( -hole_x,         -hole_y, leg_h + leg_z/2.0);
        holes = hole01 + hole02 + hole03 + hole04;
    }
    else if (num_holes == 2) //-- 2 holes, 1 on each leg
    {
        Component hole01 = hole_base.translatedCopy( hole_x, length + hole_y, leg_h + leg_z/2.0);
        Component hole02 = hole_base.translatedCopy( hole_x,         -hole_y ,leg_h + leg_z/2.0);
        holes = hole01 + hole02;
    }

    //-- Composing the servo:
    Component servo = body + axis + leg_top + leg_bottom - holes;

    //-- Add a link for the horn:
    servo.addLink( RefSys( 0, axis_y, height + horn_dist_axis));

    //-- Add several links for the screws:
    if (num_holes == 4) //-- 4 holes, 2 on each leg
    {
        servo.addLink( RefSys(  hole_x, length + hole_y, leg_h + leg_z/2.0));
        servo.addLink( RefSys( -hole_x, length + hole_y, leg_h + leg_z/2.0));
        servo.addLink( RefSys(  hole_x,         -hole_y, leg_h + leg_z/2.0));
        servo.addLink( RefSys( -hole_x,         -hole_y, leg_h + leg_z/2.0));
    }
    else if (num_holes == 2)
    {
        servo.addLink( RefSys(  hole_x, length + hole_y, leg_h + leg_z/2.0));
        servo.addLink( RefSys(  hole_x,         -hole_y, leg_h + leg_z/2.0));
    }
    //-- Paint it black:
    servo.color( servo_color[0], servo_color[1], servo_color[2], servo_color[3]);

    //-- Attach the horn:
    if ( display_horn)
    {
        make_horn();
        horn.color( horn_color[0], horn_color[1], horn_color[2], horn_color[3]);
        horn.relRotate(0,0, horn_angle);
        servo.attach( 0, horn, 2 );

    }

    return servo;
}
 All Classes Functions Variables