tool: Light panel #9
|
@ -0,0 +1,54 @@
|
||||||
|
from dataclasses import dataclass
|
||||||
|
import cadquery as Cq
|
||||||
|
from nhf import Material, Role
|
||||||
|
from nhf.build import Model, target, assembly, TargetKind
|
||||||
|
import nhf.utils
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class LightPanel(Model):
|
||||||
|
|
||||||
|
# Dimensions of the base panel
|
||||||
|
length: float = 300.0
|
||||||
|
width: float = 200.0
|
||||||
|
|
||||||
|
grid_height: float = 30.0
|
||||||
|
grid_top_height: float = 10.0
|
||||||
|
# Distance from grid to edge
|
||||||
|
grid_margin: float = 20.0
|
||||||
|
# Number of holes in each row of the grid
|
||||||
|
grid_holes: int = 5
|
||||||
|
grid_layers: int = 10
|
||||||
|
grid_hole_width: float = 10.0
|
||||||
|
|
||||||
|
base_thickness: float = 25.4/16
|
||||||
|
grid_thickness: float = 25.4/8
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
assert self.grid_holes >= 2
|
||||||
|
super().__init__(name="crown")
|
||||||
|
|
||||||
|
@target(name="grid", kind=TargetKind.DXF)
|
||||||
|
def grid_profile(self):
|
||||||
|
w = self.length - self.grid_margin * 2
|
||||||
|
h = self.grid_height + self.grid_top_height
|
||||||
|
|
||||||
|
# The width of one hole (w0) satisfies
|
||||||
|
# n * w0 + (n+1) t = w
|
||||||
|
# where t is the thickness of the edge
|
||||||
|
n = self.grid_holes
|
||||||
|
w0 = self.grid_hole_width
|
||||||
|
t = (w - n * w0) / (n + 1)
|
||||||
|
# The spacing is such that the first and last holes are a distance `t`
|
||||||
|
# away from the edges, so it satisfies
|
||||||
|
# t + w0/2 + (n-1) * s + w0/2 + t = w
|
||||||
|
step = (w - t*2 - w0) / (n - 1)
|
||||||
|
return (
|
||||||
|
Cq.Sketch()
|
||||||
|
.push([(0, h/2)])
|
||||||
|
.rect(w, h)
|
||||||
|
.push([
|
||||||
|
(i * step + t + w0/2 - w/2, self.grid_height/2)
|
||||||
|
for i in range(0, n)
|
||||||
|
])
|
||||||
|
.rect(w0, self.grid_height, mode='s')
|
||||||
|
)
|
Loading…
Reference in New Issue