示例#1
0
        public void GetElementsIndicesWithWeight_PolygonEnveloppingAMeshElement(bool smesh)
        {
            var dfsufilepath = UnitTestHelper.TestDataDir + @"DfsuTest.dfsu";
            var mesh         = GetMesh(dfsufilepath, smesh);
            var gf           = new GeometryFactory();

            var polygon1 = gf.CreatePolygon(new Coordinate[]
                                            { new Coordinate(-0.05, 0.12), new Coordinate(0.2, 0.12), new Coordinate(0.1, -0.14),
                                              new Coordinate(-0.05, -0.14), new Coordinate(-0.05, 0.12) });
            var searcher = MeshFactory.CreateIntersectionCalculator(mesh);
            var search1  = searcher.CalculateWeights(polygon1);
            var indices  = search1.Select(i => i.ElementIndex).ToList();

            Assert.AreEqual(13, indices.Count);
            Assert.AreEqual(1.0, search1.Sum(w => w.Weight), 1e-6);
            CollectionAssert.Contains(indices, 1);
            CollectionAssert.Contains(indices, 8);
            CollectionAssert.Contains(indices, 13);
            CollectionAssert.Contains(indices, 15);
            CollectionAssert.Contains(indices, 7);
            CollectionAssert.Contains(indices, 5);
            CollectionAssert.DoesNotContain(indices, 4);

            searcher.WeightType = WeightType.Fraction;
            search1             = searcher.CalculateWeights(polygon1);
            Assert.AreEqual(13, search1.Count);
            Assert.AreEqual(3.600211, search1.Sum(w => w.Weight), 1e-6);

            searcher.WeightType = WeightType.Area;
            search1             = searcher.CalculateWeights(polygon1);
            Assert.AreEqual(13, search1.Count);
            Assert.AreEqual(polygon1.Area, search1.Sum(w => w.Weight), 1e-6);
            Assert.AreEqual(polygon1.Area, searcher.IntersectionArea, 1e-6);
        }
示例#2
0
        public void GetElementsIndicesWithWeight_PolygonAccrossMeshElement(bool smesh)
        {
            var dfsufilepath = UnitTestHelper.TestDataDir + @"DfsuTest.dfsu";
            var mesh         = GetMesh(dfsufilepath, smesh);
            var gf           = new GeometryFactory();

            var polygon1 = gf.CreatePolygon(new Coordinate[]
                                            { new Coordinate(0.1, 0.04), new Coordinate(0.2, 0.04), new Coordinate(0.15, 0.0), new Coordinate(0.1, 0.04) });
            var searcher = MeshFactory.CreateIntersectionCalculator(mesh);
            var search1  = searcher.CalculateWeights(polygon1);

            Assert.AreEqual(3, search1.Count);
            Assert.AreEqual(3, search1[0].ElementIndex);
            Assert.AreEqual(11, search1[1].ElementIndex);
            Assert.AreEqual(14, search1[2].ElementIndex);
            Assert.AreEqual(1.0, search1.Sum(w => w.Weight), 1e-6);

            searcher.WeightType = WeightType.Fraction;
            search1             = searcher.CalculateWeights(polygon1);
            Assert.AreEqual(3, search1.Count);
            Assert.AreEqual(0.1353821, search1.Sum(w => w.Weight), 1e-6);

            searcher.WeightType = WeightType.Area;
            search1             = searcher.CalculateWeights(polygon1);
            Assert.AreEqual(3, search1.Count);
            Assert.AreEqual(polygon1.Area, search1.Sum(w => w.Weight), 1e-6);
            Assert.AreEqual(polygon1.Area, searcher.IntersectionArea, 1e-6);
        }
