最近在做项目时遇到需要对二维的多边形进行相交及合并的操作,自己也写了很多方法,但是效果都不是很理想,最终决定使用GPC库,此库中有很多复杂的多边形裁剪方法,现对此库的使用方法做简单描述,源码在文末贴出。
GPC库的官方网站:http://www.cs.man.ac.uk/~toby/gpc/
调用方法思路:
- 将GPC库封装到为C#控制台应用程序
- 项目中调用此控制台应用程序
- 与控制台应用程序通信获取结果
- 将结果按照格式进行转换
代码如下:
此段代码为调用封装好的控制台程序,参数格式为:“1,1;2,2;3,3;4,4”(多边形顶点坐标,以分号隔开)
string strConsoleRoot = System.Environment.CurrentDirectory + "\\GpcLib";//文件夹
string strConsolePath = Path.Combine(strConsoleRoot, "PolygonOperate.exe");//exe路径
string strFingerTemplate1 = "\"" + ConvertPointToString(polyon1) + "\"";//参数1
string strFingerTemplate2 = "\"" + ConvertPointToString(polyon2) + "\"";//参数2
string strFingerTemplate3 = "\"" + type.ToString() + "\""; //参数3
ProcessStartInfo start = new ProcessStartInfo();
start.Arguments = strFingerTemplate1 + " " + strFingerTemplate2 + " " + strFingerTemplate3;
start.WorkingDirectory = strConsoleRoot;
start.FileName = strConsolePath;
start.UseShellExecute = false;
start.RedirectStandardInput = true;
start.RedirectStandardOutput = true;
start.RedirectStandardError = true;
start.CreateNoWindow = true;
_process = Process.Start(start);
_process.OutputDataReceived += (sender, e) =>
{
if (!string.IsNullOrEmpty(e.Data))
{
//调用成功e.Data
//返回值与参数格式相同,需要将其转换为需要的格式
}
else
{
//调用异常处理
}
_process.CancelOutputRead();
_process.Close();
_process.Dispose();
};
_process.BeginOutputReadLine();
//Thread.Sleep(1200);
封装的控制台程序地址:https://gitee.com/liujun155/PolygonOperate