\text{Drag to see\multiples of:}

1 = arrow left, 2 = arrow right, 3 = arrow uo, 4 = arrow down

AppSize = Corner(5)
MoveGuideLine = (12.300598374999998, 6.568939840000001)
hGuideline: y = y(MoveGuideLine)
vGuideline: x = x(MoveGuideLine)
n = 3 (slider from 1 to 20, step 1)
speed: 0
f: y = y(Corner[4]) - (y(Corner[4] - Corner[1]) / 500 * 24)
Cor1 = (-5.252525000000003, -2.52224)
Cor3 = (15.459125, 10.539800000000001)
positions = Flatten(Sequence[Sequence[(ii, 10 - jj), ii, 0.5, 9.5], jj, 0.5, 9.5])
squaresAll = Zip(Polygon[{PP + (-0.4, -0.4), PP + (0.4, -0.4), PP + (0.4, 0.4), PP + (-0.4, 0.4)}], PP, positions)
multiples = KeepIf(Mod[kk, n] ≟ 0, kk, Sequence[100])
squaresToShow = Zip(Element[squaresAll, kk], kk, multiples)
numbers = Zip(Text[ii, PP + (-0.03, 0.05), true, true, 0, 0], ii, Sequence[100], PP, positions)
ini: x(Cor1) + ((x(Cor3) - x(Cor1)) / 800 * 200)
A: (-0.1 + ((n - 1) * 10.3 / 19), -1.7)
B: A - (0.4, 0.4)
C: B + 0.8
D: B + (0.8, 0)
E: B + (0, 0.8)
q1, b, d, c, e = Polygon(B, D, C, E)
text1 = Text(n, B + (0.37, 0.5), true, true, 0, 0)
onboarding = true
pulsingSpeed: 8
pulsing = 0.8 (slider from 0 to 1, step 0.1)
onboarding_{1} = true
onboardingX_{1} = 153.5
onboardingY_{1} = 478
onboardingCase_{1}: 2
OnboardingTextOffset_{1}: onboardingTextOffset[Corner[onboardingText_{1}, 1], Corner[onboardingText_{1}, 3], onboardingCase_{1}, Corner[1], Corner[3], Corner[5]] - (0, 12)
onboardingDisplayText_{1}: "\text{\vphantom{Og}" + (LaTeX[onboardingText_{1}]) + "}"
pulsingObject = expandQuad(B, D, C, E, (7 * pulsing), Corner[1], Corner[3], Corner[5])
m = 5 (slider from 1 to 20, step 1)
circlesAll = Zip(Circle[PP, 0.375], PP, positions)
multiples2 = KeepIf(Mod[kk, m] ≟ 0, kk, Sequence[100])
circlesToShow = Zip(Element[circlesAll, kk], kk, multiples2)
F: (-0.1 + ((m - 1) * 10.3 / 19), -0.7)
g = Circle(F, 0.38)
hGuideline' = Translate(hGuideline, Vector[(Vector[Corner[4], Corner[1]] / 500 * 16)])
text2 = Text(m, F + (-0.02, 0.05), true, true, 0, 0)
tabOrder: {n, m}

Tool: expandQuad
expandQuad(A,B,C,D,pixelGap,Corner1,Corner3,Corner5)
Input: A, B, C, D, pixelGap, Corner1, Corner3, Corner5
Output: newPolygon

Corner5: (800, 500)
Corner3: (7, 6)
Corner1: (-4, -2)
distanceY: (pixelGap / y(Corner5) * (y(Corner3) - y(Corner1)))
distanceX: (pixelGap / x(Corner5) * (x(Corner3) - x(Corner1)))
pointGap: distanceX
allVerts: {A, B, C, D}
concaveAngles = Zip(Angle[I, J, K] > 180°, I, Append[allVerts(-1), allVerts], J, allVerts, K, Append[Take[allVerts, 2], allVerts(1)])
allVecs = Zip(Vector[J, K], J, allVerts, K, Append[Take[allVerts, 2], allVerts(1)])
pVecs = Zip(Vector[UnitOrthogonalVector[A]], Vector[A], allVecs)
xyScale: (distanceY) / (distanceX)
circTemplate = CurveCartesian((pointGap * cos(t)), ((xyScale * pointGap) * sin(t)), t, 0, (2 * pi))
scaledVecs = Zip(Vector[(x(K), (xyScale * y(K)))], Vector[K], pVecs)
vPointsPre = Zip(A - (pointGap * B), A, allVerts, B, Append[scaledVecs(-1), scaledVecs])
vPointsPost = Zip(A - (pointGap * B), A, allVerts, Vector[B], scaledVecs)
endAngles = Zip(Angle[M + (1, 0), M, K], K, vPointsPost, M, allVerts)
startAngles = Zip(Angle[M + (1, 0), M, K], K, vPointsPre, J, vPointsPost, M, allVerts)
roundedCornersConvex = Zip(Sequence[circTemplate(K) + A, K, B, C + If[B > C, (2 * pi), 0], (C + If[B > C, (2 * pi), 0] - B) / 4], A, allVerts, B, endAngles, C, startAngles)
roundedCornersConcave = Zip(Sequence[circTemplate(K) + A, K, B, C + If[B > C, (2 * pi), 0], (C + If[B > C, (2 * pi), 0] - B) / 4], A, allVerts, B, startAngles, C, endAngles)
cornerAngles = Zip(Angle[A, B, C], A, vPointsPre, B, allVerts, C, vPointsPost)
cornerPoints = Flatten(Zip[If[¬Concave, {Element[D, 3]}, If[A < pi / 3 ∨ (¬Concave), {Element[C, 3]}, C]], A, cornerAngles, C, roundedCornersConcave, D, roundedCornersConvex, Concave, concaveAngles])
newPolygon = Polygon(cornerPoints)

Tool: onboardingTextOffset
onboardingTextOffset(textCorner1,textCorner3,case,corner1,corner3,corner5)
Input: CornerText1, CornerText3, case, Corner1, Corner3, Corner5
Output: TextOffset

xPixels: ((x(CornerText3) - x(CornerText1)) * x(Corner5) / (x(Corner3) - x(Corner1)))
yPixels: ((y(CornerText3) - y(CornerText1)) * y(Corner5) / (y(Corner3) - y(Corner1)))
xOffset = Element({27, (-xPixels) + 2, 16 - xPixels / 2, 16 - xPixels / 2}, case)
yOffset = Element({-23, -23, yPixels - 27, -49}, case)
TextOffset: (xOffset, yOffset)

Tool: onboardingTextOffset (command onboardingTextOffset1)
onboardingTextOffset(textCorner1,textCorner3,case,corner1,corner3,corner5)
Input: CornerText1, CornerText3, case, Corner1, Corner3, Corner5
Output: TextOffset

xPixels: ((x(CornerText3) - x(CornerText1)) * x(Corner5) / (x(Corner3) - x(Corner1)))
yPixels: ((y(CornerText3) - y(CornerText1)) * y(Corner5) / (y(Corner3) - y(Corner1)))
xOffset = Element({27, (-xPixels) + 2, 16 - xPixels / 2, 16 - xPixels / 2}, case)
yOffset = Element({-23, -23, yPixels - 27, -49}, case)
TextOffset: (xOffset, yOffset)