/**********************************************************************
 
	Copyright (C) 2003 Hirohisa MORI <joshua@nichibun.ac.jp>
 
	This program is free software; you can redistribute it 
	and/or modify it under the terms of the GLOBALBASE 
	Library General Public License (G-LGPL) as published by 

	http://www.globalbase.org/
 
	This program is distributed in the hope that it will be 
	useful, but WITHOUT ANY WARRANTY; without even the 
	implied warranty of MERCHANTABILITY or FITNESS FOR A 
	PARTICULAR PURPOSE.

**********************************************************************/

#ifndef __POLY_DATA_H__
#define __POLY_DATA_H__

#include "kibandata.h"
#include "arc_data.h"

/* ポリゴンのＩＤ指定レコード */
#define PF_NOTFINDFORJOIN 1
typedef struct poly_id_record{
	char code[32];
	int id;
	/*
	所持データの種類　0ならばarcsにアーク指定レコードが入る
	1ならばpointsにポリゴンの各点の座標が直接入る
	*/
	int arcs_type;
	GB_POINT point; /* このポリゴンの代表点の座標 */
	int count;
	GB_POINT *points; /* ポイント */
	ARC_REF *arcs; /* アーク指定レコード*/
	int flags; /* データの状態を示すフラグ(ポリゴン結合時、すでに結合に使用されたかどうかのフラグなどをセット)*/
} POLY_ID_RECORD;

/*
ポリゴンレコードをまとめたデータ
ポリゴンファイルに相当
*/
typedef struct poly_data{
	KIBAN_FILE_HEADER header;
	POLY_ID_RECORD *record; /*ポリゴンのアーク指定レコード*/
} POLY_DATA;

/* ポリゴンファイルを読み込む */
int ReadPoly(const char *filename, FILE *fp, POLY_DATA *pData, int Flags);

/* ポリゴンデータをSVGで吐き出す */
void Poly2SVG(FILE *fp, ARC_DATA *pArc, POLY_DATA *pPoly, const char *szFillColor, const char *szStrokeColor);

/* ポリゴンレコードをSVGで吐き出す */
void PolyRecord2SVG(FILE *fp, ARC_DATA *pArc, POLY_ID_RECORD *pPolyRecord, const char *szFillColor, const char *szStrokeColor);

/* ポリゴンデータの形式をアーク指定から、各座標直接格納形式に変換する */
void ChangePolyDataType(POLY_DATA *pPoly, ARC_DATA *pArc);

/* ポリゴンレコードにポイントを１つ追加する */
int PolyAddPoint(POLY_ID_RECORD *pDstPolyRecord, const GB_POINT *pt, int *pnMalloced);

/* 無効なポリゴン（閉じられていないポリゴンなど）を削除する */
void CleanupPoly(POLY_DATA *pPoly);

/* メモリアロケート関連 */
POLY_DATA *malloc_poly_data();
void free_poly_id_record(POLY_ID_RECORD *pRecord);
void free_poly_data(POLY_DATA *pData);
#endif