# coding: utf-8
#
# Copyright © 2020 MSC.Software Corporation
#  
# Permission to use Scripts
#  
# Permission is granted to MSC.Software customers with valid licenses of the MSC Apex™ software 
# to use script files posted on this page (collectively “Scripts”) solely for customers’ own authorized 
# internal use in conjunction with licensed use of the MSC Apex software.  
# No other use is permitted.  No license to MSC Apex or other software is granted under this Permission.
#  
# SCRIPTS ARE PROVIDED ON AN "AS-IS" BASIS, WITH NO WARRANTIES OF ANY KIND.  USE OF THE SCRIPTS IS AT CUSTOMER'S SOLE RISK.
#  
# IN NO EVENT SHALL MSC.SOFTWARE CORPORATION, ITS AFFILIATES, SUBSIDIARIES, SUPPLIERS, AGENTS, REPRESENTATIVES OR EMPLOYEES BE LIABLE FOR ANY 
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, TORT, 
# STRICT LIABILITY, OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION USE OF THE SCRIPTS, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
#  
# Customer shall indemnify, defend and hold MSC.Software Corporation, its affiliates, subsidiaries, suppliers, agents, 
# employees or representatives (collectively, “Indemnified Parties”) harmless from and against any third-party claims 
# brought against Indemnified Parties rising out of or in connection with Customer’s use of the Scripts.
#

# Author: Larry Pearce
# Revised by: Larry Pearce
# Revision History
# Date         Change                                 By
# 2020-10-12   Original code (1.0)                    Larry Pearce


import apex
from apex.construct import Point3D, Point2D
import sys


def main(dict={}):
    apex.disableShowOutput()

    #unitSystem = r'''in-slinch-s-lbf'''
    #apex.setScriptUnitSystem(unitSystemName = unitSystem)

    shortEdgeFontColor   = apex.ColorRGB(255, 255, 255)  # white
    fontSize    = 14

    longEdgeFontColor    = apex.ColorRGB(192,   0,   0)  # reddish

    myModel = apex.currentModel()

    parts = myModel.getParts(True)

    visibleSurfs = []
    for part in parts:
        surfs = part.getSurfaces()
        for surf in surfs:
            if surf.getVisibility() == 1:
                visibleSurfs.append(surf)

    exteriorEdges = []
    for surf in visibleSurfs:
        edges = surf.getExteriorEdges()
        for edge in edges:
            exteriorEdges.append(edge)

    numFreeEdges = len(exteriorEdges)

    for edge in exteriorEdges:
        pt3d = edge.getMidPoint()
        name = "E"+str(edge.getIndex())
        apex.display.displayText(text=name, textLocation=pt3d, graphicsFontColor=longEdgeFontColor, graphicsFontSize=fontSize)



