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

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

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



import NXOpen

filename = "D:\\tree.txt"
dict_attr = { "attribute_id":"ID", "attribute_name":"名前", "attribute_material":"材質" }
titles = ["階層", "抑制", "ID", "名前", "材質"]

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

    # アセンブリトップの属性取得
    dicts1 = [ componentToDict( theComponent, rank1 ) ]

    # 子部品の属性を再帰で取得
    recursion( theComponent, rank1 + 1, dicts1 )

    # タイトルをテキストで出力
    with open(filename, mode='a') as f:
        f.write( ','.join(titles) )

    # 取得結果をテキストで出力
    attributes1 = [ dictToText(dict1) for dict1 in dicts1 ]
    with open(filename, mode='a') as f:
        f.write( '\n'.join(attributes1) )

def recursion( component1, rank2, dicts2 ):
    for child1 in component1.GetChildren():
        dicts2.append( componentToDict( child1, rank2 ) )
        recursion( child1, rank2 + 1, dicts2 )

def componentToDict( component2, rank3 ):
    attributes2 = { dict_attr[key] : component2.GetStringAttribute(key) for key in dict_attr }
    attributes2["階層"] = str(rank3)
    attributes2["抑制"] = str(component2.IsSuppressed)
    return attributes2

def dictToText( dict2 ):
    return ','.join( [ dict2[key] for key in titles ] )

if __name__ == '__main__':
    main()

コメント

タイトルとURLをコピーしました