Plantilla 3D
Author: Rafael Losada Liste

C = (-8.948399999999996, 6.857399999999999)
zz2 = OrthogonalLine(C, xAxis)
zz0 = Circle(C, 0.62)
ZZ4 = Intersect(zz0, zz2, 1)
ZZ3 = Intersect(zz0, zz2, 2)
zElipse2 = Ellipse(ZZ3, ZZ4, 0.65)
Z = Point(zElipse2)
zz1 = OrthogonalLine(C, yAxis)
ZZ2 = Intersect(zz0, zz1, 2)
ZZ1 = Intersect(zz0, zz1, 1)
zElipse1 = Ellipse(ZZ1, ZZ2, 0.65)
XY = Point(zElipse1)
ZZ7, ZZ8 = Intersect(zElipse2, zz2)
zAngInc = Angle(ZZ8, C, Z)
ZZ5, ZZ6 = Intersect(zElipse1, zz1)
zAngRot = Angle(ZZ6, C, XY)
zz4 = Segment(ZZ5, ZZ6)
zz3 = Segment(ZZ7, ZZ8)
zPunto1 = Intersect(zElipse2, zElipse1, 1)
zPunto2 = Intersect(zElipse2, zElipse1, 4)
zSeg2 = Segment(zPunto1, zPunto2)
a = 5
G000 = Punto3D(C, XY, Z, {(-a), (-a), (-a)})
G100 = Punto3D(C, XY, Z, {a, (-a), (-a)})
G010 = Punto3D(C, XY, Z, {(-a), a, (-a)})
G001 = Punto3D(C, XY, Z, {(-a), (-a), a})
G110 = Punto3D(C, XY, Z, {a, a, (-a)})
G101 = Punto3D(C, XY, Z, {a, (-a), a})
G011 = Punto3D(C, XY, Z, {(-a), a, a})
G111 = Punto3D(C, XY, Z, {a, a, a})
a1 = Segment(G100, G000)
a2 = Segment(G011, G010)
a3 = Segment(G010, G110)
a4 = Segment(G000, G010)
A1 = Point(a1)
ra = AffineRatio(G000, G100, A1)
A2: G000 + (ra * (G010 - G000))
A3: G000 + (ra * (G001 - G000))
A4: A1 + A3 - G000
A5: A2 + A3 - G000
A7: A1 + A2 - G000
A8: A7 + A3 - G000
polígono1: {Polygon[A3, A5, A8, A4]}
polígono2: {Polygon[G000, A3, A4, A1]}
polígono3: {Polygon[A4, A8, A7, A1]}
b1 = Segment(A5, A2)
b2 = Segment(A2, A7)
b: ((a + 5) * AffineRatio[G000, G100, A1])
b': round((100 * b)) / 100
texto2: "Volumen = " + b' + " x " + b' + " x " + b' + " = " + (((b' * b') * b')) + " unidades cúbicas"
lista1 = Sequence(Polygon[G000, G000 + (s * (G100 - G000)), G000 + (s * (G100 + G001 - (2 * G000))), G000 + (s * (G001 - G000))], s, 0.1, 1, 0.1)
lista2 = Sequence(Polygon[G000 + (s * (G100 - G000)), G000 + (s * (G010 + G100 - (2 * G000))), G000 + (s * (G010 + G001 + G100 - (3 * G000))), G000 + (s * (G001 + G100 - (2 * G000)))], s, 0.1, 1, 0.1)
lista3 = Sequence(Polygon[G000 + (s * (G001 - G000)), G000 + (s * (G010 + G001 - (2 * G000))), G000 + (s * (G010 + G001 + G100 - (3 * G000))), G000 + (s * (G001 + G100 - (2 * G000)))], s, 0.1, 1, 0.1)
lista5 = Sequence(Segment[A3 + (s * (G100 - G000)), A5 + (s * (G100 - G000))], s, 0, b' / 10, 0.1)
lista6 = Sequence(Segment[A1 + (s * (G110 - G100)), A4 + (s * (G110 - G100))], s, 0.1, b' / 10, 0.1)
lista7 = Sequence(Segment[G000 + (s * (G001 - G000)), A1 + (s * (G001 - G000))], s, 0, b' / 10, 0.1)
lista8 = Sequence(Segment[A3 + (s * (G011 - G001)), A4 + (s * (G011 - G001))], s, 0.1, b' / 10, 0.1)
lista9 = Sequence(Segment[A1 + (s * (G101 - G100)), A7 + (s * (G101 - G100))], s, 0, b' / 10, 0.1)
b3 = Segment(A3, A4)
b4 = Segment(A4, A1)
b5 = Segment(A4, A8)
b6 = Segment(A5, A8)
b7 = Segment(A8, A7)
texto1: "" + b'
lista4 = Sequence(Segment[G000 + (s * (G100 - G000)), A3 + (s * (G100 - G000))], s, 0, b' / 10, 0.1)

Tool: Punto3D
[C,XY,Z,Lista 3D]
Input: C, XY, Z, A
Output: H'

z1 = OrthogonalLine(C, yAxis)
z0 = Circle(C, 0.62)
Z1 = Intersect(z0, z1, 1)
Z2 = Intersect(z0, z1, 2)
zElipse1 = Ellipse(Z1, Z2, 0.65)
Z5, Z6 = Intersect(zElipse1, z1)
z2 = OrthogonalLine(C, xAxis)
Z3 = Intersect(z0, z2, 2)
Z4 = Intersect(z0, z2, 1)
zElipse2 = Ellipse(Z3, Z4, 0.65)
Z7, Z8 = Intersect(zElipse2, z2)
zAngInc = Angle(Z8, C, Z)
zAngRot = Angle(Z6, C, XY)
A: {5, 5, 5}
H': ((Element[A, 1] * sin(zAngRot)) + (Element[A, 2] * cos(zAngRot)), (((-Element[A, 1]) * cos(zAngRot)) * sin(zAngInc)) + ((Element[A, 2] * sin(zAngRot)) * sin(zAngInc)) + (Element[A, 3] * cos(zAngInc)))