Я думаю, что у нас есть несколько проблем здесь:
1) как писал Рафалон в своем комментарии, вы должны использовать оператор == в то время как l oop
2) Поскольку вы имейте для l oop в течение вашего l oop, и когда вы возвращаетесь в случае успеха, вам совсем не нужно время.
3) Также ваш путь else бесполезен, так как счетчик может только будь меньше или равно i, вы никогда не встретите счетчик == сегментов. Количество, так как for l oop закончится раньше.
Просто верните true в случае успеха и false в любом другом случае на самый конец метода. Ваш код должен выглядеть примерно так:
bool ComputePaths(ref Curve sprout, List segments, List nodes)
{
double threshold = 0.5;
for (int i = 0; i < segments.Count; i++)
{
Vector3d a = sprout.PointAtEnd - segments[i].PointAtStart;
Vector3d b = sprout.PointAtEnd - segments[i].PointAtEnd;
if (a.Length < threshold | b.Length < threshold)
{
Point3d origin = new Point3d();
origin = sprout.PointAtStart;
List<Curve> segmentsToJoin = new List<Curve>();
segmentsToJoin.Add(sprout);
segmentsToJoin.Add(segments[i]);
Curve[] segmentsJoined = new Curve[1];
segmentsJoined = Curve.JoinCurves(segmentsToJoin, threshold);
sprout = segmentsJoined[0];
Vector3d c = sprout.PointAtStart - origin;
if (c.Length > threshold)
{
sprout.Reverse();
}
for (int j = 0; j < nodes.Count; j++)
{
Vector3d d = sprout.PointAtEnd - nodes[j];
if (d.Length < threshold)
{
return true;
}
}
}
}
return false;
}
ОБНОВЛЕНИЕ: Я только что понял, что вы меняете росток параметра в вашем для l oop, поэтому у вас будет другое условие, если вы введете для l oop снова во второй раз. поэтому мои пункты 2 и 3 неверны.
bool ComputePaths(ref Curve sprout, List segments, List nodes)
{
double threshold = 0.5;
int counter = 0;
while(true)
{
for (int i = 0; i < segments.Count; i++)
{
Vector3d a = sprout.PointAtEnd - segments[i].PointAtStart;
Vector3d b = sprout.PointAtEnd - segments[i].PointAtEnd;
if (a.Length < threshold | b.Length < threshold)
{
Point3d origin = new Point3d();
origin = sprout.PointAtStart;
List<Curve> segmentsToJoin = new List<Curve>();
segmentsToJoin.Add(sprout);
segmentsToJoin.Add(segments[i]);
Curve[] segmentsJoined = new Curve[1];
segmentsJoined = Curve.JoinCurves(segmentsToJoin, threshold);
sprout = segmentsJoined[0];
Vector3d c = sprout.PointAtStart - origin;
if (c.Length > threshold)
{
sprout.Reverse();
}
for (int j = 0; j < nodes.Count; j++)
{
Vector3d d = sprout.PointAtEnd - nodes[j];
if (d.Length < threshold)
{
return true;
}
}
}
else
{
counter += 1;
if(counter == segments.Count);
{
return false;
}
}
}
}
return false;
}