const int seedFaceId = ... // Should be selected, e.g. by area in the simplest case.
// Get all adjacent faces. AAG should have been constructed beforehand.
asiAlgo_Feature newSeeds;
const asiAlgo_Feature& neighbors = aag->GetNeighbors(seedFaceId);
//
for ( asiAlgo_Feature::Iterator nit(neighbors); nit.More(); nit.Next() )
{
const int nid = nit.Key();
asiAlgo_AAG::t_arc arc(seedFaceId, nid);
// Get the dihedral angle.
Handle(asiAlgo_FeatureAttrAngle)
DA = aag->ATTR_ARC<asiAlgo_FeatureAttrAngle>(arc);
//
if ( DA.IsNull() )
continue;
if ( !asiAlgo_FeatureAngle::IsSmooth( DA->GetAngleType() ) )
continue;
// To continue iterating.
newSeeds.Add(nid);
// TODO: continue recursively with `newSeeds`...
}