mirror of
https://github.com/Proteus-Typer/model-a.git
synced 2024-11-24 03:52:22 +00:00
85 lines
1.9 KiB
Python
85 lines
1.9 KiB
Python
|
from utils import extrude_shape, punch_hole
|
||
|
import cadquery as cq
|
||
|
|
||
|
elements = None
|
||
|
bottom_holes = None
|
||
|
|
||
|
# These are set from dimensions.py
|
||
|
pillar_width = 0
|
||
|
pillar_height = 0
|
||
|
screw_head_radius = 0
|
||
|
screw_head_depth = 0
|
||
|
screw_radius = 0
|
||
|
|
||
|
|
||
|
def init(positions, thickness):
|
||
|
"""Because these need to match in multiple models, we create the
|
||
|
elemments dynamically"""
|
||
|
global elements, bottom_holes
|
||
|
elements = [
|
||
|
{
|
||
|
"x": 0,
|
||
|
"y": 0,
|
||
|
"shape": cq.Sketch()
|
||
|
.push(positions)
|
||
|
.trapezoid(pillar_width, pillar_height, 90, mode="a"),
|
||
|
"height": thickness,
|
||
|
}
|
||
|
]
|
||
|
|
||
|
bottom_holes = [
|
||
|
{
|
||
|
"x": 0,
|
||
|
"y": 0,
|
||
|
"shape": cq.Sketch().push(positions).circle(screw_head_radius, mode="a"),
|
||
|
"depth": screw_head_depth,
|
||
|
},
|
||
|
{
|
||
|
"x": 0,
|
||
|
"y": 0,
|
||
|
"shape": cq.Sketch().push(positions).circle(screw_radius, mode="a"),
|
||
|
"depth": 100,
|
||
|
},
|
||
|
]
|
||
|
|
||
|
|
||
|
def add(
|
||
|
*,
|
||
|
model,
|
||
|
width,
|
||
|
height,
|
||
|
thickness,
|
||
|
offset_x,
|
||
|
offset_y,
|
||
|
bottom_face,
|
||
|
back_face,
|
||
|
shell_t
|
||
|
):
|
||
|
if bottom_face:
|
||
|
# Mounting pillars
|
||
|
for element in elements:
|
||
|
model = extrude_shape(
|
||
|
model=model,
|
||
|
face=bottom_face,
|
||
|
w=width,
|
||
|
h=height,
|
||
|
x_offset=offset_x,
|
||
|
y_offset=shell_t + offset_y,
|
||
|
element=element,
|
||
|
height=-(element["height"] + shell_t),
|
||
|
)
|
||
|
# Screw holes
|
||
|
for hole in bottom_holes:
|
||
|
model = punch_hole(
|
||
|
model=model,
|
||
|
face=bottom_face,
|
||
|
w=width,
|
||
|
h=height,
|
||
|
x_offset=offset_x,
|
||
|
y_offset=shell_t + offset_y,
|
||
|
hole=hole,
|
||
|
depth=hole["depth"],
|
||
|
)
|
||
|
|
||
|
return model
|