NX Journal Save the list of assemblies as csv

2019/12/13 categories:NX Journal| tags:NX Journal|Python|

I wrote a program to output the assembly tree list and parts list in csv in NX Journal.

I use “GetChildren” and “IsSuppressed” of the “component” class to get the child parts and save them as a CSV file with csv of the python standard library. Put the attribute you want to get in “attr”, the key of the dictionary is the attribute to get from the component, and the value will be the name used when saving CSV. The CSV file is saved as “parts_list.csv” and “tree_list.csv” directly under the D drive.

The output parts list is a list of parts counted without duplication. Components that are suppressed in both the tree list and parts list are skipped.

Python Code

import csv
import NXOpen

attr = {
    "part_number":"Part number",
    "part_name":"Part name",
}

def main():
    theSession  = NXOpen.Session.GetSession()
    workPart = theSession.Parts.Work
    theComponent = workPart.ComponentAssembly.RootComponent
    rank1 = 0
    parts_list = {}

    # Add assembly top
    tree_list = [ [rank1, theComponent] ]

    # Recursively get the attributes of child parts
    recursion( theComponent, rank1 + 1, tree_list, parts_list )

    # Csv output tree list
    csv_tree_list = [ [attr[key] for key in attr.keys()] ]
    for tmp in tree_list:
        component = [tmp[0]]
        for key in attr.keys():
            try:
                component.append( tmp[1].GetStringAttribute(key) )
            except:
                component.append("")
        csv_tree_list.append(component)
    saveCSV("D:\\tree_list.csv", csv_tree_list)
 
    # Csv output parts list
    csv_parts_list = [ [key, parts_list1[key]] for key in parts_list1 ]
    saveCSV("D:\\parts_list.csv", csv_parts_list)

def saveCSV(filename, lists):
    with open(filename, "w", encoding="cp932") as f:
        writer = csv.writer(f, lineterminator="\n")
        writer.writerows(lists)

def recursion( component1, rank2, tree_list2, parts_list2 ):
    for child1 in component1.getChildren():
 
        # Skip if suppressed
        if child1.IsSuppressed:
            continue
 
        # Add to tree list
        tree_list2.append( [rank2, child1] )
 
        # Add to parts list
        part_no = component2.GetStringAttribute(attr["Part number"])
        if part_no in parts_list2.keys:
            parts_list2[part_no] = parts_list2[part_no] + 1
        else:
            parts_list2[part_no] = 1
 
        # Recursive execution
        recursion( child1, rank2 + 1, tree_list2, parts_list2 )

if __name__ == '__main__':
    main()

Share post

Related Posts

コメント