How do i add lines to end Cubes??

Hello i am having some trouble trying to do this in Pic1, but i am having a hard time in doing it, i tried using Modulo but i could not get the objects positions so i could not finish the process, does anyone know how to do this?

-Pic1
[77498-capture48.png*_|77498]

Here is the (functioning)code i am trying to implement it to

public class roundedSpline : MonoBehaviour
{

    [System.Serializable]
    public class SplinePoint
    {
        public Transform t;
        public Transform cpAhead;
        public Transform cpBehind;
        public int seg;
        public SplinePoint(Transform thetrans, Transform a, Transform b, int s)
        {
            t = thetrans;
            cpAhead = a;
            cpBehind = b;
            seg = s;
        }
    }
    public List<Transform> controlPointsList;
    public List<SplinePoint> splinePoints;
    public Transform segment;
    public int segCount = 2;
    public float updateRate = 60f;
    public bool setup = false;
    public bool running = false;

    void Start()
    {
        splinePoints = new List<SplinePoint>();
        CreateObjects(segment);
    }

    public void CreateObjects(Transform original)
    {
        for (int i = 0; i < controlPointsList.Count - 1; i++)
        {
            for (int j = 0; j < segCount; j++)
            {
                var a = Instantiate(original, Vector3.zero, Quaternion.identity) as Transform;
                splinePoints.Add(new SplinePoint(a.transform, controlPointsList[i + 1], controlPointsList*, j));*

}
}
setup = true;
}
void Update()
{
if (setup && !running)
{
UpdateSplinePos();
}
}
void UpdateSplinePos()
{
for (int i = 0; i < splinePoints.Count; i++)
{
SetPosition(splinePoints*);*
}
}
SplinePoint GetSplinePoint(int s)
{
SplinePoint sp = null;
if (splinePoints.Count > 0)
{
for (int i = 0; i < splinePoints.Count; i++)
{
if (splinePoints*.seg == s)*
{
sp = splinePoints*;*
break;
}
}
}
return sp;
}
void OnDrawGizmos()
{
Gizmos.color = Color.white;
for (int i = 0; i < controlPointsList.Count; i++)
{
Gizmos.DrawWireSphere(controlPointsList*.position, 0.3f);*
}
for (int i = 0; i < controlPointsList.Count - 1; i++)
{
Gizmos.DrawLine(controlPointsList*.position, controlPointsList[i + 1].position);*
}

}
void SetPosition(SplinePoint sp)
{
float dist = Vector3.Distance(sp.cpAhead.position, sp.cpBehind.position);
float step = dist / (segCount + 1);
Vector3 dir = (sp.cpAhead.position - sp.cpBehind.position).normalized;
sp.t.position = sp.cpBehind.position + ((dir * step) * (sp.seg + 1));
sp.t.rotation = Quaternion.LookRotation(dir);
}
}
_*

[77502-d.jpg*_|77502]

    void OnDrawGizmos()
    {
        if (!setup)
        {
            return;
        }
        Gizmos.color = Color.white;
        for (int i = 0; i < controlPointsList.Count; i++)
        {
            Gizmos.DrawWireSphere(controlPointsList*.position, 0.3f);*

}
for (int i = 0; i < controlPointsList.Count - 1; i++)
{
Gizmos.DrawLine(controlPointsList*.position, controlPointsList[i + 1].position);*
}

//Get a list of associated nodes relative to control point. We want the last of the current control point and the first of the next control point
Gizmos.color = Color.red;
for (int i = 0; i < controlPointsList.Count - 1; i++)
{
List associatedNodes = NodesAssociated(controlPointsList*);*
List associatedNodesAhead = NodesAssociated(controlPointsList[i+1]);
if (associatedNodes.Count > 0 && associatedNodesAhead.Count > 0)
{
Gizmos.DrawLine(associatedNodes[associatedNodes.Count - 1].t.position, associatedNodesAhead[0].t.position);
}
}
}

List NodesAssociated(Transform behindNode)
{
List p = new List();
for (int i = 0; i < splinePoints.Count; i++)
{
if (splinePoints*.cpBehind == behindNode)*
{
p.Add(splinePoints*);*
}
}
return p;
}
_*