#
# 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.
#
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Author: Larry Pearce
# Revised by: Larry Pearce
# Revision History
# Date         Change                                 By
# 2020-10-13   Original code                          Larry Pearce

import apex


def countFEinPart(part):
    numNodes = 0
    numElms  = 0
    status   = 0
    try:
        meshBodies = part.getMeshes()
        for mesh in meshBodies:
            elms = mesh.getElements()
            nodes = mesh.getNodes()
            numElms  += elms.len()
            numNodes += nodes.len()
    except:
        status = 1
    numEnt = []
    numEnt.append(numElms)
    numEnt.append(numNodes)
    numEnt.append(status)
    return numEnt


def processParts(parts):
    partData = []
    outStr = "Elements - Nodes : Part Name"
    print(outStr)
    for part in parts:
        numEnt = countFEinPart(part)
        if numEnt[2] == 0:
            partData.append([part.getName(), numEnt[1], numEnt[0]])
    return partData


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

    returnData = {}
    returnData["partData"] = None

    myModel = apex.currentModel()

    _selected = apex.selection.getCurrentSelection()
    selParts = apex.entityCollection()
    for sel in _selected:
        if sel.getEntityType() == apex.EntityType.Assembly:
            selParts += sel.getParts(True)
        elif sel.getEntityType() == apex.EntityType.Part:
            selParts.append(sel)
        else:
            continue

    if selParts.len() == 0:
        selParts = myModel.getParts(True)

    partData = processParts(selParts)

    returnData["partData"] = partData

    return returnData




