c# - 我的代码有什么问题 :"clipping polygon(ellipse points) with line segments(subject) with clipper library in c#"

标签 c# .net clipperlib

1.我在 PictureBox 上画椭圆和线。
2.在执行 clipper.PolyTreeToPaths(polytree_solution); see the contents 后,我得到 Paths 对象计数为零
3.PolyTree 对象包含这个 see the contents .

我知道我的问题与这些链接类似,但我无法找到问题的解决方案,可能是我无法在代码中找到错误。 link1 link2 link3

//adding subject (lines)
Paths subj=new Paths(1);
subj.Add(new Path());
subj[0].Add(new IntPoint(0,0));
subj[0].Add(new IntPoint(440,280));
subj[0].Add(new IntPoint(440,0));
subj[0].Add(new IntPoint(0,280));
subj[0].Add(new IntPoint(440/2,280));
subj[0].Add(new IntPoint(440/2,0));

//for clip, GraphicsPath object is defined properly by ellipse points by help of mouse events
GraphicsPath path=new GraphicsPath();
path.AddEllipse(m_rectArena);

Paths clip=new Paths(1);
int scale=100;
path.Flatten();
Path clip2=new Path(path.PointCount);
foreach(PointF p in path.PathPoints)
{
  clip2.Add(new IntPoint((int)(p.X*scale),(int)(p.Y*scale)));
}
clip.Add(clip2);
Paths solution=new Paths();
PolyTree polytree_solution=new PolyTree();
Clipper c=new Clipper();
c.AddPath(subj[0],PolyTree.ptSubject,false);
c.AddPaths(clip,PolyType.ptClip,true);
c.Execute(ClipType.ctIntersection,polytree_solution,PolyFilllType.pftEvenOdd,PolyFillType.pftEvenOdd);
Paths openp=Clipper.PolyTreeToPaths(polytree_solution);


1.我想要 ct.Intersection lines(subject) 和 circle(clip) 但那没有发生 pic click here .
2.PictureBox上的实际绘图click here

最佳答案

如果您不提供代码的关键元素(特别是我们没有 m_rectArena 坐标的指示),则很难确定您的错误出在哪里。

无论如何,这是我根据您提供的信息拼凑而成的内容(带有您所附图片中看到的椭圆的近似值):

      Paths subj = new Paths(1);
      subj.Add(new Path());
      subj[0].Add(new IntPoint(0, 0));
      subj[0].Add(new IntPoint(440, 280));
      subj[0].Add(new IntPoint(440, 0));
      subj[0].Add(new IntPoint(0, 280));
      subj[0].Add(new IntPoint(440 / 2, 280));
      subj[0].Add(new IntPoint(440 / 2, 0));

      GraphicsPath gpEllipse = new GraphicsPath();
      Rectangle r = new Rectangle(40,40,360,360);
      gpEllipse.AddEllipse(r);
      gpEllipse.Flatten();

      Paths clip = new Paths(1);
      clip.Add(new Path());
      foreach (PointF p in gpEllipse.PathPoints)
        clip[0].Add(new IntPoint(p.X, p.Y));

      Clipper c = new Clipper();
      c.AddPaths(subj, PolyType.ptSubject, false);
      c.AddPaths(clip, PolyType.ptClip, true);
      Paths solution = new Paths();
      PolyTree solutiontree = new PolyTree();
      c.Execute(ClipType.ctIntersection, solutiontree, 
        PolyFillType.pftEvenOdd, PolyFillType.pftEvenOdd);
      solution = Clipper.OpenPathsFromPolyTree(solutiontree);

      //nb: you'll find SVGBuilder in SVG.cs in the sample code accompanying Clipper
      SVGBuilder svg = new SVGBuilder();
      svg.AddPaths(subj, Color.White, Color.Black, false);
      svg.AddPaths(clip, Color.FromArgb(0x18, 0xFF, 0xFF, 0), Color.Black, true);
      svg.PenWidth = 2.5;
      svg.AddPaths(solution, Color.White, Color.Red, false);
      svg.SaveToFile("c:\\temp\\test.svg", 640, 480, 20);

结果如下: enter image description here

关于c# - 我的代码有什么问题 :"clipping polygon(ellipse points) with line segments(subject) with clipper library in c#",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55418915/

相关文章:

c++ - 使用剪刀库的线和多边形之间的交点

c# - 在 C# 中反射(reflect)派生类

javascript 到 asp.net ClientIDMode

c# - 在事件插入中强制使用新 ID

.net - 领域驱动设计 : Is this overkill?

javascript - googlemaps 多边形与 clipper.js 的结合

c# - 向成员表中添加列。但是无法访问它们? ASP.NET C#

c# - 错误告诉我我还没有关闭连接,但不是吗?

.net - 在不锁定文件的情况下从程序集中加载和执行代码?

c++ - 如何使用 Clipper 确定两个多边形是否相交?