# Schiebekondensator
import FreeCAD
import Part
from FreeCAD import Placement, Rotation, Vector
import comp     # eigene Komponenten
from comp import *
import matplotlib

# Der Ursprung der 3D-Darstellung ist die linke untere Ecke der unteren Statorplatte.

# Definitionen
A_Dicke = 1.07                  # Dicke der Abstandshalter zwischen den Platten (gemessen)
C_Dicke = 0.55                  # Dicke der Kondensatorplatten (gemessen)
D_Dicke = 0.18                  # Dicke des Dielektrikums
D_Width = 54                    # Breite des Dielektrikums (x-Richtung)
D_Height = 28                   # Höhe des Dielektrikums (y-Richtung)

Seitenwand_Laenge = 115         # Gesamtlänge der Seitenwand inklusive Stütze
Stuetzen_Laenge = 30            # Länge der Stützen an der Vorderseite
Seitenwand_Hoehe = 30           # Höhe der Seitenwand ohne Stütze
Seitenwand_Dicke = 6            # Dicke der Seitenwände
Gewindetiefe = 12               # Tiefe der Gewindebohrungen in der Seitenwand
Stepper_Bohrung = 34.1          # Abstand der Stepperbohrungen
Halter_Abstand = 34             # Abstand der Seitenteile, die den Stepper halten (Mitte-Mitte)
Padbohrradius = 0.9/2           # Radius der Bohrungen für die Lötlaschen
Anzahl = 11                     # Anzahl der Platten insgesamt (Schieber plus Stator, muß ungerade sein)
PosSchieber = -30               # Anzeigeposition des Schiebers
Stator_Width = 60               # Breite des Stators (x-Richtung)
Stator_Height = 40              # Höhe des Stators (y-Richtung)
Schieber_Width = 64             # Breite des Schiebers (x-Richtung)
Schieber_Height = 26            # Höhe des Schiebers (y-Richtung)
Stepper_PosX = 50               # X-Position des Steppers
Fuss_Dicke = 6                  # Dicke des Fusses
Fuss_Hoehe = 8.0                # Höhe des Fusses
KL_Dicke = 5.0                  # Dicke des Kugellagers
KL_Aussen = 16.2                # Außendurchmesser des Kugellagers incl. Zugabe
KL_Innen = 8.2                  # Innendurchmesser des Kugellagers incl. Zugabe
HalterTGM_Dicke = 8             # Dicke des Halters für die Trapezgewindemutter
Stepper_Z = 15                  # Montagehöhe des Steppers
Stepper_Dicke = 9.5             # Dicke des Steppers

# Bohrungen für die Schrauben des Stators
Statorbohrung_1 = Vector(7,3,0)
Statorbohrung_2 = Vector(27,3,0)
Statorbohrung_3 = Vector(47,3,0)
Statorbohrung_4 = Vector(7,Stator_Height-3,0)
Statorbohrung_5 = Vector(27,Stator_Height-3,0)
Statorbohrung_6 = Vector(47,Stator_Height-3,0)
Statorbohrung_7 = Vector(Stator_Width-3,10,0)
Statorbohrung_8 = Vector(Stator_Width-3,Stator_Height-10,0)

Plattenabstand = A_Dicke + C_Dicke                                      # Abstand der Kondensatorplatten
Stapeldicke = Plattenabstand*(Anzahl-1)/2+C_Dicke                       # Dicke des Stapels von Unterkante der untersten bis Oberkante der obersten Statorplatte
Oberkante_Schieber = Stapeldicke-C_Dicke-A_Dicke/2+C_Dicke/2            # Z-Position des Läufers = Oberkante des Schieberstapels
HalterTGM_Breite = Halter_Abstand-Seitenwand_Dicke-2                    # Breite des Halters für die Trapezgewindemutter, beidseitig 1 mm Luft
HalterTGM_Hoehe = Seitenwand_Hoehe-1+Stapeldicke-Oberkante_Schieber     # Höhe des Halters für die Trapezgewindemutter, oben 1 mm unter der Seitenwand
HalterTGM_TGMH = Stepper_Z+Stapeldicke-Oberkante_Schieber               # Z-Position der Trapezgewindemutter

# Farben
Farbe_Wand      = matplotlib.colors.to_rgb('royalblue')
Farbe_Schieber  = matplotlib.colors.to_rgb('moccasin')
Farbe_Stator    = matplotlib.colors.to_rgb('turquoise')
Farbe_Stepper   = matplotlib.colors.to_rgb('lightsteelblue')
Farbe_RefSw     = matplotlib.colors.to_rgb('papayawhip')
Farbe_HalterTGM = matplotlib.colors.to_rgb('fuchsia')
Farbe_Fuss      = matplotlib.colors.to_rgb('royalblue')

