You wouldn't have to necessarily pick/label each part manually...
Select the roof faces/edges [inside a component/group].
Run the script.
It first we find all faces [selection.grep(Sketchup::Face)].
These are categorized by their properties:
All faces with a normal that is 'up' are potential roof surfaces.
All faces with a normal that is down are potential soffits [z==-1 in flat downwards]
All those that are vertical are potential eaves/fascias/verges - the verges differ from the rest as their top bounding edge is not horizontal.
The slope is the roof is easily got from the angle between the Z_AXIS and the face.normal converted from radians to degrees [or A:B if that's preferred].
Each can be given an attribute containing the data.
Each of theses faces can be written to hash and eventually into a CSV file with type, slope, area, material etc.
Now we'll look at all edges [selection.grep(Sketchup::Edge)].
Again these are categorized by their properties:
If a line is horizontal then it's either a ridge, an eaves or a soffit-edge: if it's at its faces' bounds.max it's a ridge, an eaves's faces will either be just 1 or if 2 include a vertical face [the fascia] etc.
If a line slopes then its either a hip-ridge, a valley or a verge: again some rules can work out which type - a verge's faces will include one vertical face, the angle between the hip/valley faces' normals can indicate a convex [hip] or concave [valley] form.
Again these can be an attribute containing the data.
Each of theses edges can be written to hash and eventually into a CSV file with type, slope, area, material etc.
This would be a good Ruby project to cut-your-teeth on... why not try it yourself...