NX Journal 図面の表からセルのテキストを取得
2022/01/07 categories:NX Journal| tags:NX Journal|Python|
Pythonで図面の表からセルのテキストを取得するプログラムを作成してみました。
概要
NX journalで図面の表を扱う場合、少し面倒なコードになるのでどのように扱えば良いか調べてみました。表のオブジェクトは以下の2個のオブジェクトがあるようですが、それらのクラスには行や列、セルについてのプロパティは無いようです。
- NXOpen.Annotations.Table
- NXOpen.Annotations.TableSection
テーブルを扱う場合は以下のクラスを使用すると良いようです。
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()