private ArrayList<ArrayList<WingedCell>> genCellGrid(ArrayList<ArrayList<Node>> nodeGrid) {
   int numCols = (nodeGrid.get(0).size() - 1) * 2;
   int numRows = nodeGrid.size() - 1;
   ArrayList<ArrayList<WingedCell>> cellGrid = new ArrayList<>(numRows);
   for (int i = 0; i < numRows; i++) {
     int rowMod = i % 2;
     ArrayList<WingedCell> cellRow = new ArrayList<>(numCols);
     cellGrid.add(cellRow);
     generalTriangleCellFactory.setGenVertes(false);
     for (int j = 0; j < numCols; j++) {
       WingedCell cell = generalTriangleCellFactory.produce();
       cellRow.add(cell);
       if (rowMod == 0 && j % 2 == 0 || rowMod == 1 && j % 2 == 1) {
         cell.setVertex(0, nodeGrid.get(i).get(j / 2 + rowMod));
         cell.setVertex(1, nodeGrid.get(i + 1).get(j / 2 + 1));
         cell.setVertex(2, nodeGrid.get(i + 1).get(j / 2));
       } else {
         cell.setVertex(0, nodeGrid.get(i + 1).get(j / 2 + rowMod * -1 + 1));
         cell.setVertex(1, nodeGrid.get(i).get(j / 2));
         cell.setVertex(2, nodeGrid.get(i).get(j / 2 + 1));
       }
     }
   }
   return cellGrid;
 }
 public void setNodeFactory(Factory<? extends Node> nodeFactory) {
   generalTriangleCellFactory.setNodeFactory(nodeFactory);
 }
 public Factory<? extends Node> getNodeFactory() {
   return generalTriangleCellFactory.getNodeFactory();
 }
 public void setEdgeFactory(Factory<? extends WingedEdge> edgeFactory) {
   generalTriangleCellFactory.setEdgeFactory(edgeFactory);
 }
 public Factory<? extends WingedEdge> getEdgeFactory() {
   return generalTriangleCellFactory.getEdgeFactory();
 }
 public void setCellFactory(Factory<? extends WingedCell> cellFactory) {
   generalTriangleCellFactory.setCellFactory(cellFactory);
 }
 public Factory<? extends WingedCell> getCellFactory() {
   return generalTriangleCellFactory.getCellFactory();
 }