import cadquery as cq

# Create a simple block with a hole through it that we can split.
# 1.  Establishes a workplane that an object can be built on.
# 1a. Uses the X and Y origins to define the workplane, meaning that the
#     positive Z direction is "up", and the negative Z direction is "down".
# 2.  Creates a plain box to base future geometry on with the box() function.
# 3.  Selects the top-most face of the box and establishes a workplane on it
#     that new geometry can be built on.
# 4.  Draws a 2D circle on the new workplane and then uses it to cut a hole
#     all the way through the box.
c = cq.Workplane("XY").box(1, 1, 1).faces(">Z").workplane() \
                      .circle(0.25).cutThruAll()

# 5.  Selects the face furthest away from the origin in the +Y axis direction.
# 6.  Creates an offset workplane that is set in the center of the object.
# 6a. One possible improvement to this script would be to make the dimensions
#     of the box variables, and then divide the Y-axis dimension by 2.0 and
#     use that to create the offset workplane.
# 7.  Uses the embedded workplane to split the object, keeping only the "top"
#     portion.
result = c.faces(">Y").workplane(-0.5).split(keepTop=True)

# Displays the result of this script
show_object(result)
