# This example is meant to be used from within the CadQuery module of FreeCAD.
import numpy as np
import cadquery
from Helpers import show

# Square side and offset in x and y.
side = 10
offset = 5

# Define the locations that the polyline will be drawn to/thru.
# The polyline is defined as numpy.array so that operations like translation
# of all points are simplified.
pts = np.array([
    (0, 0),
    (side, 0),
    (side, side),
    (0, side),
    (0, 0),
]) + [offset, offset]

result = cadquery.Workplane('XY') \
    .polyline(pts).extrude(2) \
    .faces('+Z').workplane().circle(side / 2).extrude(1)

# Render the solid
show(result)