Skip to content
This repository has been archived by the owner on Dec 10, 2024. It is now read-only.

Commit

Permalink
Library: Mounting_Hole: Variable diameter and padtype (#50)
Browse files Browse the repository at this point in the history

---------

Co-authored-by: iopapamanoglou <[email protected]>
  • Loading branch information
ruben-iteng and iopapamanoglou authored Sep 11, 2024
1 parent ac74702 commit 38ef043
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 11 deletions.
36 changes: 25 additions & 11 deletions src/faebryk/library/Mounting_Hole.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,46 @@
# SPDX-License-Identifier: MIT

import logging
from enum import StrEnum, auto

import faebryk.library._F as F
from faebryk.core.module import Module
from faebryk.libs.iso_metric_screw_thread import Iso262_MetricScrewThreadSizes
from faebryk.libs.library import L
from faebryk.libs.units import P, Quantity

logger = logging.getLogger(__name__)


class Mounting_Hole(Module):
diameter: F.TBD[Quantity]
class PadType(StrEnum):
NoPad = ""
Pad = auto()
Pad_TopBottom = auto()
Pad_TopOnly = auto()
Pad_Via = auto()

attach_to_footprint: F.can_attach_to_footprint_symmetrically
designator_prefix = L.f_field(F.has_designator_prefix_defined)("H")

def __preinit__(self):
# Only 3.2mm supported for now
self.diameter.merge(F.Constant(3.2 * P.mm))
def __init__(self, diameter: Iso262_MetricScrewThreadSizes, pad_type: PadType):
super().__init__()
self._diameter = diameter
self._pad_type = pad_type

# footprint = L.f_field(F.has_footprint_defined)(
# F.KicadFootprint("MountingHole:MountingHole_3.2mm_M3_Pad", pin_names=[])
# )

# TODO make back to f_field, rt_field because of imports
@L.rt_field
def footprint(self):
size_mm = f"{self._diameter.value:.1f}mm"
size_name = self._diameter.name.replace("_", ".")
padtype = self._pad_type

if size_name:
size_name = f"_{size_name}"
if padtype:
padtype = f"_{padtype}"

return F.has_footprint_defined(
F.KicadFootprint("MountingHole:MountingHole_3.2mm_M3_Pad", pin_names=[])
F.KicadFootprint(
f"MountingHole:MountingHole_{size_mm}{size_name}{padtype}",
pin_names=[],
)
)
39 changes: 39 additions & 0 deletions src/faebryk/libs/iso_metric_screw_thread.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# This file is part of the faebryk project
# SPDX-License-Identifier: MIT


import logging
from enum import Enum

logger = logging.getLogger(__name__)


class Iso262_MetricScrewThreadSizes(Enum):
# TODO add tolerance etc
# i think values are wrong, but api is ok
M1 = 1.2
M1_2 = 1.4
M1_4 = 1.6
M1_6 = 1.8
M1_8 = 2.0
M2 = 2.2
M2_5 = 2.7
M3 = 3.2
M3_5 = 3.7
M4 = 4.3
M5 = 5.3
M6 = 6.4
M8 = 8.4
M10 = 10.4
M12 = 12.4
M14 = 14.4
M16 = 16.4
M20 = 20.4
M24 = 24.4
M30 = 30.4
M36 = 36.4
M42 = 42.4
M48 = 48.4
M56 = 56.4
M60 = 60.4
M64 = 64.4

0 comments on commit 38ef043

Please sign in to comment.