.dgnファイルでのテーブル要素の作成

.dgnファイルのテーブル要素は、Bentley® MicroStation V8i Connect Edition以降でサポートされています。.dgnテーブル要素の構造と目的は、.dwgテーブル要素と似ています。テーブルは行と列に配置されたセルの集合です。テーブル内のセルはグリッド線で区切られており、.dgnテーブル要素のセルにはテキストデータのみを含めることができます。

.dgnテーブル要素を作成するには:

1) 可能であれば、.dgnモデルまたは共有セル定義にテーブル要素を追加し、initTableDefaults()関数を使用して初期化します。テーブル要素は、そのデフォルトを初期化し、セルテキストデータで操作するためにテキストスタイルを使用します。しかし、それはテキストスタイルインデックスのみを格納します。したがって、テキストスタイルテーブルにアクセスするために.dgnデータベースが必要です。また、解像度単位(UOR)を作業単位スケールファクターに変換する必要があります(テキストスタイルはすべてのデータをUORで格納しますが、テーブル要素を.dgnモデルの一部として使用する予定がある場合、モデルの作業単位で操作する必要があります)。

OdDgTableElementPtr pTableElement = OdDgTableElement::createObject();
m_pModel3d->addElement( pTableElement );
pTableElement->initTableDefaults();

2) 初期化後、テーブル本文のテキストスタイルを設定します。デフォルトの行の高さ、デフォルトの列の幅、最小のテーブルセルの幅と高さ、およびデフォルトのテーブルセルのマージンオフセットを設定する必要があります。

OdDgTextStyleTableRecordPtr pTableTextStyle = pTextStyleTable->getDefaultData();
pTableTextStyle->setName(L"TableTextStyle");
pTableTextStyle->setTextHeight( 0.1 * dScaleToUORs );
pTableTextStyle->setTextWidth( 0.1 * dScaleToUORs );
pTableTextStyle->setFontEntryId( pFontTable->getFont("Arial")->getNumber() );
pTableTextStyle->setColorIndex(250);
pTextStyleTable->add( pTableTextStyle );
pTableElement->setBodyTextStyle( pTableTextStyle->getEntryId() );

3) テーブルの列と行を追加します。行と列の測定値は、作成後にデフォルトデータで初期化されます。

pTableElement->addColumn();
…
pTableElement->addColumn();
pTableElement->addRow();
…
pTableElement->addRow();

4) 列と行の測定値を変更します。以下は、行と列の測定値を変更する例です。

pTableElement->getRow(1)->setHeight( 0.2 * minor );
…
pTableElement->getColumn(1)->setWidth( 0.15 * major );

5) テーブルセルを結合します。複数のテーブルセルを1つの大きなセルに結合できます。セル結合には3つのルールがあります。

  • 結合はそれ自体と交差することはできません。
  • 長方形のセル領域のみを結合できます。
  • 結合の内容は、左上(ベース)セル内の内容です。
OdDgTableElementMerge titleMerge;
titleMerge.setBaseRowIndex(0);
titleMerge.setBaseColumnIndex(0);
titleMerge.setRowCount(1);
titleMerge.setColumnCount(5);

pTableElement->addMerge( titleMerge );

6) テーブルの塗りつぶし色を設定します。テーブルの塗りつぶしには2種類あります。まず、すべてのセルを塗りつぶすことができます。

pTableElement->getCell(1,4)->setFillColor(32);

また、奇数行と偶数行の塗りつぶし色をテーブルの本文行に適用できます。(テーブル要素には異なる種類の行が含まれています。デフォルトではすべての行が本文行ですが、0以外の数のタイトル行、ヘッダー行、フッター行を設定することも可能です。)

pTableElement->setOddFillColor( 1 );
pTableElement->setOddFillColorFlag(true);
pTableElement->setEvenFillColor( 2 );
pTableElement->setEvenFillColorFlag(true);

7) セルの内容を設定します。テーブル要素のセルにはテキストデータのみを含めることができます。セルの内容を設定する方法は2つあります。

  • 簡単な方法:「setCellText( const OdString& strText )」関数を使用して単純なテキストを設定します。この関数は、セルテキストスタイルを持つテキストノードを作成し、必要な文字列を持つ1つのテキスト要素を追加します。
  • 手動の方法:異なる色、サイズ、フォントなどを持つ複数行のテキストを設定し、テキストノードを作成してテキスト要素で埋め、その後setCellText(…)関数を使用して設定します。
OdDgTextNode3dPtr pMTextNode = OdDgTextNode3d::createObject();
OdDgText3dPtr pTextLine1 = OdDgText3d::createObject();
OdDgText3dPtr pTextLine2 = OdDgText3d::createObject();
…
pMTextNode->add( pTextLine1 );
pMTextNode->add( pTextLine2 );
…
pMTextNode->setDatabaseDefaults(m_pModel3d->database(), true);
pMTextNode->applyTextStyle( pMextStyle->elementId() );
pMTextNode->setJustification( OdDg::kCenterCenter );
pMTextNode->setLineSpacing(0.09);
pMTextNode->setLineSpacingType( OdDgTextExtendedProperties::kExact );
pTextLine1->applyTextStyle( pMextStyle->elementId() );
pTextLine2->applyTextStyle( pMextStyle->elementId() );
…
pTextLine1->setText(L"Multiline Text:");
pTextLine1->setCrCount(1);
pTextLine2->setText(L"- Line 1.");
pTextLine2->setItalics(true);
pTextLine2->setCrCount(1);
…
pTableElement->getCell(3,2)->setCellText( pMTextNode );

8) テキストの位置、テキストの回転、セルの余白タイプ、およびセルの境界線もフォーマットできます。

// Set text alignment “Center, Middle”
pTableElement->getCell(1,1)->setTextAlignment(OdDgTableCellElement::kCenterMiddle);
// modify cell borders.
OdDgTableCellSymbology borderData;
borderData.setColorIndex(3);
borderData.setLineStyle(2);
borderData.setLineWeight(3);
borderData.setLineVisibility(true);

pTableElement->getCell(3,2)->setTopBorder(borderData);
pTableElement->getCell(3,2)->setBottomBorder(borderData);
pTableElement->getCell(3,2)->setLeftBorder(borderData);
pTableElement->getCell(3,2)->setRightBorder(borderData);

この記事のすべてのコードは、ExDgnCreateサンプルからのものです。テーブルの作成に関する詳細については、そちらを参照してください。

今すぐ始める

ODAソフトウェアを60日間無料でお試しください。
リスクなし、クレジットカード不要。

無料で試す