dgnlib: 要素の書き込み

要素の書き込みは、まずDGNCreate***Elem()という名前の関数で作りたい要素を作成し、
DGNUpdateElemCore()関数で共通情報を設定、
DGNWriteElement()関数でデザインファイルに書き込み、
最後にDGNFreeElement()関数で作成した要素を開放するという流れです。

書き込み用にファイルを開く方法はdgnlib概要を参照してください。

以下に、個別の要素の書き込みを示します。

連続線分

まずはDGNPoint型の配列に頂点列を詰め込みます。

詰め込み終わったら以下の3つの関数で書き込みます。


  DGNPoint *aPoints

  // nPoints個の頂点
  psLine = DGNCreateMultiPointElem
           ( hNewDgn, DGNT_LINE_STRING, nPoints, aPoints );
  DGNUpdateElemCore( hNewDgn, psLine, 15, 0, 5, 1, 0 );
  DGNWriteElement( hNewDgn, psLine );
  DGNFreeElement( hNewDgn, psLine );

まず、DGNCreateMultiPointElem()で要素に頂点を登録します。
頂点列からなる要素(Spline、Curveなど)は全てこの関数でまず要素を作成します。

つぎにDGNUpdateElemCore()関数で要素の属性を設定します。順に、画層、グループ番号、色番号、線幅、スタイルです。

さいごに、DGNWriteElement()関数で書き込みます。

書き込みが完了したら、DGNFreeElement()関数で要素を解放します。

なお、DGNファイルの注意点あれこれにもあるように、
連続線分要素の頂点数は100点までと決められており、100点を越える場合は複合連結要素として書き込む必要があります。

楕円

楕円要素では、書き込みの関数が2次元用と3次元用で分かれています。
どちらも必要な情報は中心の座標、長半径、短半径、回転角、円弧の場合は円周の開始角度とその円周に対する中心角を指定します。
3次元用では回転角の指定方法が単純に角度を指定する場合と、クォータニオンで指定する場合とを選択できます。

以下の例は、2次元の楕円要素を書き込む例です。
DGNCreateArcElem2D()関数の第2引数で、DGNT_ELLIPSEを指定すると楕円要素、
DGNT_ARCを指定すると円弧要素を作成します。

  double dCenterX, dCenterY;
  double dMainAxis, dSubAxis;
  double dRotation;
  DGNElemCore *pElem;
  
  psElem = DGNCreateArcElem2D( hNewDgn, DGNT_ELLIPSE,
  	dCenterX, dCenterY, dMainAxis, dSubAxis, dRotation, 0, 0 );
  DGNUpdateElemCore( hNewDgn, psElem, 15, 0, 5, 1, 0 );
  DGNFreeElement( hNewDgn, psElem );

ちょいちょい続く、、、

アーカイブ