private void button6_Click(object sender, EventArgs e)
        {
            List <PolygonHelper> ar1 = new List <PolygonHelper>();

            for (int i = 0; i < dataModel.SelectedItems.Length; i++)
            {
                ar1.Add(dataModel.SelectedItems[i] as PolygonHelper);
            }

            if (ar1.Count != 2)
            {
                dataModel.ParentForm.StatusMessage("there are no 2 polygon selected", StatusMessageType.Warning); return;
            }

            PolyBool pb = new PolyBool();

            //var poly1 = GetPolygon(ar1[0].TransformedPoints().ToArray());
            //var poly2 = GetPolygon(ar1[1].TransformedPoints().ToArray());
            var poly1 = ar1[0].GetPolygon();
            var poly2 = ar1[1].GetPolygon();
            var r     = pb.intersect(poly1, poly2);

            if (r.regions.Count == 0)
            {
                dataModel.ParentForm.StatusMessage("no intersections", StatusMessageType.Warning);
                return;
            }
            var           pnts = r.regions.ToArray()[0].ToArray();
            PolygonHelper ph   = new PolygonHelper();

            ph.Polygon.Points = pnts.Select(z => new SvgPoint(z.x, z.y)).ToArray();
            dataModel.AddItem(ph);
        }
Beispiel #2
0
        private void button1_Click(object sender, EventArgs e)
        {
            NFP p = new NFP();

            if (!(dataModel.SelectedItem is PolygonHelper ph2))
            {
                return;
            }

            p.Points = ph2.Polygon.Points.Select(z => new SvgPoint(z.X, z.Y)).ToArray();
            var    jType          = (JoinType)comboBox1.SelectedIndex;
            double offset         = double.Parse(textBox2.Text.Replace(",", "."), CultureInfo.InvariantCulture);
            double miterLimit     = double.Parse(textBox3.Text.Replace(",", "."), CultureInfo.InvariantCulture);
            double curveTolerance = double.Parse(textBox4.Text.Replace(",", "."), CultureInfo.InvariantCulture);
            var    offs           = ClipperHelper.offset(p, offset, jType, curveTolerance: curveTolerance, miterLimit: miterLimit);
            //if (offs.Count() > 1) throw new NotImplementedException();
            PolygonHelper ph = new PolygonHelper();

            foreach (var item in ph2.Polygon.Childrens)
            {
                var offs2 = ClipperHelper.offset(item, -offset, jType, curveTolerance: curveTolerance, miterLimit: miterLimit);
                var nfp1  = new NFP();
                if (offs2.Any())
                {
                    //if (offs2.Count() > 1) throw new NotImplementedException();
                    foreach (var zitem in offs2)
                    {
                        nfp1.Points = zitem.Points.Select(z => new SvgPoint(z.X, z.Y)).ToArray();
                        ph.Polygon.Childrens.Add(nfp1);
                    }
                }
            }

            if (offs.Any())
            {
                ph.Polygon.Points = offs.First().Points.Select(z => new SvgPoint(z.X, z.Y)).ToArray();
            }

            foreach (var item in offs.Skip(1))
            {
                var nfp2 = new NFP();

                nfp2.Points = item.Points.Select(z => new SvgPoint(z.X, z.Y)).ToArray();
                ph.Polygon.Childrens.Add(nfp2);
            }

            ph.OffsetX  = ph2.OffsetX;
            ph.OffsetY  = ph2.OffsetY;
            ph.Rotation = ph2.Rotation;
            dataModel.AddItem(ph);
        }
Beispiel #3
0
        private void button13_Click(object sender, EventArgs e)
        {
            var res = dataModel.GetPairOfSelectedNfps();

            if (res == null)
            {
                return;
            }
            var p    = res[0];
            var p2   = res[1];
            var offs = DeepNest.getOuterNfp(p, p2);

            if (offs != null)
            {
                PolygonHelper ph = new PolygonHelper();
                //ph.Polygon.Points = offs.Points.Select(z => new SvgPoint(z.X, z.Y)).ToArray();
                ph.Polygon = DeepNest.clone2(offs);

                dataModel.AddItem(ph);
            }
        }
        private void button4_Click(object sender, EventArgs e)
        {
            if (!(dataModel.SelectedItem is PolygonHelper ph2))
            {
                return;
            }

            var hull = DeepNest.getHull(new NFP()
            {
                Points = ph2.TransformedPoints()
            });
            PolygonHelper ph = new PolygonHelper();

            ph.Polygon = hull;
            ph.Name    = "hull";
            dataModel.AddItem(ph);
        }
Beispiel #5
0
 private void pointToolStripMenuItem1_Click(object sender, EventArgs e)
 {
     dataModel.AddItem(new PointHelper());
     UpdateList();
 }