Face* Interface::getFaceNear(QPointF p) { HalfEdge *min = getArestaNear(p); if(isExterna(min->getFace())) min = min->getTwin(); if(dentroFace(min,p)) return min->getFace(); if(isExterna(min->getTwin()->getFace()) || dentroFace(min->getTwin(),p)) return min->getTwin()->getFace(); return NULL; }
void Render::renderizaFaceExterna(QPen *pen) { bool passa; QVector<HalfEdge*> *list = &(interface.componentesFaceExterna); QVector<HalfEdge*> temp; HalfEdge *val; HalfEdge::iterator it, jt; QImage buffExt(buffer->width(), buffer->height(), QImage::Format_ARGB32_Premultiplied); QPainter p; p.begin(&buffExt); p.setCompositionMode(QPainter::CompositionMode_Source); p.fillRect(buffExt.rect(), pen->color()); p.end(); for(int i = 0; i < list->size(); ++i) { val = list->at(i); passa = false; for(it = val->v_begin(); it != val->v_end() ; ++it) { if(dentroFace(val->getTwin(),it->getDestino()->getPoint())) { passa = true; break; } } if( passa || componenteFaceUnica(&it)) renderizaComponente(val->getTwin(),&buffExt,QPen(Qt::transparent)); else temp.push_back(val->getTwin()); } for(int i = 0; i < temp.size(); ++i) renderizaFace(temp[i],&buffExt,*pen); p.begin(frontBuffer); p.setCompositionMode(QPainter::CompositionMode_SourceOver); p.drawImage(0,0, buffExt); p.end(); }