Compare commits
No commits in common. "2a48edb3cf7837496139528773ce673f758bcde5" and "db5e874d91ad6f10ae047bf2116267433081ad03" have entirely different histories.
2a48edb3cf
...
db5e874d91
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
63248
notebook_nueva/model.stl
63248
notebook_nueva/model.stl
File diff suppressed because it is too large
Load Diff
@ -21,9 +21,7 @@ thickness = 20 + shell_t # 20 inside
|
||||
ti_radius = 2.35
|
||||
ti_depth = 6.25
|
||||
|
||||
# Positions are determined by measuring the keyboard
|
||||
# mounting holes
|
||||
kbd_pillars = (
|
||||
pillars = (
|
||||
cq.Sketch()
|
||||
.push(
|
||||
[
|
||||
@ -36,30 +34,9 @@ kbd_pillars = (
|
||||
]
|
||||
)
|
||||
.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),
|
||||
(width - 6, -6),
|
||||
(width - 6, -40),
|
||||
(120, -6),
|
||||
(170, -6),
|
||||
]
|
||||
|
||||
mounting_pillars = (
|
||||
cq.Sketch()
|
||||
.push(mounting_pillar_positions)
|
||||
.trapezoid(12, 12, 90, mode="a")
|
||||
.circle(1.5, mode="s")
|
||||
)
|
||||
|
||||
screw_holes = cq.Sketch().push(mounting_pillar_positions).circle(3, mode="a")
|
||||
|
||||
battery_holder = (
|
||||
cq.Sketch()
|
||||
.polygon(
|
||||
@ -72,11 +49,6 @@ battery_holder = (
|
||||
[(-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",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@ -85,9 +57,6 @@ usb_in = cq.Sketch().trapezoid(13, 5.5, 90, mode="a")
|
||||
switch_in = cq.Sketch().trapezoid(13.5, 8, 90, mode="a")
|
||||
|
||||
|
||||
# Motherboard mount
|
||||
|
||||
|
||||
def model():
|
||||
return (
|
||||
cq.Workplane("XY")
|
||||
@ -119,7 +88,7 @@ def model():
|
||||
# Hole for power switch
|
||||
.faces(">Y")
|
||||
.workplane(centerOption="CenterOfBoundBox")
|
||||
.center(0, 0)
|
||||
.center(-height / 2 + shell_t + 50, 0)
|
||||
.placeSketch(switch_in)
|
||||
.cutBlind(-shell_t)
|
||||
# Slanted mounting pillars on the kbd top
|
||||
@ -129,7 +98,7 @@ def model():
|
||||
.center(-width / 2 + shell_t, kbd_height - height / 2 + shell_t)
|
||||
.transformed(rotate=cq.Vector(kbd_angle, 0, 0))
|
||||
.tag("sloped")
|
||||
.placeSketch(kbd_pillars)
|
||||
.placeSketch(pillars)
|
||||
.extrude(-1000)
|
||||
# Remove the excess extrusion
|
||||
.workplaneFromTagged("mid_height")
|
||||
@ -138,63 +107,48 @@ def model():
|
||||
# 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",
|
||||
)
|
||||
|
||||
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)
|
||||
)
|
||||
|
||||
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")
|
||||
|
||||
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",
|
||||
)
|
||||
|
||||
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")
|
||||
|
||||
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")
|
||||
exporters.export(model(), "model.stl")
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,19 +1,21 @@
|
||||
import cadquery2 as cq
|
||||
from cadquery2 import exporters
|
||||
|
||||
from modelo import (
|
||||
kbd_height,
|
||||
kbd_width,
|
||||
mounting_pillar_positions,
|
||||
shell_t,
|
||||
ti_depth,
|
||||
ti_radius,
|
||||
)
|
||||
# Some dimensions copied from modelo.py,
|
||||
# TODO refactor into a separate file
|
||||
|
||||
# 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 = 59
|
||||
thickness = 62 # Will be shorter after construction
|
||||
height = 69
|
||||
thickness = 10
|
||||
|
||||
# Visible screen size
|
||||
vis_w = 220
|
||||
@ -38,21 +40,13 @@ board_cutout = cq.Sketch().trapezoid(
|
||||
|
||||
kbd_cable_hole = cq.Sketch().trapezoid(15, 5, 90, mode="a").vertices().fillet(1)
|
||||
|
||||
mounting_pillars = (
|
||||
cq.Sketch()
|
||||
.push(mounting_pillar_positions)
|
||||
.trapezoid(12, 12, 90, mode="a")
|
||||
.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
|
||||
.box(width, 59, 62)
|
||||
.faces(">Z")
|
||||
.transformed(rotate=(45, 0, 0))
|
||||
# Move the screen "lower" so it doesn't interfere
|
||||
@ -81,28 +75,21 @@ def model():
|
||||
.cutBlind(100)
|
||||
# Make it hollow
|
||||
.faces("<Z")
|
||||
# Can't be exactly shell_t because cq fails
|
||||
.shell(-shell_t + 0.01)
|
||||
.shell(-2)
|
||||
# Cut hole for the screen board and cables
|
||||
.workplaneFromTagged("slanted")
|
||||
.workplane(offset=-scr_thickness, centerOption="CenterOfBoundBox")
|
||||
.placeSketch(board_cutout)
|
||||
.cutBlind(-6)
|
||||
.cutBlind(-5)
|
||||
# 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 + 128, -23)
|
||||
.center(width / 2 - 128, -23)
|
||||
.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)
|
||||
)
|
||||
|
||||
|
||||
@ -111,7 +98,7 @@ exporters.export(model(), "screen_mount.stl")
|
||||
right_side = (
|
||||
model()
|
||||
.faces(">X")
|
||||
.workplane(centerOption="CenterOfBoundBox", offset=-width / 2)
|
||||
.workplane(centerOption="CenterOfBoundBox", offset=-140)
|
||||
.center(0, height / 2)
|
||||
.split(keepTop=True)
|
||||
)
|
||||
@ -121,7 +108,7 @@ exporters.export(right_side, "right_screen_mount.stl")
|
||||
left_side = (
|
||||
model()
|
||||
.faces(">X")
|
||||
.workplane(centerOption="CenterOfBoundBox", offset=-width / 2)
|
||||
.workplane(centerOption="CenterOfBoundBox", offset=-140)
|
||||
.center(0, height / 2)
|
||||
.split(keepBottom=True)
|
||||
)
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user