Up/Down

A = (-3, 1, 0)
B = (-1, 1, 0)
C = (-1, 5, 0)
D = (-3, 5, 0)
poly1, a, b, c, d = Polygon(A, B, C, D)
E = (1, 1, 0)
F = (3, 1, 0)
G = (3, 5, 0)
H = (1, 5, 0)
poly2, e, f, g, h = Polygon(E, F, G, H)
I: (-3, 1, 4)
J: (2, 3, 4)
i, K, L, M, faceABKI, faceBCLK, faceCDML, faceADMI, faceIKLM, edgeAI, edgeBK, edgeCL, edgeDM, edgeIK, edgeKL, edgeLM, edgeIM = Prism(poly1, I)
j, faceEFJ, faceFGJ, faceGHJ, faceEHJ, edgeEJ, edgeFJ, edgeGJ, edgeHJ = Pyramid(poly2, J)
N = Point(zAxis)
O: (x(N) + 2, y(N) + 2, z(N))
P: (x(N) - 3, y(N) - 4, z(N))
k = Plane(N, O, P)
Q = Intersect(edgeAI, k)
R = Intersect(edgeDM, k)
S = Intersect(edgeCL, k)
T = Intersect(edgeBK, k)
U = Intersect(edgeEJ, k)
V = Intersect(edgeFJ, k)
W = Intersect(edgeGJ, k)
Z = Intersect(edgeHJ, k)
poly3, q, r, s, t = Polygon(Q, R, S, T)
poly4, u, z_1, w, v = Polygon(U, Z, W, V)