import FreeCAD
import Sketcher
import Part
doc = FreeCAD.ActiveDocument
if doc is None:
doc = FreeCAD.newDocument("Model")
sheet = doc.addObject("Spreadsheet::Sheet", "Spreadsheet")
sheet.set("A1", "Length")
sheet.set("B1", "40 mm")
sheet.setAlias("B1", "Length")
sheet.set("A2", "Width")
sheet.set("B2", "20 mm")
sheet.setAlias("B2", "Width")
sheet.set("A3", "Thickness")
sheet.set("B3", "6 mm")
sheet.setAlias("B3", "Thickness")
body = doc.addObject("PartDesign::Body", "PlateBody")
sketch = body.newObject("Sketcher::SketchObject", "PlateSketch")
sketch.addGeometry(Part.LineSegment(FreeCAD.Vector(0, 0, 0), FreeCAD.Vector(40, 0, 0)), False)
sketch.addGeometry(Part.LineSegment(FreeCAD.Vector(40, 0, 0), FreeCAD.Vector(40, 20, 0)), False)
sketch.addGeometry(Part.LineSegment(FreeCAD.Vector(40, 20, 0), FreeCAD.Vector(0, 20, 0)), False)
sketch.addGeometry(Part.LineSegment(FreeCAD.Vector(0, 20, 0), FreeCAD.Vector(0, 0, 0)), False)
sketch.addConstraint(Sketcher.Constraint("Coincident", 0, 2, 1, 1))
sketch.addConstraint(Sketcher.Constraint("Coincident", 1, 2, 2, 1))
sketch.addConstraint(Sketcher.Constraint("Coincident", 2, 2, 3, 1))
sketch.addConstraint(Sketcher.Constraint("Coincident", 3, 2, 0, 1))
sketch.addConstraint(Sketcher.Constraint("Horizontal", 0))
sketch.addConstraint(Sketcher.Constraint("Vertical", 1))
sketch.addConstraint(Sketcher.Constraint("DistanceX", 0, 1, 0, 2, 40))
sketch.addConstraint(Sketcher.Constraint("DistanceY", 1, 1, 1, 2, 20))
pad = body.newObject("PartDesign::Pad", "PlatePad")
pad.Profile = sketch
pad.Length = 6
pad.setExpression("Length", "Spreadsheet.Thickness")
body.Tip = pad
doc.recompute()