gts: 三角形網をトラバース

これは何なのか

gts_surfaceクラスにはgts_sufrace_traverse_**という関数群があります。
これは何かというと、隣接する三角形を次々と取り出すというものです。

例として、まず下のように最初の三角形があったとします(level 1)。

level 1

これに対して、隣接する三角形を抽出します(level 2)。

level 2

さらに、この三角形群に隣接する三角形を抽出します(level 3)。

level 3

こうして順次隣接する三角形を抽出していきます。

levelは、最初の三角形から見て何面隣にあるかの値になります。

使い方

トラバース自体は簡単にできるようで、gtsの付属サンプルのtraverse.cを見ると大体様子がわかります。

抜粋すると以下のようになります。

  GtsFace *first, *f;
  GtsSurfaceTraverse *t;
  guint level;
  GtsSurface *s;

  // sに三角形網が格納されているとする

  // 何らかの方法でfirstに最初の三角形を取り出しているとする
  
  t = gts_surface_traverse_new( s, first );
  
  while ( f = gts_surface_traverse_next( t, &level ) )
  {
    // 取り出した三角形fに対して何らかの処理
  }
  
  gts_surface_traverse_destroy();

gts_surface_traverse_next()が最初に呼ばれたときはfirstが帰ってきます。
変数levelに、最初の三角形から何面隣になるかの値が格納されます。

アーカイブ