Beispiel #1
0
        public void GetGeometryWidthYZDefinitionShouldBeFast()
        {
            var yz = new CrossSectionDefinitionYZ("");

            yz.YZDataTable.AddCrossSectionYZRow(10, 100, 0);
            yz.YZDataTable.AddCrossSectionYZRow(9, 90, 0);
            yz.YZDataTable.AddCrossSectionYZRow(8, 80, 0);
            yz.YZDataTable.AddCrossSectionYZRow(7, 60, 0);
            yz.YZDataTable.AddCrossSectionYZRow(6, 70, 0);
            yz.YZDataTable.AddCrossSectionYZRow(5, 40, 0);
            yz.YZDataTable.AddCrossSectionYZRow(4, 40, 0);
            yz.YZDataTable.AddCrossSectionYZRow(3, 20, 0);

            var network      = HydroNetworkHelper.GetSnakeHydroNetwork(1);
            var branch       = network.Channels.First();
            var crossSection = HydroNetworkHelper.AddCrossSectionDefinitionToBranch(branch, yz, 30);

            TestHelper.AssertIsFasterThan(50, () =>
            {
                for (int i = 0; i < 10000; i++)
                {
                    var geo = crossSection.Geometry;
                }
            });
        }
Beispiel #2
0
        public void AddManyBranchesWithCrossSections()
        {
            TestHelper.AssertIsFasterThan(2275, () =>
            {
                const int count = 10000;
                var network     = new HydroNetwork();
                for (int i = 0; i < count; i++)
                {
                    var from = new HydroNode();
                    var to   = new HydroNode();

                    network.Nodes.Add(from);
                    network.Nodes.Add(to);

                    var channel = new Channel {
                        Source = from, Target = to
                    };
                    HydroNetworkHelper.AddCrossSectionDefinitionToBranch(channel,
                                                                         new CrossSectionDefinitionXYZ(),
                                                                         0);
                }

                int crossSectionCount = 0;
                foreach (var crossSection in network.CrossSections)
                {
                    // access all CrossSections should be also fast
                    crossSectionCount++;
                }
            });
        }
Beispiel #3
0
        public void ChangeInDefinitionUpdatesGeometry()
        {
            //v-shaped cs 100 wide
            var crossSectionDefinitionYZ = new CrossSectionDefinitionYZ("");

            crossSectionDefinitionYZ.YZDataTable.AddCrossSectionYZRow(0, 100, 0);
            crossSectionDefinitionYZ.YZDataTable.AddCrossSectionYZRow(50, 0, 0);
            crossSectionDefinitionYZ.YZDataTable.AddCrossSectionYZRow(100, 100, 0);
            crossSectionDefinitionYZ.Thalweg = 50;

            //horizontal line
            var           network      = HydroNetworkHelper.GetSnakeHydroNetwork(new Point(0, 0), new Point(100, 0));
            var           branch       = network.Channels.First();
            ICrossSection crossSection = HydroNetworkHelper.AddCrossSectionDefinitionToBranch(branch, crossSectionDefinitionYZ, 50);


            var expectedGeometry = new LineString(new[] { new Coordinate(50, 50), new Coordinate(50, -50) });

            //use equals exact because rounding errors occur
            Assert.IsTrue(expectedGeometry.EqualsExact(crossSection.Geometry, 0.0001));

            //action : change the profile
            crossSectionDefinitionYZ.YZDataTable[0].Yq = -20;

            expectedGeometry = new LineString(new[] { new Coordinate(50, 70), new Coordinate(50, -50) });
            Assert.IsTrue(expectedGeometry.EqualsExact(crossSection.Geometry, 0.0001));

            //action: change the thalweg
            crossSectionDefinitionYZ.Thalweg = 40;

            expectedGeometry = new LineString(new[] { new Coordinate(50, 60), new Coordinate(50, -60) });
            Assert.IsTrue(expectedGeometry.EqualsExact(crossSection.Geometry, 0.0001));
        }
