/*
	Antenna House PDF Tool API V8.0
	C++ Interface sample program

	概要：パスの描画

	Copyright 2025 Antenna House, Inc.
*/

#include <PdfTk.h>
#include <stdio.h>

using namespace PdfTk;

void drawShape(PtlPage& page);

int main(int argc, char* argv[])
{
	if (argc < 3) {
		printf("usage: DrawShape.exe in-pdf-file out-pdf-file\n");
		return 1;
	}
	try
	{
		PtlParamInput input(argv[1]);
		PtlParamOutput output(argv[2]);

		PtlPDFDocument doc;

		// PDFファイルをロードします。
		doc.load(input);

		// ページコンテナの取得
		PtlPages& pages = doc.getPages();

		if (pages.isEmpty()){
			printf("ページコンテナが空\n");
			return 1;
		}

		// 先頭ページの取得
		PtlPage page = pages.get(0);

		// パスの描画
		drawShape(page);

		// ファイルに保存します。
		doc.save(output);

		printf("完了!\n");
	}
	catch (const PtlException &e)
	{
		fprintf(stderr, "Error code : %d\n %s\n", e.getErrorCode(), e.getErrorMessage().c_str());
		return 1;
	}
	return 0;
}

void drawShape(PtlPage& page)
{
	// ページコンテントの取得
	PtlContent& content = page.getContent();

	// ページサイズ
	PtlSize pageSize = page.getSize();

	// 矩形の描画
	PtlRect rect(10.0f, 10.0f, pageSize.getWidth()-10.0f, pageSize.getHeight()-10.0f);
	PtlColorDeviceRGB colorFill(1.0f, 0.0f, 0.0f);
	PtlColorDeviceRGB colorStroke(0.0f, 0.0f, 1.0f);
	PtlParamDrawShape::LINE_STYLE lineStyle = PtlParamDrawShape::LINE_STYLE_SOLID;
	//PtlParamDrawShape::LINE_STYLE lineStyle = PtlParamDrawShape::LINE_STYLE_DASHED;
	//PtlParamDrawShape::LINE_WIDTH lineWidth = PtlParamDrawShape::LINE_WIDTH_THIN;
	//PtlParamDrawShape::LINE_WIDTH lineWidth = PtlParamDrawShape::LINE_WIDTH_MIDDLE;
	PtlParamDrawShape::LINE_WIDTH lineWidth = PtlParamDrawShape::LINE_WIDTH_THICK;

	// 丸角矩形の描画
	PtlParamDrawShape paramDrawShape;
	paramDrawShape.setLineStyle(lineStyle);
	paramDrawShape.setLineWidth(lineWidth);
	paramDrawShape.setLineColor(colorStroke);
	paramDrawShape.setFillColor(colorFill);
	paramDrawShape.setOpacity(0.5f);
	content.drawRoundRect(rect, 10.0f, 10.0f, paramDrawShape);

	// 矩形の描画
	PtlRect rect2(30.0f, 30.0f, pageSize.getWidth()-30.0f, pageSize.getHeight()-30.0f);
	PtlColorDeviceRGB colorFill2(1.0f, 1.0f, 0.0f);
	PtlColorDeviceRGB colorStroke2(0.0f, 1.0f, 1.0f);

	paramDrawShape.setLineColor(colorStroke2);
	paramDrawShape.setFillColor(colorFill2);
	paramDrawShape.setOpacity(0.3f);
	content.drawRect(rect2, paramDrawShape);

	// 円の描画
	content.drawCircle(rect2, paramDrawShape);

	// 線の描画
	PtlColorDeviceRGB colorStroke3(0.0f, 1.0f, 0.0f);
	paramDrawShape.setLineColor(colorStroke3);
	content.drawLine(PtlPoint(30.0f,30.0f), PtlPoint(pageSize.getWidth()-30,pageSize.getHeight()-30.0f), paramDrawShape);
	content.drawLine(PtlPoint(30.0f,pageSize.getHeight()-30.0f), PtlPoint(pageSize.getWidth()-30.0f,30.0f), paramDrawShape);

	// 折れ線 PolyLine
	PtlPoints pointsMM1 = PtlPoints();
	pointsMM1.append(PtlPoint(70.0f, 30.0f));
	pointsMM1.append(PtlPoint(140.0f, 110.0f));
	pointsMM1.append(PtlPoint(110.0f, 180.0f));
	pointsMM1.append(PtlPoint(190.0f, 130.0f));
	pointsMM1.append(PtlPoint(260.0f, 160.0f));
	pointsMM1.append(PtlPoint(230.0f, 90.0f));
	pointsMM1.append(PtlPoint(270.0f, 30.0f));
	pointsMM1.append(PtlPoint(180.0f, 70.0f));
	paramDrawShape.setLineColor(PtlColorDeviceRGB(0.2f, 0.2f, 0.2f));
	paramDrawShape.setOpacity(0.9f);
	paramDrawShape.setLineWidth(lineWidth);
	content.drawPolyline(pointsMM1, paramDrawShape);

	// 多角形注釈 Polygon
	PtlPoints pointsMM2 = PtlPoints();
	pointsMM2.append(PtlPoint(30.0f, 30.0f));
	pointsMM2.append(PtlPoint(100.0f, 110.0f));
	pointsMM2.append(PtlPoint(70.0f, 180.0f));
	pointsMM2.append(PtlPoint(120.0f, 130.0f));
	pointsMM2.append(PtlPoint(220.0f, 160.0f));
	pointsMM2.append(PtlPoint(190.0f, 90.0f));
	pointsMM2.append(PtlPoint(230.0f, 30.0f));
	pointsMM2.append(PtlPoint(140.0f, 70.0f));
	paramDrawShape.setOpacity(0.3f);
	paramDrawShape.setFillColor(PtlColorDeviceRGB(1.0f,1.0f,0.0f));
	content.drawPolygon(pointsMM2, paramDrawShape);

}
