dgblib

ライセンスMIT
URLhttp://dgnlib.maptools.org/

Intergraph標準ファイルフォーマット(DGN)の読み込み・書き込みライブラリです。
このフォーマットは現在では主にMicroStationというCADソフトで使用されているものです。
ただし、MicroStationにはV7以前とV8で扱っているDGNファイルの内容は根本的に異なるもののようで、両者に互換性はまったくありません。
このライブラリはV7以前のフォーマットに対応したものです。

コンパイル

ver. 1.11

MinGWの場合、./configureはなく、いきなりMakeですが、.oファイルと.exeファイルしか作成されず、ライブラリが作成されません。
nmakeの場合、nmake -f makefile.vcで.dllが作成されます。

読み込み

dgnファイルを開く

まず、デザインファイルのハンドルを宣言しておき、以下のようにしてハンドルとファイルを結びつけます。


#include "dgnlib.h"

    DGNHandle   g_hDGN;
    
    g_hDGN = DGNOpen( lpszFName, FALSE );

    if( g_hDGN == NULL )
        return FALSE;

第2引数は書き込み可能かどうかのフラグで、TRUEを指定すると書き込みも可能になります。

デザインファイルを閉じるときは、以下のようにします。

    DGNClose( g_hDGN );

要素の読み込み

要素の読み込みは、以下のようにします。


  DGNElemCore *psElement;

  while ( (psElement=DGNReadElement(g_hDGN)) != NULL )
  {
      /*この部分に要素の取り出し処理*/

      DGNFreeElement( g_hDGN, psElement );
  }

DGNReadElement()関数は、引数のデザインファイルのハンドルを閉じない限り、読み込みが完了した要素の次の要素を返すようです。

要素を取り出したら、以下のようにして要素の種類を調べた後、DGNElemCore型をそれぞれの要素の型にキャストして情報を取り出すことができます。


  switch( psElement->stype )
  {
  case DGNST_MULTIPOINT:
    DGNElemMultiPoint *pMulti;
    pMulti = (DGNElemMultiPoint *)psElement;

    /*以下、要素の情報を取得*/

個別の要素の読み込みの詳細は要素の読み込みを参照してください。

書き込み

ファイルを開く

追記をする場合はDGNOpen()で、第2引数をTRUEにします。
上書きならばDGNCreate()関数で開きます。


  DGNHandle hNewDgn;

  hNewDgn = DGNCreate( lpszFName, szSeedPath, 
    DGNCF_USE_SEED_UNITS | DGNCF_USE_SEED_ORIGIN,
    0.0, 0.0, 0.0, 0, 0, "", "" );

第1引数はファイル名、第2引数はシードファイルのフルパスです。
第3引数のフラグはイロイロありますが、この例ではシードファイルの単位設定と原点設定を使用します。
なお、2次元、3次元の別もシードファイルから引き継ぎます。
その後の引数は原点のX、Y、Z座標、主単位と副単位の倍率、副単位とUORの比率、主単位名、副単位名となっています。
従って、フラグを上のように指定した場合は無視されます。

個別の要素の書き込みの詳細は要素の書き込みを参照してください。

アーカイブ