Not sure you'll fully solve the problem this way because the face edges may not always represent the actual edges of the object in relation to view direction. I don't know how you are currently resolving that?
As an example a solid cylinder will likely have four faces, one planar face at each end and two cylindrical faces joined to form the shaft face. In such an example will the edges of each cylindrical face (two lines and two arcs) coincide with the edge of the solid from the view direction (all view directions)? These things are mathematical faces but in the end all such faces are split into triangles for graphical display.
If you have a series of 3D graphical triangles, edges and face normal values:
Each triangle normal value can be compared to view direction (facing more towards, more away or perpendicular to via dot product).
Each edge is part of two triangles (for fully enclosed volume).
If an edge is part of one triangle with normal that points more opposite to view direction than towards and one triangle that points more towards than opposite the view direction (or perpendicular to) then that edge is part of the periphery I believe i.e. it is in a region where the face starts to curve away from viewer.
After getting the edges that are on the periphery form loops by comparing ends, you may get overlaps.
You then decide either keep lines or draw curves through points of lines that form loops.
You still then have secondary problem of one solid totally obscuring another. To eliminate such ReferenceIntersector.FindNearest could be used with rays pointing in view direction with search grid based on view scale. This may be the first step since it will identify the parametric faces that need to be triangulated.
I would have suggested IExportContext2D.OnFaceEdge2D but this notes that it exports non visible edges also.
I suppose it is obvious to state you only need to follow this more convoluted approach for non-planar faces.