#include "Vertex.h" #include "Edge.h" #include "EdgeUse.h" #include "Face.h" using namespace CCS; bool Vertex::findEdgeUse(Vertex *end, EdgeUse &out) { list::iterator edge_iter; for(edge_iter = incEdges.begin(); edge_iter != incEdges.end(); ++edge_iter) { Edge* edge = *edge_iter; if(edge->end == end) { // found it. out.edge = edge; out.dir = EUD_CCW; if(edge->start != this) __ERROR__("bad inc edge!!"); return true; } else if(edge->start == end) { // found it, reversed. // use CW out.edge = edge; out.dir = EUD_CW; if(edge->end != this) __ERROR__("bad inc edge!!"); return true; } } return false; } list Vertex::getIncidentFaces() { list incFaces; // go along inc edges and get the left face..unless this vert // is the end pt..in which case get the right face list::iterator e_iter; for(e_iter = incEdges.begin(); e_iter != incEdges.end(); ++e_iter) { Edge* e = *e_iter; if(this == e->start) { incFaces.push_back(e->leftFace); } else { incFaces.push_back(e->rightFace); } } return incFaces; } Vector Vertex::calcAvgNormal() { list incFaces = getIncidentFaces(); Vector norm(0,0,0,0); // must init to all 0's list::iterator f_iter; for(f_iter = incFaces.begin(); f_iter != incFaces.end(); ++f_iter) { Face* f = *f_iter; norm += f->calcNormalAt(this); } norm[3] = 0.0; norm.Normalize(); return norm; } TXS::NormRGB Vertex::calcAvgColor() { list incFaces = getIncidentFaces(); list rgbs; list::iterator f_iter; for(f_iter = incFaces.begin(); f_iter != incFaces.end(); ++f_iter) { Face* f = *f_iter; rgbs.push_back(f->getColorAt(this)); } return TXS::NormRGB::averageColors(rgbs); }