Compare commits

31 Commits

Author SHA1 Message Date
bebc4d5729 Move keyboard cable hole 6mm to the left 2022-12-02 11:26:52 -03:00
26dc83baf9 Larger kbd cable hole makes shape simpler 2022-12-02 10:05:27 -03:00
29e2464bef Bring back missing screen mounting pillar 2022-12-02 10:04:23 -03:00
4386b1c017 Split the screen mount so it needs fewer supports 2022-12-01 15:20:57 -03:00
8058118491 Slightly larger hole for power switch 2022-12-01 12:29:33 -03:00
4279547773 Refactor screen_mount script a bit 2022-11-30 14:29:42 -03:00
e4a011f5bd Single mounting beam at the back 2022-11-30 07:43:14 -03:00
a2932a4e49 Screw heads are a bit bigger than expected 2022-11-29 09:27:15 -03:00
2a48edb3cf Mounting pillars and screwholes to join top and bottom cases 2022-11-28 15:09:49 -03:00
f549fb32b0 Thicker walls 2022-11-28 12:19:56 -03:00
db5e874d91 Fix screen holder split, add cutout for kbd cable 2022-11-28 11:26:23 -03:00
f01e5a92ee bump 2022-11-28 10:36:18 -03:00
59882af24f Shorter screen holder, rounded top, screen slightly slower 2022-11-25 18:15:42 -03:00
6e8869363e Refactor, comments 2022-11-25 17:11:31 -03:00
bf1f0cc4ce Missing files, screen mount simplified 2022-11-25 14:46:30 -03:00
e9b3a42564 More work on the screen mount 2022-11-25 12:28:39 -03:00
b8d902ea11 Basic screen bezels 2022-11-24 17:45:59 -03:00
8534d25e4b Make the stand a bit taller to allow cable to pass below 2022-11-24 14:45:43 -03:00
8b152fc844 Make the stand a bit taller to allow cable to pass below 2022-11-24 14:44:17 -03:00
c5b2d68518 Prototype CPU holder 2022-11-24 11:24:38 -03:00
18a8e9a904 Add power switch hole 2022-11-24 10:30:05 -03:00
85d4fb661f Built 2022-11-24 09:55:09 -03:00
c127e5f34b Thicker walls in the battery holder 2022-11-24 09:54:11 -03:00
f9987f43e9 kbd width was wrong 2022-11-24 09:51:53 -03:00
6f15cd32d5 battery holder tweak 2022-11-24 09:51:40 -03:00
6e01b44b52 USB inlet port 2022-11-23 10:25:10 -03:00
897e314f9e * Round stands
* Battery holder
* Power cable cutoff
* Dimensional fixes
2022-11-22 15:41:47 -03:00
df1ee0d425 Make it fit in the printer 2022-11-15 16:04:54 -03:00
4114adb49a Split in cadquery 2022-11-15 16:01:20 -03:00
c4bae182c6 Split in quad 2022-11-15 15:24:52 -03:00
9f295d921e Split in quad 2022-11-15 15:24:45 -03:00
17 changed files with 307106 additions and 25125 deletions

View File

@ -1,37 +0,0 @@
import cadquery2 as cq
from cadquery2 import exporters
# The hole for the "peg" where this goes
peg_front = 9.5
peg_side = 9
peg_height = 12
# General size of the handle
width = 20
length = 70
height = 16
# General shape of the handle seen from above
handle_shape_top = cq.Sketch().trapezoid(width, length, 85).vertices().fillet(3)
hole_shape = cq.Sketch().trapezoid(peg_front, peg_side, 90)
bottom_cutout = cq.Sketch().trapezoid(width, length - width, 90)
handle = (
cq.Workplane("XY")
.placeSketch(handle_shape_top)
.extrude(height)
.faces("<Z")
.workplane(centerOption="CenterOfBoundBox")
.center(0, length/2 - width/2)
.placeSketch(hole_shape)
.cutBlind(-peg_height)
.faces("<Z")
.workplane(centerOption="CenterOfBoundBox")
.center(0, -width/2)
.placeSketch(bottom_cutout)
.cutBlind(-height/2)
)
exporters.export(handle, "guardacosas.stl")

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,28 @@
import cadquery2 as cq
from cadquery2 import exporters
lower_stands = (
cq.Sketch().push([(0, 0), (58, 0), (58, 23), (0, 23)]).circle(3, mode="a")
)
higher_stands = (
cq.Sketch().push([(0, 0), (58, 0), (58, 23), (0, 23)]).circle(2.65 / 2, mode="a")
)
model = (
cq.Workplane("XY")
.workplane()
.box(75, 40, 2)
.edges("+Z")
.fillet(3)
.faces(">Z")
.workplane(centerOption="CenterOfBoundBox")
.center(-29, -11.5)
.placeSketch(lower_stands)
.extrude(4)
.workplane()
.placeSketch(higher_stands)
.extrude(9)
)
exporters.export(model, "cpu_holder.stl")