vec0=Vector(0,0,0)      # Nullvektor
vecx=Vector(1,0,0)      # Drehachse x
vecy=Vector(0,1,0)      # Drehachse y
vecz=Vector(0,0,1)      # Drehachse z

def Seitenwand(links):
   Stuetzen_Hoehe = Stapeldicke+Fuss_Hoehe
   L1 = Part.LineSegment(Vector(0,                0, 0),                               Vector(Stuetzen_Laenge,   0, 0))
   L2 = Part.LineSegment(Vector(Stuetzen_Laenge,  0, 0),                               Vector(Stuetzen_Laenge,   0, Stuetzen_Hoehe))
   L3 = Part.LineSegment(Vector(Stuetzen_Laenge,  0, Stuetzen_Hoehe),                  Vector(Seitenwand_Laenge, 0, Stuetzen_Hoehe))
   L4 = Part.LineSegment(Vector(Seitenwand_Laenge,0, Stuetzen_Hoehe),                  Vector(Seitenwand_Laenge, 0, Stuetzen_Hoehe+Seitenwand_Hoehe))
   L5 = Part.LineSegment(Vector(Seitenwand_Laenge,0, Stuetzen_Hoehe+Seitenwand_Hoehe), Vector(0,                 0, Stuetzen_Hoehe+Seitenwand_Hoehe))
   L6 = Part.LineSegment(Vector(0,                0, Stuetzen_Hoehe+Seitenwand_Hoehe), Vector(0,                 0, 0))
   Sw = Part.Shape([L1, L2, L3, L4, L5, L6])
   Wand = Part.Face(Part.Wire(Sw.Edges)).extrude(Vector(0, Seitenwand_Dicke, 0))
   Wand = Wand.cut(m20g(Gewindetiefe).translate(Vector(6,Seitenwand_Dicke/2,0)))                  # unteres Befestigungsgewinde in der Stütze
   Wand = Wand.cut(m20g(Gewindetiefe).translate(Vector(Stuetzen_Laenge-6,Seitenwand_Dicke/2,0)))  # unteres Befestigungsgewinde in der Stütze
   Wand = Wand.cut(m20g(Gewindetiefe).translate(Vector(Seitenwand_Laenge-43,3,Stuetzen_Hoehe)))   # unteres Befestigungsgewinde in der Seitenwand
   Wand = Wand.cut(m20g(Gewindetiefe).translate(Vector(Seitenwand_Laenge-23,3,Stuetzen_Hoehe)))   # unteres Befestigungsgewinde in der Seitenwand
   Wand = Wand.cut(m20g(Gewindetiefe).translate(Vector(Seitenwand_Laenge-3,3,Stuetzen_Hoehe)))    # unteres Befestigungsgewinde in der Seitenwand
   if links: # linke Seitenwand
      Wand = Wand.cut(m30g(Gewindetiefe).rotate(vec0,vecy, 90).translate(Vector(Seitenwand_Laenge-Gewindetiefe, Seitenwand_Dicke/2-(Stepper_Bohrung-Halter_Abstand), Stuetzen_Hoehe+Stepper_Z))) # Befestigungsgewinde Stepper
      # versenkte M2-Befestigungsschrauben für vorderen Halter der Trapezgewindespindel
      Wand = Wand.cut(m20sl(Seitenwand_Dicke).rotate(vec0,vecx, -90).translate(Vector(Seitenwand_Dicke/2, 0, Stuetzen_Hoehe+5)))
      Wand = Wand.cut(m20sl(Seitenwand_Dicke).rotate(vec0,vecx, -90).translate(Vector(Seitenwand_Dicke/2, 0, Stuetzen_Hoehe+Seitenwand_Hoehe-5)))
   else: # rechte Seitenwand
      Wand = Wand.cut(m30g(Gewindetiefe).rotate(vec0,vecy, 90).translate(Vector(Seitenwand_Laenge-Gewindetiefe, Seitenwand_Dicke/2+(Stepper_Bohrung-Halter_Abstand), Stuetzen_Hoehe+Stepper_Z))) # Befestigungsgewinde Stepper
      # versenkte M2-Befestigungsschrauben für vorderen Halter der Trapezgewindespindel
      Wand = Wand.cut(m20sl(Seitenwand_Dicke).rotate(vec0,vecx, 90).translate(Vector(Seitenwand_Dicke/2, Seitenwand_Dicke, Stuetzen_Hoehe+5)))
      Wand = Wand.cut(m20sl(Seitenwand_Dicke).rotate(vec0,vecx, 90).translate(Vector(Seitenwand_Dicke/2, Seitenwand_Dicke, Stuetzen_Hoehe+Seitenwand_Hoehe-5)))
      # Befestigungsbohrungen für den Referenzschalter ausschneiden
      Wand = Wand.cut(RefSwitchDrill().translate(Vector(Seitenwand_Laenge-Stepper_PosX+5, 0, Stapeldicke+Fuss_Hoehe+5)))
      # Kabeldurchführung
      KabelDF = Part.makeCylinder(1.5/2, 35)
      KabelDF = KabelDF.fuse(KabelDF.copy().translate(Vector(1,0,0)))
      KabelDF = KabelDF.rotate(vec0,vecy, -70).rotate(vec0,vecz, 10)
      KabelDF = KabelDF.translate(Vector(Seitenwand_Laenge+1,  2+Seitenwand_Dicke/2, Stapeldicke+Fuss_Hoehe+6))
      Wand = Wand.cut(KabelDF)
   return(Wand)

