// POP Giro / POP Computadores — medalhão 3D do logotipo
// Interpretação física do símbolo: anel partido em 2 arcos + esfera central
// (o ícone original é um raster 2D com gradiente/brilho, que não existe em
// plástico — aqui reproduzimos a GEOMETRIA: anel quebrado + bola central)

$fn = 128;

// ===== Parâmetros (mm) =====
ring_outer_r   = 45;   // raio externo do anel
ring_inner_r   = 29;   // raio interno do anel
ring_thickness = 6;    // altura (extrusão Z) do anel

ball_r         = 30;   // raio da esfera central
ball_center_z  = ring_thickness / 2; // esfera cortada rente à mesa (z=0)

// Gaps (graus) que partem o anel em 2 arcos, como no logotipo original
gap1_start = 80;  gap1_end = 100;   // gap "de cima"
gap2_start = 250; gap2_end = 270;   // gap "de baixo/esquerda"

base_plate_d = 2; // espessura mínima de solda entre peças (garantia de manifold)

module ring_2d() {
    difference() {
        circle(r = ring_outer_r);
        circle(r = ring_inner_r);
    }
}

module gap_wedge(a1, a2) {
    steps = 24;
    pts = [for (i = [0:steps]) let(a = a1 + (a2 - a1) * i / steps)
            [(ring_outer_r + 5) * cos(a), (ring_outer_r + 5) * sin(a)]];
    polygon(concat([[0, 0]], pts));
}

module ring_with_gaps() {
    linear_extrude(height = ring_thickness)
        difference() {
            ring_2d();
            gap_wedge(gap1_start, gap1_end);
            gap_wedge(gap2_start, gap2_end);
        }
}

module center_ball() {
    // esfera cortada rente ao chão (z=0), soldada ao anel por sobreposição
    intersection() {
        translate([0, 0, ball_center_z])
            sphere(r = ball_r);
        translate([0, 0, 500 / 2])
            cube([1000, 1000, 500], center = true); // half-space z>=0
    }
}

module logo() {
    union() {
        ring_with_gaps();
        center_ball();
    }
}

logo();
