private void Accumulate(ref uint cmd, ref double x, ref double y) { _generator.RemoveAll(); _generator.AddVertex(_startX, _startY, (uint)Path.EPathCommands.MoveTo); _markers.AddVertex(_startX, _startY, (uint)Path.EPathCommands.MoveTo); for (; ;) { cmd = _source.Vertex(out x, out y); if (Path.IsVertex(cmd)) { _lastCommand = cmd; if (Path.IsMoveTo(cmd)) { _startX = x; _startY = y; break; } _generator.AddVertex(x, y, cmd); _markers.AddVertex(x, y, (uint)Path.EPathCommands.LineTo); } else { if (Path.IsStop(cmd)) { _lastCommand = (uint)Path.EPathCommands.Stop; break; } if (Path.IsEndPoly(cmd)) { _generator.AddVertex(x, y, cmd); break; } } } _generator.Rewind(0); _status = EStatus.Generate; }