def Vorderwand():
   Wand = Part.makeBox(Seitenwand_Dicke, Halter_Abstand-Seitenwand_Dicke, Seitenwand_Hoehe) # Vorderwand
   Wand = Wand.cut(Part.makeCylinder(KL_Aussen/2, KL_Dicke).rotate(vec0,vecy, 90).translate(Vector(Seitenwand_Dicke-KL_Dicke, (Halter_Abstand-Seitenwand_Dicke)/2, Stepper_Z))) # Aufnahme für Kugellager
   Wand = Wand.cut(Part.makeCylinder(KL_Innen/2, Seitenwand_Dicke-KL_Dicke).rotate(vec0,vecy, 90).translate(Vector(0, (Halter_Abstand-Seitenwand_Dicke)/2, Stepper_Z))) # Überhang
   Gewinde = m20g(10).rotate(vec0,vecx, -90) # Gewinde für M3-Befestigungsschraube
   Wand = Wand.cut(Gewinde.copy().translate(Vector(Seitenwand_Dicke/2, 0, 5))) # Gewinde
   Wand = Wand.cut(Gewinde.copy().translate(Vector(Seitenwand_Dicke/2, 0, Seitenwand_Hoehe-5))) # Gewinde
   Wand = Wand.cut(Gewinde.copy().translate(Vector(Seitenwand_Dicke/2, Halter_Abstand-Seitenwand_Dicke-10, 5))) # Gewinde
   Wand = Wand.cut(Gewinde.copy().translate(Vector(Seitenwand_Dicke/2, Halter_Abstand-Seitenwand_Dicke-10, Seitenwand_Hoehe-5))) # Gewinde
   return(Wand)

def MakeNEMAFlat02():
# Stepper
   L1 = Part.LineSegment(Vector(-14,14,0), Vector(14,14,0))
   L2 = Part.LineSegment(Vector(14,14,0), Vector(14,-14,0))
   L3 = Part.Arc(Vector(14,-14,0), Vector(0,-19,0), Vector(-14,-14,0))
   L4 = Part.LineSegment(Vector(-14,-14,0), Vector(-14,14,0))
   S1 = Part.Shape([L1, L2, L3, L4])
   Stepper = Part.Face(Part.Wire(S1.Edges)).extrude(Vector(0, 0, Stepper_Dicke)).fuse(Part.makeCylinder(2, 20, vecz))
   Stepper = Stepper.fuse(Part.makeCylinder(8.0/2, 100).translate(Vector(0,0,22))) # Spindel
   return(Stepper)

def RefSwitch():
# Referenzschalter
   RefSw = Part.makeBox(11, 6.5, 20.5)      # Referenzschalter
   RefSw = RefSw.cut(m25b(10).rotate(vec0,vecx, -90).translate(Vector(8.5, 0,  5.0)))
   RefSw = RefSw.cut(m25b(10).rotate(vec0,vecx, -90).translate(Vector(8.5, 0, 14.5)))
   RefSw = RefSw.translate(Vector(0, -6.5, 0))
   return(RefSw)

