예제 #1
0
  VOID cPOLYGON_SPLITTER::SplitLoopAtDiagonal(BOOL diagonalPointsAreCoincident)
  {
    INT diagonal0Index = *m_diagonal0IndexIterator;
    INT diagonal1Index = *m_diagonal1IndexIterator;
    if (Debug()){
      printf("diagonal0 %d; diagonal1 %d\n", diagonal0Index, diagonal1Index);
      PrintIndices();
    }
    std::list<INT>::iterator it;
    if (diagonalPointsAreCoincident)
      it = InsertIndexBefore(m_diagonal0IndexIterator, END_LOOP_INDEX);
    else
      it = InsertIndexBefore(InsertIndexBefore(m_diagonal0IndexIterator, END_LOOP_INDEX),
    		  diagonal0Index);
    if (Debug())
    	PrintIndices();
    if (m_diagonal0IndexIterator == m_frontLoopIterator)
      m_frontLoopIterator = it;
    if (Debug())
    	PrintIndices();
    if (diagonalPointsAreCoincident)
      it = InsertIndexBefore(m_diagonal1IndexIterator, END_LOOP_INDEX);
    else
      it = InsertIndexBefore(InsertIndexBefore(m_diagonal1IndexIterator, END_LOOP_INDEX),
    		  diagonal1Index);
    if (Debug())
    	PrintIndices();
    if (m_diagonal1IndexIterator == m_frontLoopIterator)
      m_frontLoopIterator = it;
    if (Debug())
    	PrintIndices();

    //the first loop is split between the beginning and the end of the loop
    //move the indices from the front to the back of the current loop

    while (true){
      INT firstIndex = *m_frontLoopIterator;
      std::list<INT>::iterator tempBack = m_backLoopIterator;
      tempBack++;
      if (firstIndex >= 0 || (*tempBack) >= 0){
    	InsertIndexAfter(m_backLoopIterator, firstIndex);
    	m_backLoopIterator++;
        if (Debug())
        	PrintIndices();
      }
      std::list<INT>::iterator tempFront = m_frontLoopIterator;
      m_frontLoopIterator++;
      m_indices.erase(tempFront);
      if (Debug())
      	PrintIndices();
      if (firstIndex < 0)
        break;
    }
    if (m_indices.back() >= 0)
      m_indices.push_back(END_LOOP_INDEX);
    if (Debug())
    	PrintIndices();
  }
예제 #2
0
int main()
{
	Grid<int> testGrid(5, 3, 7);

	for (Grid<int>::dimension_type x = 0; x < testGrid.GetColumnCount(); x++)
	{
		for (Grid<int>::dimension_type y = 0; y < testGrid.GetRowCount(); y++)
		{
			testGrid.GetCell(x, y) = std::rand() % 80 + 1;
		}
	}

	PrintIndices(testGrid);

	for (Grid<int>::dimension_type i = 0; i < testGrid.columnCount * testGrid.rowCount; i++)
	{
		std::cout << testGrid.grid_data[i] << std::endl;
	}


	std::cout << "Check Value: " << testGrid[2][1] << std::endl;
	std::cout << "Check Value Method: " << testGrid.GetCell(2, 1) << std::endl;

	testGrid.ResizeGridPreserveData(8, 5, 9);
	
	printf("\n");

	std::cout << testGrid << std::endl;

	getchar();

    return 0;
}
예제 #3
0
  VOID cPOLYGON_SPLITTER::SplitLoop()
  {
	if (Debug()){
	  PrintPoints();
	  PrintIndices();
	}

	if (LoopContainsCoincidentVertices()){
	  SplitLoopAtDiagonal(true);
	  if (Debug())
		PrintIndices();
	}

	else if (!PrepareLoop()){ //loop needs to be split
      FindDiagonal();
      SplitLoopAtDiagonal();
      if (Debug())
    	PrintIndices();
    }
  }