NX Journal 図面の表からセルのテキストを取得

2022/01/07 categories:NX Journal| tags:NX Journal|Python|

Pythonで図面の表からセルのテキストを取得するプログラムを作成してみました。

概要

NX journalで図面の表を扱う場合、少し面倒なコードになるのでどのように扱えば良いか調べてみました。表のオブジェクトは以下の2個のオブジェクトがあるようですが、それらのクラスには行や列、セルについてのプロパティは無いようです。

テーブルを扱う場合は以下のクラスを使用すると良いようです。

NXOpen.Session.GetSession().Tabnot

例えば、行の高さや列の幅を設定する場合は以下のコードのように、AskNmRowsやAskNthRow、SetRowHeightなどを使うことで実装できます。

row_count = theUfSession.Tabnot.AskNmRows(table.Tag)
column_count = theUfSession.Tabnot.AskNmColumns(table.Tag)

for r in range(row_count):
    row = theUfSession.Tabnot.AskNthRow(table.Tag, r)
    theUfSession.Tabnot.SetRowHeight(row, 10.0)

for c in range(column_count):
    column = theUfSession.Tabnot.AskNthColumn(table.Tag, c)
    theUfSession.Tabnot.SetColumnWidth(column, 30.0)

r行、c列のセルにテキストをセットする場合は下記のようなコードになります。上述のコードと同様に、行のタグや列のタグ、セルのタグなどが必要なため、コードが少し面倒になります。

row = theUfSession.Tabnot.AskNthRow(table.Tag, r)
column = theUfSession.Tabnot.AskNthColumn(table.Tag, c)
cell = theUfSession.Tabnot.AskCellAtRowCol(row, column)
cell_text = theUfSession.Tabnot.AskCellText(cell)

実行結果

3行4列の表がある図面を作業パートにした状態で下記コードを実行すると、以下のように取得結果が表示されます。

[X=79.782895316268508,Y=156.67783422678403,Z=0]
a1	a2	a3	a4
b1	b2	b3	b4
c1	c2	c3	c4

Pythonコード

import NXOpen
import NXOpen.Annotations
import NXOpen.UF

def main() : 

    theSession  = NXOpen.Session.GetSession()
    theUfSession  = NXOpen.UF.UFSession.GetUFSession()
    workPart = theSession.Parts.Work
    displayPart = theSession.Parts.Display

    lw = theSession.ListingWindow
    lw.Open()

    for table_section in workPart.Annotations.TableSections:
        table_tag = theUfSession.Tabnot.AskTabularNoteOfSection(table_section.Tag)
        table = NXOpen.TaggedObjectManager.GetTaggedObject(table_tag)
        
        if not type(table) is NXOpen.Annotations.Table:
            continue

        row_count = theUfSession.Tabnot.AskNmRows(table.Tag)
        column_count = theUfSession.Tabnot.AskNmColumns(table.Tag)
        
        for r in range(row_count):
            row = theUfSession.Tabnot.AskNthRow(table.Tag, r)
            theUfSession.Tabnot.SetRowHeight(row, 10.0)
        
        for c in range(column_count):
            column = theUfSession.Tabnot.AskNthColumn(table.Tag, c)
            theUfSession.Tabnot.SetColumnWidth(column, 30.0)
        
        text = ''
        for r in range(row_count):
            row = theUfSession.Tabnot.AskNthRow(table.Tag, r)
            row_text = []
            for c in range(column_count):
                column = theUfSession.Tabnot.AskNthColumn(table.Tag, c)
                cell = theUfSession.Tabnot.AskCellAtRowCol(row, column)
                cell_text = theUfSession.Tabnot.AskCellText(cell)
                row_text.append(cell_text)
            text += '\t'.join(row_text) + '\n'
        
        lw.WriteLine('{}'.format(table_section.AnnotationOrigin))
        lw.WriteLine('{}'.format(text))
    
if __name__ == '__main__':
    main()

Share post

Related Posts

コメント