def RefSwitchDrill():
# Befestigungsbohrungen für Referenzschalter
   RefSwGew = m25g(Seitenwand_Dicke-1).rotate(vec0,vecx, -90) # Gewinde für M2.5-Befestigungsschraube
   RefSwDrill = RefSwGew.copy().translate(Vector(8.5,  0, 5.0))
   RefSwDrill = RefSwDrill.fuse(RefSwGew.translate(Vector(8.5, 0, 14.5)))
   return(RefSwDrill)

def MakeSchieber():
# Schieber
   ll = 2 # Laschenlänge
   lr = 2 # Laschenradius
   S1 = Part.Shape([
   Part.LineSegment(Vector(0,0,0), Vector(62,0,0)),
   Part.Arc(Vector(62,0,0), Vector(63.5,0.5,0), Vector(64,2,0)),
   Part.LineSegment(Vector(64,2,0), Vector(64,24,0)),
   Part.Arc(Vector(64,24,0), Vector(63.5,25.5,0), Vector(62,26,0)),
   Part.LineSegment(Vector(62,26,0), Vector(0,26,0)),

   Part.LineSegment(Vector(0,26,0), Vector(0,25,0)),
   Part.LineSegment(Vector(0,25,0), Vector(-ll,25,0)),
   Part.Arc(Vector(-ll,25,0), Vector(-ll-lr,23,0), Vector(-ll,21,0)),
   Part.LineSegment(Vector(-ll,21,0), Vector(0,21,0)),

   Part.LineSegment(Vector(0,21,0), Vector(0,19,0)),
   Part.LineSegment(Vector(0,19,0), Vector(-ll,19,0)),
   Part.Arc(Vector(-ll,19,0), Vector(-ll-lr,17,0), Vector(-ll,15,0)),
   Part.LineSegment(Vector(-ll,15,0), Vector(0,15,0)),

   Part.LineSegment(Vector(0,15,0), Vector(0,11,0)),
   Part.LineSegment(Vector(0,11,0), Vector(-ll,11,0)),
   Part.Arc(Vector(-ll,11,0), Vector(-ll-lr,9,0), Vector(-ll,7,0)),
   Part.LineSegment(Vector(-ll,7,0), Vector(0,7,0)),

   Part.LineSegment(Vector(0,7,0), Vector(0,5,0)),
   Part.LineSegment(Vector(0,5,0), Vector(-ll,5,0)),
   Part.Arc(Vector(-ll,5,0), Vector(-ll-lr,3,0), Vector(-ll,1,0)),
   Part.LineSegment(Vector(-ll,1,0), Vector(0,1,0)),

   Part.LineSegment(Vector(0,1,0), Vector(0,0,0))
   ])

   Schieber = Part.Face(Part.Wire(S1.Edges)).extrude(Vector(0, 0, C_Dicke))

# Bohrungen für die Schrauben
   Schieber = Schieber.cut(m20b(3).translate(Vector(7,6,0)))
   Schieber = Schieber.cut(m20b(3).translate(Vector(3,13,0)))
   Schieber = Schieber.cut(m20b(3).translate(Vector(7,20,0)))

# Bohrungen für die Lötlaschen
   Schieber = Schieber.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(-ll, 3,0)))
   Schieber = Schieber.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(-ll, 9,0)))
   Schieber = Schieber.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(-ll,17,0)))
   Schieber = Schieber.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(-ll,23,0)))

   return(Schieber)

