void drawRgnOped(SkCanvas* canvas, SkRegion::Op op, SkColor color) { SkAAClip clip; this->build_rgn(&clip, op); this->drawOrig(canvas, true); SkPaint paint; paint.setColor((color & ~(0xFF << 24)) | (0x44 << 24)); paint_rgn(canvas, clip, paint); paint.setStyle(SkPaint::kStroke_Style); paint.setColor(color); paint_rgn(canvas, clip, paint); SkAAClip clip2(clip); clip2.translate(0, 80); outer_frame(canvas, clip2.getBounds()); paint_rgn(canvas, clip2, paint); }
static void ferris_wheel(double x, double y , double z, double size) { double pi = M_PI; double step = 2*pi/10; double r = 3; int i; // Draw passenger_boxes glPushMatrix(); glTranslated(x,y,z); glScaled(size,size,size); for (i=0;i<10;i++) { double passenger_box_x = r * cos(i*step+rotation); double passenger_box_y = r * sin(i*step+rotation); passenger_box(passenger_box_x, passenger_box_y,0 , 0.3,0.3,0.3 , 0); } // Draw Circle outer_frame(0, 0, -0.31, r, 10, step); outer_frame(0, 0, 0.31, r, 10, step); // Draw the spokes glColor3f(0.5,0.5,0.5); double conversion = 180/pi; int current_spoke; int num_spokes = spokes; double offset = 0; for(current_spoke = 0; current_spoke < num_spokes; current_spoke++) { offset = current_spoke*(180/num_spokes); beam(0,0,-0.3, r-0.1, 0.1, 0.1,offset + conversion*rotation, offset+conversion*rotation, 0); beam(0,0,0.3, r-0.1, 0.1, 0.1,offset + conversion*rotation, offset+conversion*rotation, 0); } // center axis glColor3f(0.2,0.5,0.2); beam(0,0,0, 1, 0.1, 0.1, 90, 0, 0); // braces glColor3f(0.2,0.2,0.5); beam(1.7,-1.7,-1, 2.5, 0.1, 0.1, 135, 135, 0); beam(-1.7,-1.7,-1, 2.5, 0.1, 0.1, 45, 45, 0); beam(1.7,-1.7,1, 2.5, 0.1, 0.1, 135, 135, 0); beam(-1.7,-1.7,1, 2.5, 0.1, 0.1, 45, 45, 0); if(num_lights){ int spacing; r = r-0.1; num_spokes = num_spokes*2; double x_angle, y_angle, radius; for(current_spoke = 0; current_spoke < num_spokes; current_spoke++) { offset = current_spoke*2*pi/num_spokes; for(spacing = 1; spacing < num_lights+1; spacing++) { // light(spacing*r*cos(offset + rotation)/num_lights, // spacing*r*sin(offset + rotation)/num_lights, 0.35, 0.1, 90, 270); radius = spacing*r/num_lights; x_angle = cos(offset + rotation); y_angle = sin(offset + rotation); light(radius*x_angle, radius*y_angle, 0.35, 0.1, 0, 180); light(radius*x_angle, radius*y_angle, -0.35, 0.1, -180, 0); } } } glPopMatrix(); }