示例#3
0
        public void GetElementsIndicesWithWeight_PolygonPartiallyOutside(bool smesh)
        {
            var dfsufilepath = UnitTestHelper.TestDataDir + @"DfsuTest.dfsu";
            var mesh         = GetMesh(dfsufilepath, smesh);
            var gf           = new GeometryFactory();


            var polygon1 = gf.CreatePolygon(new Coordinate[]
                                            { new Coordinate(0.3, -0.1), new Coordinate(0.6, -0.1), new Coordinate(0.6, -0.15),
                                              new Coordinate(0.3, -0.15), new Coordinate(0.3, -0.1) });
            var searcher = MeshFactory.CreateIntersectionCalculator(mesh);
            var search1  = searcher.CalculateWeights(polygon1);
            var indices  = search1.Select(i => i.ElementIndex).ToList();

            CollectionAssert.Contains(indices, 2);
            Assert.AreEqual(1, indices.Count);
            Assert.AreEqual(1.0, search1.Sum(w => w.Weight), 1e-6);

            searcher.WeightType = WeightType.Fraction;
            search1             = searcher.CalculateWeights(polygon1);
            Assert.AreEqual(1, search1.Count);
            Assert.AreEqual(0.12871149, search1.Sum(w => w.Weight), 1e-6);

            searcher.WeightType = WeightType.Area;
            search1             = searcher.CalculateWeights(polygon1);
            Assert.AreEqual(1, search1.Count);
            Assert.AreEqual(0.015, polygon1.Area, 1e-6);
            Assert.AreEqual(0.0024292, search1.Sum(w => w.Weight), 1e-6);
            Assert.AreEqual(0.0024292, searcher.IntersectionArea, 1e-6);
        }
示例#4
0
        public void GetElementsIndicesWithWeight_PolygonOutside(bool smesh)
        {
            var dfsufilepath = UnitTestHelper.TestDataDir + @"DfsuTest.dfsu";
            var mesh         = GetMesh(dfsufilepath, smesh);
            var gf           = new GeometryFactory();

            var polygon1 = gf.CreatePolygon(new Coordinate[]
                                            { new Coordinate(100, 100), new Coordinate(110, 100), new Coordinate(110, 150), new Coordinate(100, 100) });
            var searcher = MeshFactory.CreateIntersectionCalculator(mesh);
            var search1  = searcher.CalculateWeights(polygon1);

            Assert.IsNull(search1);
        }
示例#5
0
        public void GetElementsIndicesWithWeight_PolygonWithinOneMeshElement(bool smesh)
        {
            var dfsufilepath = UnitTestHelper.TestDataDir + @"DfsuTest.dfsu";
            var mesh         = GetMesh(dfsufilepath, smesh);
            var gf           = new GeometryFactory();

            var polygon1 = gf.CreatePolygon(new Coordinate[] { new Coordinate(-0.1, 0.1), new Coordinate(-0.05, 0.1), new Coordinate(-0.1, 0.15), new Coordinate(-0.1, 0.1) });
            var polygon2 = gf.CreatePolygon(new Coordinate[] { new Coordinate(0.05, 0.1), new Coordinate(0.1, 0.1), new Coordinate(0.07, 0.15), new Coordinate(0.05, 0.1) });

            var searcher = MeshFactory.CreateIntersectionCalculator(mesh);
            var search1  = searcher.CalculateWeights(polygon1);
            var search2  = searcher.CalculateWeights(polygon2);

            Assert.AreEqual(1, search1.Count());
            Assert.AreEqual(0, search1[0].ElementIndex);
            Assert.AreEqual(1.0, search1[0].Weight);
            Assert.AreEqual(13, search2[0].ElementIndex);
            Assert.AreEqual(1.0, search2[0].Weight);

            searcher.WeightType = WeightType.Fraction;
            search1             = searcher.CalculateWeights(polygon1);
            search2             = searcher.CalculateWeights(polygon2);
            Assert.AreEqual(1, search1.Count());
            Assert.AreEqual(0, search1[0].ElementIndex);
            Assert.AreEqual(0.06890034, search1[0].Weight, 1e-6);
            Assert.AreEqual(13, search2[0].ElementIndex);
            Assert.AreEqual(0.08729904, search2[0].Weight, 1e-6);

            searcher.WeightType = WeightType.Area;
            search1             = searcher.CalculateWeights(polygon1);
            search2             = searcher.CalculateWeights(polygon2);
            Assert.AreEqual(1, search1.Count());
            Assert.AreEqual(0, search1[0].ElementIndex);
            Assert.AreEqual(polygon1.Area, search1[0].Weight);
            Assert.AreEqual(13, search2[0].ElementIndex);
            Assert.AreEqual(polygon2.Area, search2[0].Weight);
            Assert.AreEqual(polygon2.Area, searcher.IntersectionArea, 1e-6);
        }