В двух точках вашего кода вы пишете присвоение массива следующим образом .:
this.tPoints = tpoints;
.. и это:
shape.tPoints = t_Points;
Распространенной ошибкой является предположение, что этосоздает массив с данными. Это не так. Все, что он делает, это создает переменную массива , указывающую на массив, который был там раньше.
Данные не дублируется.Поэтому, когда вы перезаписываете данные или очищаете их, «новый» массив теперь указывает на измененные или очищенные данные.
Итак все ваши объекты имеют очень одинаковые точек.
Чтобы исправить, создайте фактические копии данных!
Самый простой способ - добавить ToArray()
вызов, подобный этому:
this.tPoints = tpoints.ToArray();
.. и это:
shape.tPoints = t_Points.ToArray();
Для повторения:
int[] p1 = new int[2] { 23, 42 }; // Now we have one array.
int[] p2 = new int[2] { 3, 2 }; // Now we have two arrays.
p2 = p1; // Now we have only one array again.
p2[1]=1234; // Now p1[1] is 1234