Beispiel #4
0
        public void CloneHydroNetworkWithVariousBranchFeatures()
        {
            var network = new HydroNetwork();
            var from    = new HydroNode();
            var to      = new HydroNode();

            network.Nodes.Add(from);
            network.Nodes.Add(to);
            var channel = new Channel {
                Source = from, Target = to
            };

            network.Branches.Add(channel);
            var compositeBranchStructure = new CompositeBranchStructure();

            NetworkHelper.AddBranchFeatureToBranch(compositeBranchStructure, channel, 0);
            HydroNetworkHelper.AddStructureToComposite(compositeBranchStructure, new Weir());
            HydroNetworkHelper.AddStructureToComposite(compositeBranchStructure, new Pump());

            var crossSectionXYZ = new CrossSectionDefinitionXYZ
            {
                Geometry = new LineString(new[] { new Coordinate(0, 0), new Coordinate(10, 0) })
            };

            HydroNetworkHelper.AddCrossSectionDefinitionToBranch(channel, crossSectionXYZ, 0);

            var clonedHydroNetwork = (IHydroNetwork)network.Clone();

            clonedHydroNetwork.CrossSections.Should().Have.Count.EqualTo(1);
            clonedHydroNetwork.CompositeBranchStructures.Should().Have.Count.EqualTo(1);
            clonedHydroNetwork.Weirs.Should().Have.Count.EqualTo(1);
            clonedHydroNetwork.Pumps.Should().Have.Count.EqualTo(1);
        }
Beispiel #5
0
        public void CannotRemoveSectionTypesThatAreUsedByCrossSections()
        {
            //setup a network with a crossection and a sectiontype that is used
            var channel                 = new Channel();
            var network                 = new HydroNetwork();
            var crossSectionZW          = new CrossSectionDefinitionZW();
            var crossSectionSectionType = new CrossSectionSectionType();

            crossSectionZW.Sections.Add(new CrossSectionSection {
                SectionType = crossSectionSectionType
            });
            HydroNetworkHelper.AddCrossSectionDefinitionToBranch(channel, crossSectionZW, 0.0);

            network.CrossSectionSectionTypes.Add(crossSectionSectionType);
            network.Branches.Add(channel);


            //action! remove the sectiontype
            network.CrossSectionSectionTypes.Remove(crossSectionSectionType);

            //still have 2. one plus a 'default'?
            Assert.AreEqual(2, network.CrossSectionSectionTypes.Count);

            Assert.IsTrue(network.CrossSectionSectionTypes.Contains(crossSectionSectionType));
        }
Beispiel #6
0
        private HydroNetwork GetNetwork()
        {
            var network = new HydroNetwork();
            var crossSectionSectionType = new CrossSectionSectionType {
                Name = "Jan"
            };

            network.CrossSectionSectionTypes.Add(crossSectionSectionType);
            crossSectionSectionType.Id = 666;//debug easy by idd
            var from = new HydroNode();
            var to   = new HydroNode();

            network.Nodes.Add(from);
            network.Nodes.Add(to);
            var channel = new Channel {
                Source = from, Target = to
            };

            network.Branches.Add(channel);
            var crossSectionXYZ = new CrossSectionDefinitionXYZ
            {
                Geometry = new LineString(new[] { new Coordinate(0, 0), new Coordinate(10, 0) })
            };

            crossSectionXYZ.Sections.Add(new CrossSectionSection {
                SectionType = crossSectionSectionType
            });

            HydroNetworkHelper.AddCrossSectionDefinitionToBranch(channel, crossSectionXYZ, 0);
            return(network);
        }
Beispiel #7
0
        public void SetDefaultGeometryWithBrancheGeometry()
        {
            var hydroNetwork = new HydroNetwork();

            var channel = new Channel {
                Geometry = new LineString(new[] { new Coordinate(0, 0), new Coordinate(20, 0) })
            };

            var crossSectionDefinition = new CrossSectionDefinitionYZ();

            crossSectionDefinition.YZDataTable.AddCrossSectionYZRow(0, 5, 0);
            crossSectionDefinition.YZDataTable.AddCrossSectionYZRow(2, 0, 1);
            crossSectionDefinition.YZDataTable.AddCrossSectionYZRow(4, 5, 0);
            crossSectionDefinition.Thalweg = 2;

            hydroNetwork.Branches.Add(channel);
            int offset       = 12;
            var crossSection = HydroNetworkHelper.AddCrossSectionDefinitionToBranch(channel, crossSectionDefinition, offset);

            Assert.AreEqual(4, crossSection.Geometry.Length);
            Assert.AreEqual(2, crossSection.Geometry.Coordinates.Length);

            Assert.IsTrue(crossSection.Geometry.Coordinates.All(c => c.X == offset));
            Assert.AreEqual(new[] { 2d, -2d }, crossSection.Geometry.Coordinates.Select(c => c.Y).ToList());
        }
Beispiel #8
0
        public void CloneHydroNetworkWithProxyDefinitions()
        {
            var network          = HydroNetworkHelper.GetSnakeHydroNetwork(1);
            var sharedDefinition = new CrossSectionDefinitionYZ();

            network.SharedCrossSectionDefinitions.Add(sharedDefinition);
            HydroNetworkHelper.AddCrossSectionDefinitionToBranch(network.Channels.First(),
                                                                 new CrossSectionDefinitionProxy(sharedDefinition),
                                                                 10.0d);

            var clone = (HydroNetwork)network.Clone();

            TestReferenceHelper.AssertStringRepresentationOfGraphIsEqual(network, clone);
        }
