NX Journal アセンブリのリストをcsvで保存

Share on:

NX Journalでアセンブリのツリーのリストとパーツリストをcsvで出力するプログラムを作成しました。

componentクラスの GetChildrenや IsSuppressed を使い子部品を取得して、pythonの標準ライブラリのcsvでCSVファイルとして保存しています。取得したい属性はattrに入れて、辞書のキーがコンポーネントから取得する属性で、値がCSVの保存時に使用する名前となります。CSVファイルはDドライブ直下にparts_list.csvとtree_list.csvで保存されます。

出力されるパーツリストは重複無しで部品を計数したリストです。ツリーリスト、パーツリスト共に抑制されたコンポーネントはスキップするようにしています。

Pythonコード

 1import csv
 2import NXOpen
 3
 4attr = {
 5    "part_number":"部品番号",
 6    "part_name":"部品名前",
 7}
 8
 9def main():
10    theSession  = NXOpen.Session.GetSession()
11    workPart = theSession.Parts.Work
12    theComponent = workPart.ComponentAssembly.RootComponent
13    rank1 = 0
14    parts_list = {}
15
16    # アセンブリトップを追加
17    tree_list = [ [rank1, theComponent] ]
18
19    # 子部品の属性を再帰で取得
20    recursion( theComponent, rank1 + 1, tree_list, parts_list )
21
22    # ツリーリストをcsv出力
23    csv_tree_list = [ [attr[key] for key in attr.keys()] ]
24    for tmp in tree_list:
25        component = [tmp[0]]
26        for key in attr.keys():
27            try:
28                component.append( tmp[1].GetStringAttribute(key) )
29            except:
30                component.append("")
31        csv_tree_list.append(component)
32    saveCSV("D:\\tree_list.csv", csv_tree_list)
33 
34    # パーツリストをcsv出力
35    csv_parts_list = [ [key, parts_list1[key]] for key in parts_list1 ]
36    saveCSV("D:\\parts_list.csv", csv_parts_list)
37
38def saveCSV(filename, lists):
39    with open(filename, "w", encoding="cp932") as f:
40        writer = csv.writer(f, lineterminator="\n")
41        writer.writerows(lists)
42
43def recursion( component1, rank2, tree_list2, parts_list2 ):
44    for child1 in component1.getChildren():
45 
46        # 抑制されていればスキップ
47        if child1.IsSuppressed:
48            continue
49 
50        # ツリーリストに追加
51        tree_list2.append( [rank2, child1] )
52 
53        # パーツリストに追加
54        part_no = component2.GetStringAttribute(attr["部品番号"])
55        if part_no in parts_list2.keys:
56            parts_list2[part_no] = parts_list2[part_no] + 1
57        else:
58            parts_list2[part_no] = 1
59 
60        # 再帰実行
61        recursion( child1, rank2 + 1, tree_list2, parts_list2 )
62
63if __name__ == '__main__':
64    main()

関連記事