アウトライン・ファイル(拡張子が".OUT"のファイル)
アウトライン・ファイルとは、"Count/Size"(カウント/サイズ)
コマンドや"Measurements"(マニュアル測定)
コマンドを使ってオブジェクトのアウトラインを保存するときに作成されるファイルです。アウトライン・ファイルはバイナリ・ファイルで、中には多角形のデータのリストが入っています。このファイルは全て2バイトの整数で構成されています。
最初の2バイト整数は、ファイルに入っている多角形の総数を定義します。その後に多角形の定義が続きます。1つの多角形のデータは、その多角形の頂点の数を定義する2バイトの整数と、それに続く、そのそれぞれの頂点のXY座標値から成っています。各XY座標値はそれぞれ2バイトの整数2つから成っていて、最初の2バイトはX座標を、次の2バイトはY座標を定義します。
次の表は、2つの多角形(頂点が3つのものが1つ、頂点が4つのものが1つ)を記録したファイルの構造と内容を示したものです。
16ビット整数 |
2バイト整数の内容
バイナリ表記と
10進法表記 |
説明 |
#1 |
00000000
00000010
(2) |
ファイルに2つの多角形が入っていることを示す |
#2 |
00000000
00000011
(3) |
多角形1の頂点が3つあることを示す |
#3
& 4 |
00000000
00001010
(10) |
00000000
00010100
(20) |
多角形1の第1頂点のXY座標(10,20)を定義する |
#5
& 6 |
00000000
00001010
(10) |
00000000
00101000
(40) |
多角形1の第2頂点のXY座標(10,40)を定義する |
#7
& 8 |
00000000
01000110 (70) |
00000000
00101000 (40) |
多角形1の第3頂点のXY座標(70,40)を定義する |
#9 |
00000000
00000100
(4) |
多角形2の頂点が4つあることを示す |
#10
& 11 |
00000000
01100100
(100) |
00000000
01000000
(64) |
多角形2の第1頂点のXY座標(100,64)を定義する |
#12
& 13 |
00000000
01100100
(100) |
00000000
10010110
(150) |
多角形2の第2頂点のXY座標(100,150)を定義する |
#14
& 15 |
00000000
01111000
(120) |
00000000
10010110
(150) |
多角形2の第3頂点のXY座標(120,150)を定義する |
#16
& 17 |
00000000
01111000
(120) |
00000000
01000000
(64) |
多角形2の第4頂点のXY座標(120,64)を定義する |
次の例は、C言語のプログラム内でアウトライン・ファイルにアクセスし、それを使用する方法を示しています。
typedef
struct{int x; int y} COORD;
#define MAXPOINTS 4000
int
LoadOutlines(char *outfile)
{
int i;
int count;
int num_obj = 0;
COORD *Points;
FILE *fp;
/* open outline file */
if((fp = fopen(outline, "rb"))==NULL)
return -1;
/* allocate space for polygon
*/
if((Points=malloc((long)MAXPOINTS*sizeof(COORD)))==
NULL)
return -1;
/* reads in number of polygons
*/
fread((char *) &num_obj,
sizeof(int),1,fp);
if(num_obj <=0)
return -1;
/* for
each polygon...*/
for(i = 0; i< num_obj;
i++){
/* reads in number of points
in polygon */
fread ((char *)&count,sizeof(int),1,fp);
if(count > MAXPOINTS ||
count < 0)
break;
/* read points*/
if(fread((char*)Points,sizeof(COORD),count,fp)
==count{
.多角形の処理を行なう.
}
else
break;
}
free(Points);
fclose(fp);
return 0;
}
|