31894
notebook_nueva/cpu_holder.stl Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

43892
notebook_nueva/left_side.stl Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -4,22 +4,26 @@ from cadquery2 import exporters
# Base for the notebook. Basically a kbd base that extends back
# as much as possible
# Size of the whole object
width = 295
height = 165
thickness = 25
kbd_height = 100
kbd_angle = 6
# Thickness of the outer material
shell_t = 3
# Size of the kbd board
kbd_height = 98
kbd_width = 286
kbd_angle = 5
# Size of the whole object
width = kbd_width + 2 * shell_t
height = 164 # Max bed size
thickness = 20 + shell_t # 20 inside
# Insert Positions
ti_radius = 2.35
ti_depth = 6.25
pillars = (
# Positions are determined by measuring the keyboard
# mounting holes
kbd_pillars = (
cq.Sketch()
.push(
[
@ -31,41 +35,166 @@ pillars = (
(261.5, -86),
]
)
.trapezoid(12, 12, 90, mode="a")
.circle(6, mode="a")
# Holes for M3 threaded inserts
.circle(ti_radius, mode="s")
)
# These are placed where convenient, and are used to join the top and bottom
# parts of the case.
# Measured from top-left corner OUTSIDE
mounting_pillar_positions = [
(6, -6),
(120, -6),
(170, -6),
(width - 6, -6),
(width - 6, -40),
]
model = (
cq.Workplane("XY")
.workplane(offset=thickness / 2)
.tag("mid_height")
# Hollow box
.box(width, height, thickness)
.edges("|Z")
.fillet(2)
.faces(">Z")
.shell(-shell_t)
# Make the lower part solid to mount the kbd
# .faces("<Z")
# .workplane(centerOption="CenterOfBoundBox", offset=-thickness / 2)
# .center(0, height * 0.5 - 20)
# .box(width, 40, thickness)
# # Mounting pillars on the kbd top
.faces(">Z")
.workplane(centerOption="CenterOfBoundBox")
.center(-width/2, 17)
.transformed(rotate=cq.Vector(kbd_angle, 0, 0))
.tag("sloped")
.placeSketch(pillars)
.extrude(-1000)
# Remove the excess extrusion
.workplaneFromTagged("mid_height")
.transformed(offset=cq.Vector(0, 0, -thickness / 2))
.split(keepTop=True)
# Slope for the beyboard
.workplaneFromTagged("sloped")
.split(keepBottom=True)
mounting_pillars = (
cq.Sketch()
.push(mounting_pillar_positions)
.trapezoid(12, 12, 90, mode="a")
.circle(1.8, mode="s")
)
exporters.export(model, "model.stl")
screw_holes = cq.Sketch().push(mounting_pillar_positions).circle(3, mode="a")
battery_holder = (
cq.Sketch()
.polygon(
[(-67, 5), (0, 5), (0, -12), (-67, -12), (-67, 5)],
mode="a",
)
.trapezoid(83, 83, 90, mode="a")
.trapezoid(80, 80, 90, mode="s")
.polygon(
[(-67, 3), (0, 3), (0, -10), (-67, -10), (-67, 3)],
mode="s",
)
# Cutout for the
.polygon(
[(-67, 30), (0, 30), (0, 12), (-67, 12), (-67, 30)],
mode="s",
)
)
power_in = cq.Sketch().circle(5, mode="a")
usb_in = cq.Sketch().trapezoid(13, 5.5, 90, mode="a")
switch_in = cq.Sketch().trapezoid(13.5, 8.5, 90, mode="a")
# Motherboard mount
def model():
return (
cq.Workplane("XY")
.workplane(offset=thickness / 2)
.tag("mid_height")
# Hollow box
.box(width, height, thickness)
.edges("|Z")
.fillet(2)
.faces(">Z")
.shell(-shell_t)
# Battery holder
.workplaneFromTagged("mid_height")
.center(-width / 2 + shell_t + 65, height / 2 - shell_t - 45)
.placeSketch(battery_holder)
.extrude(-height / 2)
# Power cable inlet
.faces("<X")
.workplane(centerOption="CenterOfBoundBox")
.center(-height / 2 + shell_t + 48.5, -3)
.placeSketch(power_in)
.cutBlind(-shell_t)
# USB inlet
.faces(">X")
.workplane(centerOption="CenterOfBoundBox")
.center(-height / 2 + shell_t + 50, -5)
.placeSketch(usb_in)
.cutBlind(-shell_t)
# Hole for power switch
.faces(">Y")
.workplane(centerOption="CenterOfBoundBox")
.center(0, 0)
.placeSketch(switch_in)
.cutBlind(-shell_t)
# Slanted mounting pillars on the kbd top
.faces(">Z")
.workplane(centerOption="CenterOfBoundBox")
# Top-left kbd corner inside the box
.center(-width / 2 + shell_t, kbd_height - height / 2 + shell_t)
.transformed(rotate=cq.Vector(kbd_angle, 0, 0))
.tag("sloped")
.placeSketch(kbd_pillars)
.extrude(-1000)
# Remove the excess extrusion
.workplaneFromTagged("mid_height")
.transformed(offset=cq.Vector(0, 0, -thickness / 2))
.split(keepTop=True)
# Slope for the beyboard
.workplaneFromTagged("sloped")
.split(keepBottom=True)
# Pillars to join with top half
.workplaneFromTagged("mid_height")
.workplane(offset=-thickness / 2, centerOption="CenterOfBoundBox")
.center(-width / 2, height / 2)
.placeSketch(mounting_pillars)
.extrude(thickness)
# Holes to insert screws from the bottom
.workplaneFromTagged("mid_height")
.workplane(offset=-thickness / 2, centerOption="CenterOfBoundBox")
.center(-width / 2, height / 2)
.placeSketch(screw_holes)
# 13 is 20-7 (screw thread length - threaded insert depth)
.cutBlind(thickness - 13)
)
if __name__ == "__main__":
left_cutout = cq.Sketch().polygon(
[(0, 0), (160, 0), (160, -100), (135, -100), (135, -200), (0, -200), (0, 0)],
mode="a",
)
right_side = (
model()
.faces("<Z")
.workplaneFromTagged("mid_height")
.transformed(offset=cq.Vector(0, 0, -thickness / 2))
.center(-width / 2, height / 2)
.placeSketch(left_cutout)
.cutBlind(100)
)
exporters.export(right_side, "right_side.stl")
right_cutout = cq.Sketch().polygon(
[
(160, 0),
(width, 0),
(width, -height),
(135, -height),
(135, -100),
(160, -100),
(160, 0),
],
mode="a",
)
left_side = (
model()
.faces("<Z")
.workplaneFromTagged("mid_height")
.transformed(offset=cq.Vector(0, 0, -thickness / 2))
.center(-width / 2, height / 2)
.placeSketch(right_cutout)
.cutBlind(100)
)
exporters.export(left_side, "left_side.stl")
exporters.export(model(), "model.stl")

File diff suppressed because it is too large Load Diff

Binary file not shown.

46804
notebook_nueva/right_side.stl Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,137 @@
import cadquery2 as cq
from cadquery2 import exporters
from modelo import (
kbd_height,
kbd_width,
mounting_pillar_positions,
shell_t,
ti_depth,
ti_radius,
)
# Size of the whole object
width = kbd_width + 2 * shell_t
height = 59
thickness = 62 # Will be shorter after construction
# Visible screen size
vis_w = 220
vis_h = 58
viewport_cutout = cq.Sketch().trapezoid(vis_w, vis_h, 90, mode="a")
# Whole screen size
scr_w = 231
scr_h = 65
scr_thickness = 5.5
screen_cutout = cq.Sketch().trapezoid(scr_w, scr_h, 90, mode="a")
# Circuit board and cable hole.
# This is in the back of the screen, and is a bit shorter in height than the
# screen. It's wider so it removes enough material to make the shape simpler.
board_cutout = cq.Sketch().trapezoid(
scr_w + 5,
scr_h - 10,
90,
mode="a",
)
kbd_cable_hole = cq.Sketch().trapezoid(15, 6, 90, mode="a").vertices().fillet(1)
# The last mounting pillar is handled specially
x, y = mounting_pillar_positions[-1]
mounting_pillars = (
cq.Sketch()
.polygon([(0, 0), (width, 0), (width, -12), (0, -12), (0, 0)], mode="a")
.polygon(
[(x - 6, y - 6), (x - 6, y + 6), (x + 6, y + 6), (x + 6, y - 6), (x - 6, y - 6)]
)
.push(mounting_pillar_positions)
.circle(ti_radius, mode="s")
)
def model():
return (
cq.Workplane("XY")
.workplane()
.tag("mid_height")
.box(width, height, thickness)
# The screen goes at a 45 degree angle
.faces(">Z")
.transformed(rotate=(45, 0, 0))
# Move the screen "lower" so it doesn't interfere
# so much with the back
.center(0, -2)
.tag("slanted")
# Arbitrary huge trapezoid to cut off the material *in front*
# of the inclined screen
.placeSketch(cq.Sketch().trapezoid(1000, 1000, 90, mode="a"))
.cutBlind(1000)
# Cut off viewport hole so we can see the screen
.workplaneFromTagged("slanted")
.placeSketch(viewport_cutout)
.cutBlind(-shell_t)
# Make hole for screen assembly so the whole screen fits
.workplaneFromTagged("slanted")
.workplane(offset=-shell_t, centerOption="CenterOfBoundBox")
# Left bezel is wider than right one, so this hole is displaced to the left
.center(-3, 0)
.placeSketch(screen_cutout)
.cutBlind(-scr_thickness)
# Trim the top
.workplaneFromTagged("mid_height")
.workplane(offset=21)
.placeSketch(cq.Sketch().trapezoid(1000, 1000, 90, mode="a"))
.cutBlind(100)
# Make it hollow
.faces("<Z")
# Can't be exactly shell_t because cq fails
.shell(-shell_t + 0.01)
# Cut hole for the screen board and cables
.workplaneFromTagged("slanted")
.workplane(offset=-scr_thickness, centerOption="CenterOfBoundBox")
.placeSketch(board_cutout)
.cutBlind(-6)
# Fillet top of the object
.edges(">Z and |X")
.fillet(5)
# Make small hole for the keyboard cable
.faces(">Y")
.workplane(offset=-5, centerOption="CenterOfBoundBox")
.center(-width / 2 + 134, -24)
.placeSketch(kbd_cable_hole)
.cutBlind(-1000)
# Pillars to join with bottom half
.workplaneFromTagged("mid_height")
.workplane(offset=-thickness / 2, centerOption="CenterOfBoundBox")
.center(-width / 2, height / 2)
.placeSketch(mounting_pillars)
.extrude(10)
)
if __name__ == "__main__":
print("Exporting")
exporters.export(model(), "screen_mount.stl")
offset_width = -133
right_side = (
model()
.faces(">X")
.workplane(centerOption="CenterOfBoundBox", offset=offset_width)
.split(keepTop=True)
)
exporters.export(right_side, "right_screen_mount.stl")
left_side = (
model()
.faces(">X")
.workplane(centerOption="CenterOfBoundBox", offset=offset_width)
.split(keepBottom=True)
)
exporters.export(left_side, "left_screen_mount.stl")

File diff suppressed because it is too large Load Diff