public void Erase(int stroke, List <int> points) { #if UNITY_ASSERTIONS Assert.IsTrue(stroke >= 0 && stroke < strokes.Count); #endif /*// erasing from the ends, just remove points * if ((point == 0) || point == strokes[stroke].points.Count-1) * { * strokes[stroke].points.RemoveAt (point); * return; * } * * // erasing from the middle, split the stroke * GreasePencilStroke newStroke = new GreasePencilStroke (); * * strokes[stroke].points.RemoveAt (point); * * for (int i=point; i<strokes[stroke].points.Count; ++i) * { * newStroke.Add (strokes[stroke].points[i]); * } * * for (int i=point; i<strokes[stroke].points.Count; ++i) * { * strokes[stroke].points.RemoveAt (point); * } * * strokes.Add (newStroke);*/ GreasePencilStroke oldStroke = strokes[stroke]; GreasePencilStroke newStroke = null; List <GreasePencilStroke> newStrokes = new List <GreasePencilStroke> (); for (int i = 0; i < oldStroke.points.Count; ++i) { if (!points.Contains(i)) { if (newStroke == null) { newStroke = new GreasePencilStroke(); newStrokes.Add(newStroke); } newStroke.Add(oldStroke.points[i]); } else if (newStroke != null) { newStroke = null; } } if (newStrokes.Count > 0) { strokes[stroke] = newStrokes[0]; for (int i = 1; i < newStrokes.Count; ++i) { strokes.Add(newStrokes[i]); } } else { strokes[stroke].Clear(); } newStrokes.RemoveAll(s => s.IsEmpty); }
public void StartStroke(Vector3 position, float worldSize) { currentStroke = new GreasePencilStroke(position); strokes.Add(currentStroke); _worldSize = worldSize; }