# Method GetConnectedLines

### GetConnectedLines<TCell>(IGrid<GridPoint2, TCell>, GridPoint2, Func<GridPoint2, GridPoint2, bool>, Func<GridPoint2, int, bool, GridPoint2>, int)

Gets all the cells in the grid that is connected in a "line" from the given point. Line is defined by an arbitrary function that gives the next point in line, given a current point, the direction, and whether to go forward or backward.

`public static IEnumerable<IEnumerable<GridPoint2>> GetConnectedLines<TCell>(IGrid<GridPoint2, TCell> grid, GridPoint2 point, Func<GridPoint2, GridPoint2, bool> isNeighborsConnected, Func<GridPoint2, int, bool, GridPoint2> getNextPoint, int directionCount)`

#### Parameters

`grid`

IGrid<GridPoint2, TCell>The grid

`point`

GridPoint2The point to start at

`isNeighborsConnected`

Func<GridPoint2, GridPoint2, bool>Whether of not neighbors are connected. Neighbors in this case are consecutive points on a line.

`getNextPoint`

Func<GridPoint2, int, bool, GridPoint2>A function used to traverse lines. It should give the next point in line from the given line in the given direction, either forward or backwards depending on the bool. It is up to the caller to interpret the direction index. This function will be called for all values of the direction index between 0 and one less than the direction count. It does not matter which direction is which index, as long as you handle it consistently. Finaly, if q == getNextPoint(p, n, true), then the following must hold: p == getNextPoint(q, n, false). Here is an example of a function that traverses lines on a rect grid:

`public RectPoint GetNextPointInLineOnRectGrid(RectPoint p, int directionIndex, bool forward) { switch(directionIndex) { case 0: return point + forward?RectPoint.North, RectPoint.South; case 1: return point + forward?RectPoint.West, RectPoint.East; case 2: return point + forward?RectPoint.South, RectPoint.North; case 3: return point + forward?RectPoint.East, RectPoint.West; }`

`throw(new IllegalArgumentException); }</code></pre></example>`

`directionCount`

intHow many line directions there are at each point. For example, hex grids have 6 for typical lines

#### Returns

#### Type Parameters

`TCell`

The cell type of the grid

### GetConnectedLines<TCell>(IGrid<GridPoint2, TCell>, GridPoint2, Func<GridPoint2, GridPoint2, bool>)

Gets all the cells in the grid that is connected in a "line" from the given point.

`public static IEnumerable<IEnumerable<GridPoint2>> GetConnectedLines<TCell>(IGrid<GridPoint2, TCell> grid, GridPoint2 point, Func<GridPoint2, GridPoint2, bool> isNeighborsConnected)`

#### Parameters

`grid`

IGrid<GridPoint2, TCell>The grid

`point`

GridPoint2The point to start at

`isNeighborsConnected`

Func<GridPoint2, GridPoint2, bool>Whether of not neighbors are connected

#### Returns

#### Type Parameters

`TCell`

The cell type of the grid