Example #1
0
        public void TestDemoData_DifferenceRev()
        {
            foreach (var demo in DemoData.polyCases)
            {
                var result = new PolyBool().differenceRev(demo.poly1, demo.poly2);
                Assert.IsNotNull(result);

                validateResult(result, demo.validate[3], demo.name, "differenceRev");
            }
        }
Example #2
0
        public void TestDemoData_Union()
        {
            foreach (var demo in DemoData.polyCases)
            {
                var result = new PolyBool().union(demo.poly1, demo.poly2);
                Assert.IsNotNull(result);

                validateResult(result, demo.validate[1], demo.name, "union");
            }
        }
Example #3
0
        public void TestDemoData_Intersect()
        {
            foreach (var demo in DemoData.polyCases)
            {
                var result = new PolyBool().intersect(demo.poly1, demo.poly2);
                Assert.IsNotNull(result);

                validateResult(result, demo.validate[0], demo.name, "intersect");
            }
        }
Example #4
0
        public void TestDemoData_Xor()
        {
            foreach (var demo in DemoData.polyCases)
            {
                var result = new PolyBool().xor(demo.poly1, demo.poly2);
                Assert.IsNotNull(result);

                validateResult(result, demo.validate[4], demo.name, "xor");
            }
        }
Example #5
0
        public void ProfileThisFunction()
        {
            // This function exists primarily to allow me to run the VSTEST profiler on it, so that
            // I can determine where PolyBoolCS spends most of its time, and which areas can be
            // cleaned up if I ever decide to refactor it into a production-ready version.

            var clipper = new PolyBool();
            var demo    = DemoData.polyCases.Where(x => x.name == "Two Triangles With Common Edge").First();

            for (int i = 0; i < 1000; i++)
            {
                var result = clipper.difference(demo.poly1, demo.poly2);
                Assert.IsNotNull(result);
            }
        }
Example #6
0
        public void DebugScratchpad()
        {
            var demo     = DemoData.polyCases.Where(x => x.name == "Two Triangles With Common Edge").First();
            var buildLog = new BuildLog();
            var clipper  = new PolyBool()
            {
                BuildLog = buildLog
            };
            var result = clipper.intersect(demo.poly1, demo.poly2);

            var json = buildLog.ToJSON();

            using (var file = File.CreateText("DebugLog.json"))
            {
                file.Write(json);
            }

            Assert.IsNotNull(result);

            validateResult(result, demo.validate[0], demo.name, "intersect");
        }
        private void button2_Click(object sender, EventArgs e)
        {
            List <PolygonHelper> phhs = new List <PolygonHelper>();

            if (!checkBox1.Checked)
            {
                if (dataModel.SelectedItems.Length < 2)
                {
                    dataModel.ParentForm.StatusMessage("there are no 2 polygon selected", StatusMessageType.Warning); return;
                }

                foreach (var item in dataModel.SelectedItems)
                {
                    phhs.Add(item as PolygonHelper);
                }
            }
            else
            {
                phhs.Add((comboBox2.SelectedItem as ComboBoxItem).Tag as PolygonHelper);
                phhs.Add((comboBox3.SelectedItem as ComboBoxItem).Tag as PolygonHelper);
            }

            var ar1 = phhs.ToArray();

            PolyBool pb = new PolyBool();

            var poly1 = ar1[0].GetPolygon();

            foreach (var item in ar1.Skip(1))
            {
                poly1 = pb.difference(poly1, item.GetPolygon());
            }

            if (poly1.regions.Count == 0)
            {
                dataModel.ParentForm.StatusMessage("no intersections", StatusMessageType.Warning);
                return;
            }
            var r = poly1;

            var nfps = r.regions.Select(z => new NFP()
            {
                Points = z.Select(y => new SvgPoint(y.x, y.y)).ToArray()
            }).ToArray();

            for (int i = 0; i < nfps.Length; i++)
            {
                for (int j = 0; j < nfps.Length; j++)
                {
                    if (i != j)
                    {
                        var d2 = nfps[i];
                        var d3 = nfps[j];
                        var f0 = d3.Points[0];
                        if (StaticHelpers.pnpoly(d2.Points.ToArray(), f0.X, f0.Y))
                        {
                            d3.Parent = d2;
                            if (!d2.Childrens.Contains(d3))
                            {
                                d2.Childrens.Add(d3);
                            }
                        }
                    }
                }
            }

            foreach (var item in nfps)
            {
                if (item.Parent != null)
                {
                    continue;
                }
                PolygonHelper phh = new PolygonHelper();
                dataModel.AddItem(phh);
                phh.Polygon = item;
            }
        }