def MakeStator():
# Stator
   ll = 2 # Laschenlänge
   lr = 2 # Laschenradius

   S1 = Part.Shape([

   Part.LineSegment(Vector(0,0,0), Vector(10,0,0)),
   Part.LineSegment(Vector(10,0,0), Vector(10,-ll,0)),
   Part.Arc(Vector(10,-ll,0), Vector(12,-ll-lr,0), Vector(14,-ll,0)),
   Part.LineSegment(Vector(14,-ll,0), Vector(14,0,0)),

   Part.LineSegment(Vector(14,0,0), Vector(20,0,0)),
   Part.LineSegment(Vector(20,0,0), Vector(20,-ll,0)),
   Part.Arc(Vector(20,-ll,0), Vector(22,-ll-lr,0), Vector(24,-ll,0)),
   Part.LineSegment(Vector(24,-ll,0), Vector(24,0,0)),

   Part.LineSegment(Vector(24,0,0), Vector(30,0,0)),
   Part.LineSegment(Vector(30,0,0), Vector(30,-ll,0)),
   Part.Arc(Vector(30,-ll,0), Vector(32,-ll-lr,0), Vector(34,-ll,0)),
   Part.LineSegment(Vector(34,-ll,0), Vector(34,0,0)),

   Part.LineSegment(Vector(34,0,0), Vector(40,0,0)),
   Part.LineSegment(Vector(40,0,0), Vector(40,-ll,0)),
   Part.Arc(Vector(40,-ll,0), Vector(42,-ll-lr,0), Vector(44,-ll,0)),
   Part.LineSegment(Vector(44,-ll,0), Vector(44,0,0)),

   Part.LineSegment(Vector(44,0,0), Vector(50,0,0)),
   Part.LineSegment(Vector(50,0,0), Vector(50,-ll,0)),
   Part.Arc(Vector(50,-ll,0), Vector(52,-ll-lr,0), Vector(54,-ll,0)),
   Part.LineSegment(Vector(54,-ll,0), Vector(54,0,0)),

   Part.LineSegment(Vector(54,0,0), Vector(60,0,0)),

   Part.LineSegment(Vector(60,0,0), Vector(60,3,0)),
   Part.LineSegment(Vector(60,3,0), Vector(60+ll,3,0)),
   Part.Arc(Vector(60+ll,3,0), Vector(60+ll+lr,5,0), Vector(60+ll,7,0)),
   Part.LineSegment(Vector(60+ll,7,0), Vector(60,7,0)),

   Part.LineSegment(Vector(60,7,0), Vector(60,13,0)),
   Part.LineSegment(Vector(60,13,0), Vector(60+ll,13,0)),
   Part.Arc(Vector(60+ll,13,0), Vector(60+ll+lr,15,0), Vector(60+ll,17,0)),
   Part.LineSegment(Vector(60+ll,17,0), Vector(60,17,0)),

   Part.LineSegment(Vector(60,17,0), Vector(60,23,0)),
   Part.LineSegment(Vector(60,23,0), Vector(60+ll,23,0)),
   Part.Arc(Vector(60+ll,23,0), Vector(60+ll+lr,25,0), Vector(60+ll,27,0)),
   Part.LineSegment(Vector(60+ll,27,0), Vector(60,27,0)),

   Part.LineSegment(Vector(60,27,0), Vector(60,33,0)),
   Part.LineSegment(Vector(60,33,0), Vector(60+ll,33,0)),
   Part.Arc(Vector(60+ll,33,0), Vector(60+ll+lr,35,0), Vector(60+ll,37,0)),
   Part.LineSegment(Vector(60+ll,37,0), Vector(60,37,0)),

   Part.LineSegment(Vector(60,37,0), Vector(60,40,0)),

   Part.LineSegment(Vector(60,40,0), Vector(54,40,0)),
   Part.LineSegment(Vector(54,40,0), Vector(54,40+ll,0)),
   Part.Arc(Vector(54,40+ll,0), Vector(52,40+ll+lr,0), Vector(50,40+ll,0)),
   Part.LineSegment(Vector(50,40+ll,0), Vector(50,40,0)),

   Part.LineSegment(Vector(50,40,0), Vector(44,40,0)),
   Part.LineSegment(Vector(44,40,0), Vector(44,40+ll,0)),
   Part.Arc(Vector(44,40+ll,0), Vector(42,40+ll+lr,0), Vector(40,40+ll,0)),
   Part.LineSegment(Vector(40,40+ll,0), Vector(40,40,0)),

   Part.LineSegment(Vector(40,40,0), Vector(34,40,0)),
   Part.LineSegment(Vector(34,40,0), Vector(34,40+ll,0)),
   Part.Arc(Vector(34,40+ll,0), Vector(32,40+ll+lr,0), Vector(30,40+ll,0)),
   Part.LineSegment(Vector(30,40+ll,0), Vector(30,40,0)),

   Part.LineSegment(Vector(30,40,0), Vector(24,40,0)),
   Part.LineSegment(Vector(24,40,0), Vector(24,40+ll,0)),
   Part.Arc(Vector(24,40+ll,0), Vector(22,40+ll+lr,0), Vector(20,40+ll,0)),
   Part.LineSegment(Vector(20,40+ll,0), Vector(20,40,0)),

   Part.LineSegment(Vector(20,40,0), Vector(14,40,0)),
   Part.LineSegment(Vector(14,40,0), Vector(14,40+ll,0)),
   Part.Arc(Vector(14,40+ll,0), Vector(12,40+ll+lr,0), Vector(10,40+ll,0)),
   Part.LineSegment(Vector(10,40+ll,0), Vector(10,40,0)),

   Part.LineSegment(Vector(10,40,0), Vector(0,40,0)),

   Part.LineSegment(Vector(0,40,0), Vector(0,0,0))
   ])

   Stator = Part.Face(Part.Wire(S1.Edges)).extrude(Vector(0, 0, C_Dicke))

