Added laptop bottom
This commit is contained in:
6
Makefile
Normal file
6
Makefile
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
all:
|
||||||
|
openscad -DPART='"left"' -o left.stl laptop-tscreen.scad
|
||||||
|
openscad -DPART='"right"' -o right.stl laptop-tscreen.scad
|
||||||
|
openscad -DPART='"bottom_left"' -o bottom_left.stl laptop-tscreen.scad
|
||||||
|
openscad -DPART='"bottom_right"' -o bottom_right.stl laptop-tscreen.scad
|
||||||
|
|
||||||
16858
bottom_left.stl
Normal file
16858
bottom_left.stl
Normal file
File diff suppressed because it is too large
Load Diff
17586
bottom_right.stl
Normal file
17586
bottom_right.stl
Normal file
File diff suppressed because it is too large
Load Diff
22
common.scad
Normal file
22
common.scad
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
module snapfit()
|
||||||
|
{
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
translate([-5, 1.5, -2.5]) cube([14, 3, 5]);
|
||||||
|
translate([5, -1, -2.5]) cube([4, 3, 5]);
|
||||||
|
translate([15.5, 0.5, -2.5]) rotate(30, [0, 0, 1]) cube([2, 1.5, 5]);
|
||||||
|
translate([16.91, 1.05, -2.5]) cube([2, 1.4, 5]);
|
||||||
|
}
|
||||||
|
union() {
|
||||||
|
translate([3.0, -5.0, -3]) rotate(28, [0, 0, 1]) cube([12, 4, 6]);
|
||||||
|
translate([-0.5, -0.3, -3.0]) cube([5.5, 3, 8]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
module snapfit_neg()
|
||||||
|
{
|
||||||
|
w = 12.0;
|
||||||
|
sw = 2.0;
|
||||||
|
translate([19, -w / 2.0 - sw, -2.5]) cube([4.0, w, 6.0]);
|
||||||
|
}
|
||||||
|
|
||||||
71
laptop-bottom.scad
Normal file
71
laptop-bottom.scad
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
module bottom_model()
|
||||||
|
{
|
||||||
|
kbheight = 124;
|
||||||
|
kbwidth = 286;
|
||||||
|
color([0, 0.6, 0.5])
|
||||||
|
translate([0, -220, 0])
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
hull() {
|
||||||
|
translate([width / 2.0 - radius + 24, -height / 2.0 + radius - 4, radius4 / 1.5]) sphere(radius4);
|
||||||
|
translate([-width / 2.0 + radius - 24, -height / 2.0 + radius - 4, radius4 / 1.5]) sphere(radius4);
|
||||||
|
translate([width / 2.0 - radius + 24, height / 2.0 - radius + 4, radius4 / 1.5]) sphere(radius4);
|
||||||
|
translate([-width / 2.0 + radius - 24, , height / 2.0 - radius + 4, radius4 / 1.5]) sphere(radius4);
|
||||||
|
|
||||||
|
translate([width / 2.0 - radius + 24, -height / 2.0 + radius - 4, 22.0 - radius4 / 1.5]) sphere(radius4);
|
||||||
|
translate([-width / 2.0 + radius - 24, -height / 2.0 + radius - 4, 22.0 - radius4 / 1.5]) sphere(radius4);
|
||||||
|
translate([width / 2.0 - radius + 24, height / 2.0 - radius + 4, 22.0 - radius4 / 1.5]) sphere(radius4);
|
||||||
|
translate([-width / 2.0 + radius - 24 , height / 2.0 - radius + 4, 22.0 - radius4 / 1.5]) sphere(radius4);
|
||||||
|
}
|
||||||
|
hull() {
|
||||||
|
translate([-width / 2.0 + 1, height / 2.0 - 5, radius4 / 1.5 + 4])
|
||||||
|
rotate(90, [0, 1, 0])
|
||||||
|
cylinder(width - 2, 8.0, 8.0);
|
||||||
|
translate([-width / 2.0 + 1, height / 2.0 + 10, radius4 / 1.5 + 20.0])
|
||||||
|
rotate(90, [0, 1, 0])
|
||||||
|
cylinder(width - 2, 8.0, 8.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
union() {
|
||||||
|
translate([0, -110, -100]) cube([15, 220, 200]);
|
||||||
|
translate([-width / 2.0 + 25, kbheight / 2.0, 20]) cube([30, 40, 30]);
|
||||||
|
translate([width / 2.0 - 25 - 30, kbheight / 2.0, 20]) cube([30, 40, 30]);
|
||||||
|
translate([-width / 2.0 - 10.0, height / 2.0 + 10, radius4 / 1.5 + 20.0])
|
||||||
|
rotate(90, [0, 1, 0])
|
||||||
|
cylinder(width + 20, 3.5, 3.5);
|
||||||
|
hull() {
|
||||||
|
xpass = kbwidth / 2.0 - radius4 - 3.0;
|
||||||
|
translate([-xpass, -kbheight / 2.0 + 12 + 6, 30]) sphere(radius4);
|
||||||
|
translate([xpass, -kbheight / 2.0 + 12 + 6, 30]) sphere(radius4);
|
||||||
|
translate([-xpass, kbheight / 2.0 + 12 - 6, 30]) sphere(radius4);
|
||||||
|
translate([xpass, kbheight / 2.0 + 12 - 6, 30]) sphere(radius4);
|
||||||
|
translate([-xpass, -kbheight / 2.0 + 12 + 6, 10]) sphere(radius4);
|
||||||
|
translate([xpass, -kbheight / 2.0 + 12 + 6, 10]) sphere(radius4);
|
||||||
|
translate([-xpass, kbheight / 2.0 + 12 - 6, 10]) sphere(radius4);
|
||||||
|
translate([xpass, kbheight / 2.0 + 12 - 6, 10]) sphere(radius4);
|
||||||
|
}
|
||||||
|
// bottom hole
|
||||||
|
translate([-100, -45, -30]) cube([200, 110, 60]);
|
||||||
|
// translate([-width / 2 - 8, -45, 5]) cube([width + 20, 124, 60]);
|
||||||
|
translate([-kbwidth / 2, -85, 16]) cube([kbwidth, 165, 6.5]);
|
||||||
|
translate([-kbwidth / 2 + 2, -85, 2]) cube([kbwidth - 4, 165, 20]);
|
||||||
|
// snap fits
|
||||||
|
translate([0, -height / 2.0 - 3.1, 9]) snapfit_neg();
|
||||||
|
translate([0, -height / 2.0 - 3.1, 17]) snapfit_neg();
|
||||||
|
translate([0, height / 2.0 - 1, 9]) rotate(180, [1, 0, 0]) snapfit_neg();
|
||||||
|
translate([0, height / 2.0 - 1, 17]) rotate(180, [1, 0, 0])snapfit_neg();
|
||||||
|
translate([19, height / 2.0 - 15, -5]) cube([6, 6, 10]);
|
||||||
|
translate([-10, height / 2.0 - 15, -5]) cube([6, 6, 10]);
|
||||||
|
translate([19, -height / 2.0 + 15, -5]) cube([6, 6, 10]);
|
||||||
|
translate([-10, -height / 2.0 + 15, -5]) cube([6, 6, 10]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// snap fits
|
||||||
|
translate([0, -220, 0]) {
|
||||||
|
translate([0, -height / 2.0 - 2.8, 9]) snapfit();
|
||||||
|
translate([0, -height / 2.0 - 2.8, 17]) snapfit();
|
||||||
|
translate([0, height / 2.01 - 2, 9]) rotate(180, [1, 0, 0]) snapfit();
|
||||||
|
translate([0, height / 2.01 - 2, 17]) rotate(180, [1, 0, 0])snapfit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -16,42 +16,26 @@ for (i = [10:10:100]) {
|
|||||||
translate([15, i, 0]) cylinder(20, 5, 1);
|
translate([15, i, 0]) cylinder(20, 5, 1);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
include <common.scad>
|
||||||
module snapfit()
|
include <laptop-bottom.scad>
|
||||||
{
|
|
||||||
difference() {
|
|
||||||
union() {
|
|
||||||
translate([-5, 1.5, -2.5]) cube([14, 3, 5]);
|
|
||||||
translate([5, -1, -2.5]) cube([4, 3, 5]);
|
|
||||||
translate([17, 0.5, -2.5]) rotate(15, [0, 0, 1]) cube([2, 1.5, 5]);
|
|
||||||
translate([18.41, 1.05, -2.5]) cube([1.5, 1.4, 5]);
|
|
||||||
}
|
|
||||||
union() {
|
|
||||||
translate([3.0, -5.0, -3]) rotate(28, [0, 0, 1]) cube([12, 4, 6]);
|
|
||||||
translate([-0.5, -0.3, -3.0]) cube([3, 3, 8]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
module snapfit_neg()
|
|
||||||
{
|
|
||||||
w = 12.0;
|
|
||||||
sw = 2.0;
|
|
||||||
translate([20, -w / 2.0 - sw, -2.5]) cube([1.5, w, 5]);
|
|
||||||
}
|
|
||||||
|
|
||||||
module snapfits()
|
module snapfits()
|
||||||
{
|
{
|
||||||
translate([0, -height / 2.0, 5]) snapfit();
|
translate([0, -height / 2.0, 5]) snapfit();
|
||||||
translate([0, -height / 2.0, 12]) snapfit();
|
translate([0, -height / 2.0, 13]) snapfit();
|
||||||
translate([0, height / 2.0, 5]) rotate(180, [1, 0, 0]) snapfit();
|
translate([0, height / 2.0, 5]) rotate(180, [1, 0, 0]) snapfit();
|
||||||
translate([0, height / 2.0, 12]) rotate(180, [1, 0, 0])snapfit();
|
translate([0, height / 2.0, 13]) rotate(180, [1, 0, 0])snapfit();
|
||||||
}
|
}
|
||||||
module snapfits_neg()
|
module snapfits_neg()
|
||||||
{
|
{
|
||||||
translate([0, -height / 2.0, 5]) snapfit_neg();
|
translate([0, -height / 2.0, 5]) snapfit_neg();
|
||||||
translate([0, -height / 2.0, 12]) snapfit_neg();
|
translate([0, -height / 2.0, 13]) snapfit_neg();
|
||||||
translate([0, height / 2.0, 5]) rotate(180, [1, 0, 0]) snapfit_neg();
|
translate([0, height / 2.0, 5]) rotate(180, [1, 0, 0]) snapfit_neg();
|
||||||
translate([0, height / 2.0, 12]) rotate(180, [1, 0, 0])snapfit_neg();
|
translate([0, height / 2.0, 13]) rotate(180, [1, 0, 0])snapfit_neg();
|
||||||
|
translate([19, height / 2.0 - 12, -5]) cube([6, 6, 10]);
|
||||||
|
translate([-10, height / 2.0 - 12, -5]) cube([6, 6, 10]);
|
||||||
|
translate([19, -height / 2.0 + 12, -5]) cube([6, 6, 10]);
|
||||||
|
translate([-10, -height / 2.0 + 12, -5]) cube([6, 6, 10]);
|
||||||
}
|
}
|
||||||
|
|
||||||
module cutout(h, r, r1, r2)
|
module cutout(h, r, r1, r2)
|
||||||
@@ -120,41 +104,43 @@ module main_cutout()
|
|||||||
}
|
}
|
||||||
module main_model()
|
module main_model()
|
||||||
{
|
{
|
||||||
union() {
|
|
||||||
difference() {
|
|
||||||
union() {
|
union() {
|
||||||
main_shell();
|
difference() {
|
||||||
translate([-width / 2.0 - 20.0 - radius2, -height / 2.0 - radius4 / 1.5, 0]) support(20.0, 22.0, width, height, 5.0);
|
union() {
|
||||||
translate([width / 2.0 + radius2, -height / 2.0 - radius4 / 1.5, 0]) support(20.0, 22.0, width, height, 5.0);
|
main_shell();
|
||||||
}
|
translate([-width / 2.0 - 20.0 - radius2, -height / 2.0 - radius4 / 1.5, 0]) support(20.0, 22.0, width, height, 5.0);
|
||||||
union() {
|
translate([width / 2.0 + radius2, -height / 2.0 - radius4 / 1.5, 0]) support(20.0, 22.0, width, height, 5.0);
|
||||||
main_cutout();
|
|
||||||
snapfits_neg();
|
|
||||||
for (i = [0: 3.6 + 3.0: 130.0]) {
|
|
||||||
translate([0, -height / 2.0 + i + 30.0, 0])
|
|
||||||
vents();
|
|
||||||
echo(i);
|
|
||||||
}
|
}
|
||||||
translate([-65, -50, -5]) cube([130, 100, 20]);
|
union() {
|
||||||
translate([-80, -45, -10]) cube([160, 90, 20]);
|
main_cutout();
|
||||||
translate([-60, -60, -10]) cube([120, 120, 20]);
|
snapfits_neg();
|
||||||
|
for (i = [0: 3.6 + 3.0: 130.0]) {
|
||||||
|
translate([0, -height / 2.0 + i + 30.0, 0])
|
||||||
|
vents();
|
||||||
|
echo(i);
|
||||||
|
}
|
||||||
|
translate([-65, -50, -5]) cube([130, 100, 20]);
|
||||||
|
translate([-80, -45, -10]) cube([160, 90, 20]);
|
||||||
|
translate([-60, -60, -10]) cube([120, 120, 20]);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
difference() {
|
||||||
difference() {
|
translate([-70, -55, -5]) cube([140, 110, 15]);
|
||||||
translate([-70, -55, 0]) cube([140, 110, 15]);
|
union() {
|
||||||
union() {
|
translate([0, -100, -50]) cube([15, 200, 100]);
|
||||||
translate([-65, -50, -5]) cube([130, 100, 15]);
|
translate([-65, -50, -10]) cube([130, 100, 15]);
|
||||||
translate([0, -100, -50]) cube([15, 200, 100]);
|
translate([-80, -45, -15]) cube([160, 90, 20]);
|
||||||
translate([-80, -45, -10]) cube([160, 90, 20]);
|
translate([-60, -60, -15]) cube([120, 120, 20]);
|
||||||
translate([-60, -60, -10]) cube([120, 120, 20]);
|
translate([-35, -40, -15]) cube([70, 80, 30]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
snapfits();
|
||||||
}
|
}
|
||||||
snapfits();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (PART == "all") {
|
if (PART == "all") {
|
||||||
main_model();
|
main_model();
|
||||||
|
bottom_model();
|
||||||
} else if (PART == "left") {
|
} else if (PART == "left") {
|
||||||
intersection() {
|
intersection() {
|
||||||
main_model();
|
main_model();
|
||||||
@@ -165,4 +151,14 @@ if (PART == "all") {
|
|||||||
main_model();
|
main_model();
|
||||||
translate([10, -110, -200]) cube([220, 220, 400]);
|
translate([10, -110, -200]) cube([220, 220, 400]);
|
||||||
}
|
}
|
||||||
}
|
} else if (PART == "bottom_left") {
|
||||||
|
intersection() {
|
||||||
|
bottom_model();
|
||||||
|
translate([-210, -110 - 220, -200]) cube([220, 220, 400]);
|
||||||
|
}
|
||||||
|
} else if (PART == "bottom_right") {
|
||||||
|
intersection() {
|
||||||
|
bottom_model();
|
||||||
|
translate([10, -110 - 220, -200]) cube([220, 220, 400]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user