Compute area (not surface area) and perimeter of a mesh
There's a small problem with your method. When the mesh self shadows then part of the model will be counted twice. 

You can get the projection of a mesh onto an arbitrary plane by finding the rotation from the normal of the plane to the Z axis and rotating the mesh with it. After that you discard the Z component.

However it's more straightfoward to simply draw the mesh with appropriate projection and counting how many pixels it takes up.



An edge can be part of the perimeter only when both the triangles that make it are projected onto the same side of the projected line. 

You can use that to walk around the perimeter. Start with the negative x most point after the rotation and follow the lines. When another potential perimeter line crosses the current line you start following that one instead.