Beispiel #9
0
        public void BranchCrossSectionShouldRaiseCollectionChangedEvent()
        {
            var crossSection = new CrossSectionDefinitionXYZ();
            var branch       = new Channel(new HydroNode("from"), new HydroNode("To"));

            int count = 0;

            Post.Cast <Channel, INotifyCollectionChange>(branch).CollectionChanged += delegate { count++; };

            HydroNetworkHelper.AddCrossSectionDefinitionToBranch(branch, crossSection, 0.0);
            Assert.AreEqual(1, count);

            branch.BranchFeatures.Clear();
            Assert.AreEqual(2, count);
        }
Beispiel #10
0
        public void CloneRewiresProxyDefinitions()
        {
            var network          = HydroNetworkHelper.GetSnakeHydroNetwork(1);
            var sharedDefinition = new CrossSectionDefinitionYZ();

            network.SharedCrossSectionDefinitions.Add(sharedDefinition);
            var crossSectionDefinitionProxy = new CrossSectionDefinitionProxy(sharedDefinition);

            HydroNetworkHelper.AddCrossSectionDefinitionToBranch(network.Branches.First(),
                                                                 crossSectionDefinitionProxy, 10.0);

            var clonedNetwork = (HydroNetwork)network.Clone();

            Assert.AreEqual(1, clonedNetwork.SharedCrossSectionDefinitions.Count);
            //check the proxy got rewired
            var crossSectionClone     = clonedNetwork.CrossSections.First();
            var clonedProxyDefinition = (CrossSectionDefinitionProxy)crossSectionClone.Definition;

            Assert.AreEqual(clonedProxyDefinition.InnerDefinition, clonedNetwork.SharedCrossSectionDefinitions.First());
        }
Beispiel #11
0
        public void CloneHydroNetworkWithCrossSectionSectionTypes()
        {
            var network = new HydroNetwork();
            var crossSectionSectionType = new CrossSectionSectionType {
                Name = "Jan"
            };

            network.CrossSectionSectionTypes.Add(crossSectionSectionType);
            crossSectionSectionType.Id = 666;//debug easy by idd
            var from = new HydroNode();
            var to   = new HydroNode();

            network.Nodes.Add(from);
            network.Nodes.Add(to);
            var channel = new Channel {
                Source = from, Target = to
            };

            network.Branches.Add(channel);
            var crossSectionXYZ = new CrossSectionDefinitionXYZ
            {
                Geometry = new LineString(new[] { new Coordinate(0, 0), new Coordinate(10, 0) })
            };

            crossSectionXYZ.Sections.Add(new CrossSectionSection {
                SectionType = crossSectionSectionType
            });

            HydroNetworkHelper.AddCrossSectionDefinitionToBranch(channel, crossSectionXYZ, 0);

            var clonedHydroNetwork = (IHydroNetwork)network.Clone();

            clonedHydroNetwork.CrossSections.Should().Have.Count.EqualTo(1);
            var cloneCrossSection = clonedHydroNetwork.CrossSections.FirstOrDefault();
            var clonedType        = clonedHydroNetwork.CrossSectionSectionTypes.FirstOrDefault(t => t.Name == "Jan");

            //the type should be cloned
            Assert.AreNotEqual(clonedType, crossSectionSectionType);
            //the crosssection reference should be updated to use the cloned type
            Assert.AreEqual(clonedType, cloneCrossSection.Definition.Sections[0].SectionType);
        }
Beispiel #12
0
        public void CloneHydroNetworkWithCrossSection()
        {
            var network = new HydroNetwork();
            var from    = new HydroNode();
            var to      = new HydroNode();

            network.Nodes.Add(from);
            network.Nodes.Add(to);
            var channel = new Channel {
                Source = from, Target = to
            };

            network.Branches.Add(channel);
            var crossSectionXYZ = new CrossSectionDefinitionXYZ
            {
                Geometry = new LineString(new[] { new Coordinate(0, 0), new Coordinate(10, 0) })
            };

            HydroNetworkHelper.AddCrossSectionDefinitionToBranch(channel, crossSectionXYZ, 0);

            var clonedHydroNetwork = (IHydroNetwork)network.Clone();

            clonedHydroNetwork.CrossSections.Should().Have.Count.EqualTo(1);
        }