Вообщем в двух словах!
Переписываю код с BlitzMax. Там видать какие-то коллизии с коллекциями.
Вот код:
public void CSG(TCSGWorld w, bool recursive = true, bool dynamic = false)
{
int mode = CSGFlag;
int result, count;
bool _protected;
ResetBounds(w);
CopyOriginal();
foreach (TCSGBrush brush in Collist)
{
if (brush != this)
{
foreach (TCSGSurface s in brush.Surface_List)
{
foreach (TCSGTriangle t in s.Original_List)
{
foreach (TCSGSurface s2 in this.Surface_List)
{
foreach (TCSGTriangle t2 in s2.Triangle_List)
{
if (t2.tarid != t.id)
{
if (t2.del == 0)
{
result = t2.ClassifyPolygon(t);
switch (result)
{
case CSG_SpliTCSGTriangle:
if (t2.Triangles_Collide(t) == true)
{
t2.Split_Triangle(t, s2.Triangle_List);
}
break;
}
}
}
}
}
}
}
}
Overwrite = false;
foreach (TCSGSurface s in Surface_List)
{
foreach (TCSGTriangle t in s.Triangle_List)
{
foreach (TCSGBrush brush1 in Collist)
{
if (brush1 == this)
{
Overwrite = true;
continue;
}
t.del = 1;
t.ClipBrush(brush1, CSGFlag, Overwrite);
}
Overwrite = false;
if (t.del == 1 && t._protected == false)
{
t.Remove();
}
}
}
if (recursive == true)
{
foreach (TCSGBrush brush2 in Collist)
{
if (brush2 != this)
{
brush2.CSG(w, false, dynamic);
}
}
}
}
}
Как только функция задействуется, вылетает исключение!
Collection was modified after the enumerator was instantiated