# -*- coding: utf-8 -*-

import FreeCAD
from FreeCAD import Placement, Rotation, Vector
import matplotlib

doc=FreeCAD.newDocument("Fischdose")

Len = 153.0             # Länge der Dose
Breite = 83.0           # Breite der Dose
D_Dicke = 2.0           # Wandstärke des Deckels
D_Hoehe = 8.0           # Höhe des Deckels
H_Nut = 3.0             # Höhe der Nut
D_Nut = 1.0             # Dicke der Nut

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

# Farben
Farbe_Deckel  = matplotlib.colors.to_rgb('lightsteelblue')

def Abrunden(part, rad):
# all Kanten zum Abrunden auswählen
   edges=[]
   edgecount = len(part.Edges)
   for i in range (0,edgecount):
      edges.append(part.Edges[i])

# ...und abrunden
   if ((len(edges) > 0) & (rad > 0)):
      part = part.makeFillet(rad, edges)
   return(part)

# Basisformen generieren
# Nut
Rad = Breite/2  # Radius des Kreisbogens
Lin = Len-Breite # Länge des geraden Teils
S1 = Part.Shape([
Part.LineSegment(Vector(-Lin/2, Rad, 0), Vector(Lin/2, Rad, 0)),
Part.Arc(Vector(Lin/2, Rad,0), Vector(Lin/2+Rad,0,0), Vector(Lin/2,-Rad,0)),
Part.LineSegment(Vector(Lin/2,-Rad, 0), Vector(-Lin/2,-Rad, 0)),
Part.Arc(Vector(-Lin/2, -Rad,0), Vector(-Lin/2-Rad,0,0), Vector(-Lin/2,Rad,0))
])

Nut = Part.Face(Part.Wire(S1.Edges)).extrude(Vector(0, 0, H_Nut)).translate(Vector(0,0,D_Dicke))
Nut = Abrunden(Nut,H_Nut/2-0.2)

# Deckel Außenkante
Rad = Breite/2 + D_Dicke  # Radius des Kreisbogens
Lin = Len-Breite # Länge des geraden Teils
S1 = Part.Shape([
Part.LineSegment(Vector(-Lin/2, Rad, 0), Vector(Lin/2, Rad, 0)),
Part.Arc(Vector(Lin/2, Rad,0), Vector(Lin/2+Rad,0,0), Vector(Lin/2,-Rad,0)),
Part.LineSegment(Vector(Lin/2,-Rad, 0), Vector(-Lin/2,-Rad, 0)),
Part.Arc(Vector(-Lin/2, -Rad,0), Vector(-Lin/2-Rad,0,0), Vector(-Lin/2,Rad,0))
])

Deckel = Part.Face(Part.Wire(S1.Edges)).extrude(Vector(0, 0, D_Hoehe))

# Deckel Innenkante
Rad = (Breite-2*D_Nut)/2  # Radius des Kreisbogens
Lin = Len-Breite # Länge des geraden Teils
S1 = Part.Shape([
Part.LineSegment(Vector(-Lin/2, Rad, 0), Vector(Lin/2, Rad, 0)),
Part.Arc(Vector(Lin/2, Rad,0), Vector(Lin/2+Rad,0,0), Vector(Lin/2,-Rad,0)),
Part.LineSegment(Vector(Lin/2,-Rad, 0), Vector(-Lin/2,-Rad, 0)),
Part.Arc(Vector(-Lin/2, -Rad,0), Vector(-Lin/2-Rad,0,0), Vector(-Lin/2,Rad,0))
])

Innen = Part.Face(Part.Wire(S1.Edges)).extrude(Vector(0, 0, D_Hoehe)).translate(Vector(0,0,D_Dicke))

Deckel = Deckel.cut(Innen)

Deckel = Abrunden(Deckel,D_Dicke/3)

Deckel = Deckel.cut(Nut)

# Namen und Farben zuweisen
p1=doc.addObject("Part::Feature")
p1.Shape = Deckel
p1.ViewObject.ShapeColor=Farbe_Deckel
p1.Label="Deckel"

view = FreeCADGui.ActiveDocument.ActiveView
view.fitAll()

doc.recompute()

# Macro End



