gtsファイルのフォーマットはなかなか良くできているフォーマットですが、
他のソフトとのやり取りは期待できません。
こんな場合はやはり汎用的なフォーマットで書き出す必要があるでしょう。
できた三角形網をすべて書き出すには、
gts_surface_foreach_face()
関数を使います。
以下の例は、shapelibを使ってshp形式で書き出す例です。
1: 2: // gts_surface_foreach_face関数用コールバック 3: static void write_triangle( GtsTriangle *t, SHPHandle *h ) 4: { 5: SHPObject *psOutObj; 6: GtsPoint *p1, *p2, *p3; 7: double adfX[4], adfY[4], adfZ[4]; 8: 9: p1 = GTS_POINT( GTS_SEGMENT( t->e1 )->v1 ); 10: p2 = GTS_POINT( GTS_SEGMENT( t->e1 )->v2 ); 11: p3 = GTS_POINT( gts_triangle_vertex( t ) ); 12: 13: adfX[0] = p1->x; 14: adfY[0] = p1->y; 15: adfZ[0] = p1->z; 16: adfX[1] = p2->x; 17: adfY[1] = p2->y; 18: adfZ[1] = p2->z; 19: adfX[2] = p3->x; 20: adfY[2] = p3->y; 21: adfZ[2] = p3->z; 22: adfX[3] = p1->x; 23: adfY[3] = p1->y; 24: adfZ[3] = p1->z; 25: 26: psOutObj = SHPCreateSimpleObject( SHPT_POLYGON, 4, adfX, adfY, adfZ ); 27: SHPWriteObject( *h, -1, psOutObj ); 28: SHPDestroyObject( psOutObj ); 29: } 30: 31: // 中略 32: 33: // 34: // surfaceに三角形網が作成されているとする 35: // 36: 37: SHPHandle hSHP_Out; 38: 39: hSHP_Out = SHPCreate( szFName, SHPT_POLYGON ); 40: 41: gts_surface_foreach_face( surface, (GtsFunc)write_triangle, &hSHP_Out ); 42: 43: SHPClose( hSHP_Out );
これで、作成結果を元の点群と重ねてみて確認したりすることができます。
下の図は、制約付きdelaunay三角形網の作成
で作成した三角形網と、入力点群、制約線をQGISで重ねて表示したところです。