Example #1
0
// 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);
}
Example #2
0
// 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);
	}
}