NX Journal アセンブリのリストをcsvで保存
2019/12/13 categories:NX Journal| tags:NX Journal|Python|
NX Journalでアセンブリのツリーのリストとパーツリストをcsvで出力するプログラムを作成しました。
componentクラスの GetChildrenや IsSuppressed を使い子部品を取得して、pythonの標準ライブラリのcsvでCSVファイルとして保存しています。取得したい属性はattrに入れて、辞書のキーがコンポーネントから取得する属性で、値がCSVの保存時に使用する名前となります。CSVファイルはDドライブ直下にparts_list.csvとtree_list.csvで保存されます。
出力されるパーツリストは重複無しで部品を計数したリストです。ツリーリスト、パーツリスト共に抑制されたコンポーネントはスキップするようにしています。
Pythonコード
import csv
import NXOpen
attr = {
"part_number":"部品番号",
"part_name":"部品名前",
}
def main():
theSession = NXOpen.Session.GetSession()
workPart = theSession.Parts.Work
theComponent = workPart.ComponentAssembly.RootComponent
rank1 = 0
parts_list = {}
# アセンブリトップを追加
tree_list = [ [rank1, theComponent] ]
# 子部品の属性を再帰で取得
recursion( theComponent, rank1 + 1, tree_list, parts_list )
# ツリーリストをcsv出力
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出力
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():
# 抑制されていればスキップ
if child1.IsSuppressed:
continue
# ツリーリストに追加
tree_list2.append( [rank2, child1] )
# パーツリストに追加
part_no = component2.GetStringAttribute(attr["部品番号"])
if part_no in parts_list2.keys:
parts_list2[part_no] = parts_list2[part_no] + 1
else:
parts_list2[part_no] = 1
# 再帰実行
recursion( child1, rank2 + 1, tree_list2, parts_list2 )
if __name__ == '__main__':
main()