You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
2.7 KiB
C#

1 month ago
/*******************************************************************************
* Author : Angus Johnson *
* Date : 24 March 2024 *
* Website : https://www.angusj.com *
* Copyright : Angus Johnson 2010-2024 *
* License : https://www.boost.org/LICENSE_1_0.txt *
*******************************************************************************/
using System.Collections.Generic;
using System.Reflection;
using System.IO;
using System;
using System.Security.Cryptography;
using System.Xml.Linq;
using System.Runtime.InteropServices;
using System.Diagnostics;
using Clipper2Lib;
namespace UsingZTestApp
{
public class Application
{
public class MyCallbacks
{
public int cnt = 0;
public void MyCallback64(Point64 _, Point64 __,
Point64 ___, Point64 ____, ref Point64 intersectPt)
{
cnt--;
intersectPt.Z = cnt;
}
public void MyCallbackD(PointD _, PointD __,
PointD ___, PointD ____, ref PointD intersectPt)
{
cnt--;
intersectPt.z = cnt;
}
}
public static void Main()
{
PathsD solution = new();
PathsD subject = new()
{
Clipper.MakePathZ(new double[] { 100,50,1, 10,79,2, 65,2,3, 65,98,4, 10,21,5 })
};
ClipperD clipperD = new ();
MyCallbacks cb = new ();
clipperD.ZCallback = cb.MyCallbackD;
clipperD.AddSubject(subject);
clipperD.Execute(ClipType.Union, FillRule.NonZero, solution);
solution = Clipper.InflatePaths(solution, -3, JoinType.Miter, EndType.Polygon);
Console.WriteLine(solution.ToString(0));
SvgWriter svg = new (FillRule.NonZero);
SvgUtils.AddSubject(svg, subject);
SvgUtils.AddSolution(svg, solution, true);
PathsD ellipses = new ();
for (int i = 0; i < solution[0].Count; i++)
{
if (solution[0][i].z < 0)
ellipses.Add(Clipper.Ellipse(
new PointD(solution[0][i].x, solution[0][i].y), 4));
svg.AddText(solution[0][i].z.ToString(),
solution[0][i].x, solution[0][i].y, 12, 0xFF000000);
}
svg.AddClosedPaths(ellipses, 0x20FF0000, 0xFFFF0000, 1);
svg.SaveToFile("usingz.svg", 300, 300);
OpenFileWithDefaultApp("usingz.svg");
}
public static void OpenFileWithDefaultApp(string filename)
{
string path = Path.GetFullPath(filename);
if (!File.Exists(path)) return;
Process p = new ()
{
StartInfo = new ProcessStartInfo(path) { UseShellExecute = true }
};
p.Start();
}
}
}