示例#1
0
void Clipping::clippingPoligonoFechado(Poligono* poligono) {
	list<Coordenada*> *poligonoVertices = getPoligonoLista(poligono);
	if(poligonoVertices->size() > poligono->getCPPCoordenadas()->size()){
		list<Coordenada*> *windowVertices = getWindowLista(poligonoVertices);
		list<Coordenada*> *novosVertices = new list<Coordenada*>();
		list<Coordenada*>::iterator it = poligonoVertices->begin();
		Coordenada* first = NULL;
		while (true) {
			Coordenada *atual = (*it);
			if(atual == first)
				return;
			it = ListUtils::incrementIteratorCircular(poligonoVertices, it);
			if (!atual->isVisitado() && atual->isInterseccao() && CoordenadaUtils::isDentroWindow(*it, window)) {
				if(!first)
					first = atual;
				atual->setVisitado(true);
				novosVertices->push_back(atual);
				percorrerLista(poligonoVertices, windowVertices, novosVertices, ListUtils::getIteratorInObject(poligonoVertices, atual));

				Poligono *poligonoNovo = poligono->clone();
				poligonoNovo->setCPPCoordenadas(novosVertices);
				window->addWindowObjeto(poligonoNovo);
				novosVertices = new list<Coordenada* >();
			}
		}
		delete novosVertices;
		ListUtils::destroyListByCondition(windowVertices, CoordenadaUtils::notVisitado);
	}else
		window->addWindowObjeto(poligono->clone());
	ListUtils::destroyListByCondition(poligonoVertices, CoordenadaUtils::notVisitado);
}
示例#2
0
void percorrerTabelaHash(Hash *hash_, int m) {
	int i;

	printf("Tabela HASH:\n");
	for(i = 0; i < m; i++) {
		printf("[%d] ", i);
		if(hash_[i].lista != NULL) {
			percorrerLista(hash_[i].lista);
		} else {
			printf("NULL\n");
		}
	}
}
示例#3
0
void Clipping::percorrerLista(list<Coordenada* >* followList, list<Coordenada*>* goList, list<Coordenada*>* novaLista, _List_iterator<Coordenada*> it){
	while(true){
		it = ListUtils::incrementIteratorCircular(followList, it);
		if(!(*it)->isVisitado()){
			(*it)->setVisitado(true);
			novaLista->push_back(*it);
			if((*it)->isInterseccao()){
				percorrerLista(goList, followList, novaLista, ListUtils::getIteratorInObject(goList, *it));
				return;
			}
		}else
			return;
	}
}