+OPTIMIZE_FOR_SPACE = True
+
+OUTPUT_FORMAT = 'SVG'
+
+
+# ---------------------------------------------------------------------
+#
+## Utility Mesh class
+#
+# ---------------------------------------------------------------------
+class MeshUtils:
+ def __init__(self):
+ return
+
+ def getEdgeAdjacentFaces(self, edge, mesh):
+ """Get the faces adjacent to a given edge.
+
+ There can be 0, 1 or more (usually 2) faces adjacent to an edge.
+ """
+ adjface_list = []
+
+ for f in mesh.faces:
+ if (edge.v1 in f.v) and (edge.v2 in f.v):
+ adjface_list.append(f)
+
+ return adjface_list
+
+ def isVisibleEdge(self, e, mesh):
+ """Normal edge selection rule.
+
+ An edge is visible if _any_ of its adjacent faces is selected.
+ Note: if the edge has no adjacent faces we want to show it as well,
+ useful for "edge only" portion of objects.
+ """
+
+ adjacent_faces = self.getEdgeAdjacentFaces(e, mesh)
+
+ if len(adjacent_faces) == 0:
+ return True
+
+ selected_faces = [f for f in adjacent_faces if f.sel]
+
+ if len(selected_faces) != 0:
+ return True
+ else:
+ return False
+
+ def isSilhouetteEdge(self, e, mesh):
+ """Silhuette selection rule.
+
+ An edge is a silhuette edge if it is shared by two faces with
+ different selection status or if it is a boundary edge of a selected
+ face.
+ """
+
+ adjacent_faces = self.getEdgeAdjacentFaces(e, mesh)
+
+ if ((len(adjacent_faces) == 1 and adjacent_faces[0].sel == 1) or
+ (len(adjacent_faces) == 2 and
+ adjacent_faces[0].sel != adjacent_faces[1].sel)
+ ):
+ return True
+ else:
+ return False
+