Показать сообщение отдельно
Старый 10.08.2010, 10:21   #3
Miha
Нуждающийся
 
Регистрация: 07.04.2007
Сообщений: 50
Написано 5 полезных сообщений
(для 30 пользователей)
Ответ: Перемещение по IList

Вообщем в двух словах!
Переписываю код с 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
(Offline)
 
Ответить с цитированием