NX Journal 子部品の属性をテキスト出力

Share on:

子部品の属性をテキストで出力するプログラムを作成しました。

attribute_idとかattribute_name、attribute_materialは環境に合わせて書き換えます。結果はfilenameの場所にカンマ区切りのテキストとして保存されます。

Pythonコード

 1import NXOpen
 2
 3filename = "D:\\tree.txt"
 4dict_attr = { "attribute_id":"ID", "attribute_name":"名前", "attribute_material":"材質" }
 5titles = ["階層", "抑制", "ID", "名前", "材質"]
 6
 7def main():
 8    theSession  = NXOpen.Session.GetSession()
 9    workPart = theSession.Parts.Work
10    theComponent = workPart.ComponentAssembly.RootComponent
11    rank1 = 0
12
13    # アセンブリトップの属性取得
14    dicts1 = [ componentToDict( theComponent, rank1 ) ]
15
16    # 子部品の属性を再帰で取得
17    recursion( theComponent, rank1 + 1, dicts1 )
18
19    # タイトルをテキストで出力
20    with open(filename, mode='a') as f:
21        f.write( ','.join(titles) )
22
23    # 取得結果をテキストで出力
24    attributes1 = [ dictToText(dict1) for dict1 in dicts1 ]
25    with open(filename, mode='a') as f:
26        f.write( '\n'.join(attributes1) )
27
28def recursion( component1, rank2, dicts2 ):
29    for child1 in component1.GetChildren():
30        dicts2.append( componentToDict( child1, rank2 ) )
31        recursion( child1, rank2 + 1, dicts2 )
32
33def componentToDict( component2, rank3 ):
34    attributes2 = { dict_attr[key] : component2.GetStringAttribute(key) for key in dict_attr }
35    attributes2["階層"] = str(rank3)
36    attributes2["抑制"] = str(component2.IsSuppressed)
37    return attributes2
38
39def dictToText( dict2 ):
40    return ','.join( [ dict2[key] for key in titles ] )
41
42if __name__ == '__main__':
43    main()

関連記事