// GENERAL STUFF //////////////// void FEdgeXDetector::preProcessShape(WXShape* iWShape) { _meanK1 = 0; _meanKr = 0; _minK1 = FLT_MAX; _maxK1 = -FLT_MAX; _minKr = FLT_MAX; _maxKr = -FLT_MAX; _nPoints = 0; _meanEdgeSize = iWShape->getMeanEdgeSize(); vector<WFace*>& wfaces = iWShape->GetFaceList(); vector<WFace*>::iterator f,fend; // view dependant stuff for(f=wfaces.begin(), fend=wfaces.end(); f!=fend; ++f){ preProcessFace((WXFace*)(*f)); } vector<WVertex*>& wvertices = iWShape->GetVertexList(); for(vector<WVertex*>::iterator wv=wvertices.begin(), wvend=wvertices.end(); wv!=wvend; ++wv){ // Compute curvatures WXVertex * wxv = dynamic_cast<WXVertex*>(*wv); computeCurvatures(wxv); } _meanK1 /= (real)(_nPoints); _meanKr /= (real)(_nPoints); }
// Build Smooth edges ///////////////////// void FEdgeXDetector::buildSmoothEdges(WXShape *iShape) { bool hasSmoothEdges = false; // Make a last pass to build smooth edges from the previous stored values: //-------------------------------------------------------------------------- vector<WFace*>& wfaces = iShape->GetFaceList(); for (vector<WFace *>::iterator f = wfaces.begin(), fend = wfaces.end(); f != fend; ++f) { vector<WXFaceLayer *>& faceLayers = ((WXFace *)(*f))->getSmoothLayers(); for (vector<WXFaceLayer *>::iterator wxfl = faceLayers.begin(), wxflend = faceLayers.end(); wxfl != wxflend; ++wxfl) { if ((*wxfl)->BuildSmoothEdge()) hasSmoothEdges = true; } } if (hasSmoothEdges && !_computeRidgesAndValleys && !_computeSuggestiveContours) { vector<WVertex *>& wvertices = iShape->getVertexList(); for (vector<WVertex*>::iterator wv = wvertices.begin(), wvend = wvertices.end(); wv != wvend; ++wv) { // Compute curvatures WXVertex *wxv = dynamic_cast<WXVertex *>(*wv); computeCurvatures(wxv); } _meanK1 /= (real)(_nPoints); _meanKr /= (real)(_nPoints); } }