|
|
@@ -283,12 +283,14 @@ module platform_mount_object() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- render() {
|
|
|
- difference() {
|
|
|
- layer_base_object();
|
|
|
- top_holes();
|
|
|
- left_holes();
|
|
|
- right_holes();
|
|
|
+ color("#4C4CB3") {
|
|
|
+ render() {
|
|
|
+ difference() {
|
|
|
+ layer_base_object();
|
|
|
+ top_holes();
|
|
|
+ left_holes();
|
|
|
+ right_holes();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -326,10 +328,21 @@ module platform_top_shape() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ module mounting_holes() {
|
|
|
+ radius = platform_mounting_holes_diameter / 2;
|
|
|
+
|
|
|
+ for (count = platform_mounting_holes_positions) {
|
|
|
+ translate([count.y, count.x]) {
|
|
|
+ circle(r = radius);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
difference() {
|
|
|
base_shape();
|
|
|
|
|
|
connector_holes();
|
|
|
+ mounting_holes();
|
|
|
|
|
|
translate([0, holes_y]) {
|
|
|
platform_top_holes();
|
|
|
@@ -406,7 +419,153 @@ module platform_side_object() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-module platform_connector() {
|
|
|
- size = platform_connector_space();
|
|
|
- cube(size, center = true);
|
|
|
+function platform_connector_depth()
|
|
|
+ = platform_thickness * 2
|
|
|
+ + thread_screw / 2
|
|
|
+ + corner_radius * 2;
|
|
|
+
|
|
|
+function platform_connector_width()
|
|
|
+ = platform_connector_space()
|
|
|
+ + platform_thickness * 2
|
|
|
+ + thread_screw;
|
|
|
+
|
|
|
+module platform_connector_object(split = false) {
|
|
|
+ thickness = platform_thickness;
|
|
|
+ corner = corner_radius;
|
|
|
+ width = platform_connector_depth();
|
|
|
+
|
|
|
+ module corner() {
|
|
|
+ outside = corner * 2;
|
|
|
+ inside = outside - thickness * 2;
|
|
|
+
|
|
|
+ module center() {
|
|
|
+ difference() {
|
|
|
+ circle(r = outside / 2);
|
|
|
+ circle(r = inside / 2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ module differ() {
|
|
|
+ translate([0, -outside / 4]) {
|
|
|
+ square([outside, outside / 2], center = true);
|
|
|
+ }
|
|
|
+
|
|
|
+ translate([-outside / 4, outside / 4]) {
|
|
|
+ square([outside / 2, outside / 2], center = true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ translate([-outside / 4, -outside / 4]) {
|
|
|
+ render() {
|
|
|
+ difference() {
|
|
|
+ center();
|
|
|
+ differ();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ module side(rotation = 0) {
|
|
|
+ move = width / 2 - corner / 2 - thickness / 2;
|
|
|
+
|
|
|
+ rotate(rotation) {
|
|
|
+ hull() {
|
|
|
+ translate([move, 0]) {
|
|
|
+ square(thickness, center = true);
|
|
|
+ }
|
|
|
+
|
|
|
+ translate([-move, 0]) {
|
|
|
+ circle(r = thickness / 2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ module base_shape() {
|
|
|
+ corner_move = width / 2 - corner / 2;
|
|
|
+
|
|
|
+ top_side_x = -corner / 2;
|
|
|
+ top_side_y = width / 2 - thickness / 2;
|
|
|
+
|
|
|
+ side_x = top_side_y;
|
|
|
+ side_y = top_side_x;
|
|
|
+
|
|
|
+ translate([corner_move, corner_move]) {
|
|
|
+ corner();
|
|
|
+ }
|
|
|
+
|
|
|
+ translate([top_side_x, top_side_y]) {
|
|
|
+ side();
|
|
|
+ }
|
|
|
+
|
|
|
+ translate([side_x, side_y]) {
|
|
|
+ side(90);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ depth = platform_connector_width();
|
|
|
+
|
|
|
+ module top_screw() {
|
|
|
+ move_x
|
|
|
+ = width / 2
|
|
|
+ - corner_radius * 2;
|
|
|
+
|
|
|
+ move_y
|
|
|
+ = width / 2
|
|
|
+ - thickness / 2;
|
|
|
+
|
|
|
+ move_z
|
|
|
+ = -platform_connector_space() / 2;
|
|
|
+
|
|
|
+ translate([move_x, move_y, move_z]) {
|
|
|
+ rotate([90, 0, 0]) {
|
|
|
+ thread_screw_object(thickness);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ module side_screw() {
|
|
|
+ move_x
|
|
|
+ = width / 2
|
|
|
+ - thickness / 2;
|
|
|
+
|
|
|
+ move_y
|
|
|
+ = width / 2
|
|
|
+ - corner_radius * 2;
|
|
|
+
|
|
|
+ move_z
|
|
|
+ = platform_connector_space() / 2;
|
|
|
+
|
|
|
+ translate([move_x, move_y, move_z]) {
|
|
|
+ rotate([0, 90, 0]) {
|
|
|
+ thread_screw_object(thickness);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ module base_object() {
|
|
|
+ linear_extrude(height = depth, center = true) {
|
|
|
+ base_shape();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ module object() {
|
|
|
+ render() {
|
|
|
+ difference() {
|
|
|
+ base_object();
|
|
|
+ top_screw();
|
|
|
+ side_screw();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ color("#3CC361") {
|
|
|
+ if (split) {
|
|
|
+ object();
|
|
|
+ } else {
|
|
|
+ mirror([1, 0, 0]) {
|
|
|
+ object();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|