Thanks again, Michael. I tested with a C# version, and it is only slightly slower then the pull component on the closest option, if anyone is interested:

```
Point3d[] p_arr = p.ToArray();
Curve[] c_arr = c.ToArray();
double[] d_sorted = new double[p.Count];
Point3d[] p_sorted = new Point3d[p.Count];
for(int i = 0; i < p.Count; ++i){
double t;
double[] d_temp = new double[c.Count];
Point3d[] p_temp = new Point3d[c.Count];
for(int j = 0; j < c.Count; ++j){
c[j].ClosestPoint(p[i], out t);
Point3d pt = c[j].PointAt(t);
Vector3d vec = new Vector3d(pt - p[i]);
double d = vec.Length;
d_temp[j] = d;
p_temp[j] = pt;
}
Array.Sort(d_temp, p_temp);
d_sorted[i] = d_temp[0];
p_sorted[i] = p_temp[0];
}
A = p_sorted;
B = d_sorted;
```