// Customization Parameters
OD = 20;             // Pipe Outer Diameter
ID = 16;             // Pipe Inner Diameter
slot_width = 2;      // Slot Width
slot_depth = 3;      // Slot Depth
hub_thickness = 10;   // Connector Hub Thickness (radius of intersection)
pipe_length = 30;    // Length of each pipe section
num_slots = 4;       // Number of slots per pipe

// Module for a single pipe section with slots
module pipe_section(length) {
    difference() {
        cylinder(h = length, r = OD / 2, center = true);

        // Subtract inner cylinder to make it hollow
        translate([0, 0, -1])
        cylinder(h = length + 2, r = ID / 2, center = true);

        // Create slots
        for (i = [0:num_slots - 1]) {
            rotate([0, 0, i * 360 / num_slots])
            translate([OD / 2 + 0.01, -slot_width / 2, 0]) // Translate slightly outside the cylinder
            cube([slot_depth, slot_width, length + 2], center = false);
        }
    }
}

// Main 4-way connector module
module four_way_connector() {
    union() {
        // +X axis
        difference() {
            translate([pipe_length / 2, 0, 0])
            rotate([0, 90, 0])
            pipe_section(pipe_length);

            // Subtract +Y
            translate([0, pipe_length / 2, 0])
            rotate([90, 0, 0])
            cylinder(h = pipe_length, r = OD / 2, center = true);

            // Subtract -Z
            translate([0, 0, -pipe_length / 2])
            cylinder(h = pipe_length, r = OD / 2, center = true);
        }

        // -X axis
        difference() {
            translate([-pipe_length / 2, 0, 0])
            rotate([0, 90, 0])
            pipe_section(pipe_length);

            // Subtract +Y
            translate([0, pipe_length / 2, 0])
            rotate([90, 0, 0])
            cylinder(h = pipe_length, r = OD / 2, center = true);

            // Subtract -Z
            translate([0, 0, -pipe_length / 2])
            cylinder(h = pipe_length, r = OD / 2, center = true);
        }

        // +Y axis
        difference() {
            translate([0, pipe_length / 2, 0])
            rotate([90, 0, 0])
            pipe_section(pipe_length);

            // Subtract +X
            translate([pipe_length / 2, 0, 0])
            rotate([0, 90, 0])
            cylinder(h = pipe_length, r = OD / 2, center = true);

            // Subtract -X
            translate([-pipe_length / 2, 0, 0])
            rotate([0, 90, 0])
            cylinder(h = pipe_length, r = OD / 2, center = true);
        }

        // -Z axis
        difference() {
            translate([0, 0, -pipe_length / 2])
            pipe_section(pipe_length);

            // Subtract +X
            translate([pipe_length / 2, 0, 0])
            rotate([0, 90, 0])
            cylinder(h = pipe_length, r = OD / 2, center = true);

            // Subtract -X
            translate([-pipe_length / 2, 0, 0])
            rotate([0, 90, 0])
            cylinder(h = pipe_length, r = OD / 2, center = true);
        }
    }
}

// Render the model
four_way_connector();