# eigene Komponenten
import FreeCAD
import Part
from FreeCAD import Placement, Rotation, Vector

# Definitionen
M20G =   1.6 / 2       # Radius einer Bohrung für M2 Gewinde
M20B =   2.2 / 2       # Radius einer Bohrung für M2 Schraube
M20KL =  4.1 / 2       # Radius des Linsen- oder Zylinderkopfes einer M2 Schraube (mit Zugabe zum Versenken)
M20KU =  4.7 / 2       # Radius des Kopfes einer M2 Schraube mit großer Unterlegscheibe (mit Zugabe zum Versenken)
M20KUG = 6.1 / 2       # Radius des Kopfes einer M2 Schraube mit großer Unterlegscheibe (mit Zugabe zum Versenken)
M20KF =  5.1 / 2       # Radius des Kopfes einer M2 Schraube mit Flansch (mit Zugabe zum Versenken) ### geschätzt ###
M20KH =  2.5           # Kopfhöhe einer M2 Schraube (mit Zugabe zum Versenken)
M25G =   2.0 / 2       # Radius einer Bohrung für M2.5 Gewinde
M25B =   2.6 / 2       # Radius einer Bohrung für M2.5 Schraube
M25KL =  4.8 / 2       # Radius des Linsen- oder Zylinderkopfes einer M2.5 Schraube (mit Zugabe zum Versenken)
M25KU =  5.2 / 2       # Radius des Kopfes einer M2.5 Schraube mit Unterlegscheibe (mit Zugabe zum Versenken)
M25KF =  5.8 / 2       # Radius des Kopfes einer M2.5 Schraube mit Flansch (mit Zugabe zum Versenken)
M25KH =  2.5           # Kopfhöhe einer M2.5 Schraube (mit Zugabe zum Versenken)
M30G =   2.4 / 2       # Radius einer Bohrung für M3 Gewinde
M30B =   3.2 / 2       # Radius einer Bohrung für M3 Schraube
M30KL =  5.7 / 2       # Radius des Linsen- oder Zylinderkopfes einer M3 Schraube (mit Zugabe zum Versenken)
M30KU =  7.2 / 2       # Radius des Kopfes einer M3 Schraube mit großer Unterlegscheibe (mit Zugabe zum Versenken)
M30KUG = 9.0 / 2       # Radius des Kopfes einer M3 Schraube mit großer Unterlegscheibe (mit Zugabe zum Versenken)
M30KF =  7.2 / 2       # Radius des Kopfes einer M3 Schraube mit Flansch (mit Zugabe zum Versenken)
M30KH =  3.0           # Kopfhöhe einer M3 Schraube (mit Zugabe zum Versenken)

def m20g(len):  # M2 Gewinde
    return (Part.makeCylinder(M20G, len))

def m25g(len):  # M2.5 Gewinde
    return (Part.makeCylinder(M25G, len))

def m30g(len):  # M3 Gewinde
    return (Part.makeCylinder(M30G, len))

def m20b(len):  # M2 Bohrung
    return (Part.makeCylinder(M20B, len))

def m25b(len):  # M2.5 Bohrung
    return (Part.makeCylinder(M25B, len))

def m30b(len):  # M3 Bohrung
    return (Part.makeCylinder(M30B, len))

def m20sl(len): # M2 Linsenkopfschraube
    return (Part.makeCylinder(M20KL, M20KH).fuse(Part.makeCylinder(M20B, len+M20KH)))

def m25sl(len): # M2.5 Linsenkopfschraube
    return (Part.makeCylinder(M25KL, M25KH).fuse(Part.makeCylinder(M25B, len+M25KH)))

def m30sl(len): # M3 Linsenkopfschraube
    return (Part.makeCylinder(M30KL, M30KH).fuse(Part.makeCylinder(M30B, len+M30KH)))