# Bohrungen für die Schrauben
   Stator = Stator.cut(m20b(3).translate(Statorbohrung_1))
   Stator = Stator.cut(m20b(3).translate(Statorbohrung_2))
   Stator = Stator.cut(m20b(3).translate(Statorbohrung_3))
   Stator = Stator.cut(m20b(3).translate(Statorbohrung_4))
   Stator = Stator.cut(m20b(3).translate(Statorbohrung_5))
   Stator = Stator.cut(m20b(3).translate(Statorbohrung_6))
   Stator = Stator.cut(m20b(3).translate(Statorbohrung_7))
   Stator = Stator.cut(m20b(3).translate(Statorbohrung_8))

# Bohrungen für die Lötlaschen
   Stator = Stator.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(12,-ll,0)))
   Stator = Stator.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(22,-ll,0)))
   Stator = Stator.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(32,-ll,0)))
   Stator = Stator.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(42,-ll,0)))
   Stator = Stator.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(52,-ll,0)))
   Stator = Stator.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(60+ll,5,0)))
   Stator = Stator.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(60+ll,15,0)))
   Stator = Stator.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(60+ll,25,0)))
   Stator = Stator.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(60+ll,35,0)))
   Stator = Stator.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(52,40+ll,0)))
   Stator = Stator.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(42,40+ll,0)))
   Stator = Stator.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(32,40+ll,0)))
   Stator = Stator.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(22,40+ll,0)))
   Stator = Stator.cut(Part.makeCylinder(Padbohrradius, 3).translate(Vector(12,40+ll,0)))

   return(Stator)

def MakeDielektrikum():
# Dielektrikum
   Dielektrikum = Part.makeBox(D_Width, D_Height, D_Dicke)              # einzelne Dielektrikumscheibe
   Dielektrikum = Dielektrikum.translate(Vector(0,(Stator_Height-D_Height)/2,0))

   return(Dielektrikum)

def MakeTGMHalter():
# Halter für die Trapezgewindemutter
   # untere Bohrungen zum Verschrauben des Schiebers
   HalterTGMB =                 m20g(12).translate(Vector(HalterTGM_Dicke/2+2, 6,0))
   HalterTGMB = HalterTGMB.fuse(m20g( 8).translate(Vector(HalterTGM_Dicke/2-2,13,0)))
   HalterTGMB = HalterTGMB.fuse(m20g(12).translate(Vector(HalterTGM_Dicke/2+2,20,0)))

   HalterTGM = Part.makeBox(HalterTGM_Dicke, HalterTGM_Breite, HalterTGM_Hoehe)      # Halter für Trapezgewindemutter
   HalterTGM = HalterTGM.cut(m30g(12).rotate(vec0,vecy, 90).translate(Vector(-1, HalterTGM_Breite/2, HalterTGM_TGMH-8)))
   HalterTGM = HalterTGM.cut(m30g(12).rotate(vec0,vecy, 90).translate(Vector(-1, HalterTGM_Breite/2, HalterTGM_TGMH+8)))
   HalterTGM = HalterTGM.cut(Part.makeCylinder(11/2, 12).rotate(vec0,vecy, 90).translate(Vector(-1, HalterTGM_Breite/2, HalterTGM_TGMH)))
   HalterTGM = HalterTGM.cut(HalterTGMB)

   return(HalterTGM)

def MakeFuss():
# Fuß
   Fuss = Part.makeBox(Stator_Width, Fuss_Dicke, Fuss_Hoehe)     # Fuss, Seitenwand

   # versenkte M2-Befestigungsschrauben
   Fuss = Fuss.cut(m20sl(12).translate(Vector( 7,3,0)))
   Fuss = Fuss.cut(m20sl(12).translate(Vector(27,3,0)))
   Fuss = Fuss.cut(m20sl(12).translate(Vector(47,3,0)))

   # Gewinde für M2-Befestigungsschrauben
   Fuss = Fuss.cut(m20g(Fuss_Hoehe).translate(Vector(17, 3, 0)))
   Fuss = Fuss.cut(m20g(Fuss_Hoehe).translate(Vector(37, 3, 0)))
   Fuss = Fuss.cut(m20g(Fuss_Hoehe).translate(Vector(57, 3, 0)))

   return(Fuss)




