コード例 #1
0
        public void InnerConduitCut(SingleConduitInfo singleConduitInfo, MultiConduitInnerConduitCut @event)
        {
            // Get the multi conduit
            var multiConduit = conduitNetworkQueryService.GetMultiConduitInfo(@event.MultiConduitId);

            // Get the walk of interest of the multi conduit
            var walkOfInterest = routeNetworkQueryService.GetWalkOfInterestInfo(multiConduit.WalkOfInterestId);

            // Get the node
            var nodeWhereToCut = routeNetworkQueryService.GetRouteNodeInfo(@event.PointOfInterestId);

            ConduitCutter.CutConduit(singleConduitInfo, walkOfInterest, nodeWhereToCut);

            conduitNetworkQueryService.UpdateSingleConduitInfo(singleConduitInfo);
        }
コード例 #2
0
 // Apply inner conduit cut event
 private void Apply(MultiConduitInnerConduitCut @event)
 {
 }
コード例 #3
0
        private void OnMultiConduitInnerConduitCut(ConduitClosureInfo conduitClosure, MultiConduitInnerConduitCut @event)
        {
            // Get multi conduit
            var multiConduit = conduitNetworkQueryService.GetMultiConduitInfo(@event.MultiConduitId);

            // Get the inner conduit that is cut
            var innerConduit = multiConduit.Children.OfType <ConduitInfo>().Single(c => c.SequenceNumber == @event.InnerConduitSequenceNumber);

            var relatedSegments = FindRelatedSegmentInfo(innerConduit, @event.PointOfInterestId);

            if (relatedSegments.Exists(s => s.RelationType == ConduitRelationTypeEnum.Incomming))
            {
                var incommingSegment = relatedSegments.Find(s => s.RelationType == ConduitRelationTypeEnum.Incomming);

                // Find incomming terminal
                if (conduitClosure.Sides.Exists(s => s.Ports.Exists(p => p.MultiConduitId == @event.MultiConduitId && p.MultiConduitSegmentEndKind == ConduitEndKindEnum.Incomming)))
                {
                    var side = conduitClosure.Sides.Find(s => s.Ports.Exists(p => p.MultiConduitId == @event.MultiConduitId && p.MultiConduitSegmentEndKind == ConduitEndKindEnum.Incomming));
                    var port = side.Ports.Find(p => p.MultiConduitId == @event.MultiConduitId && p.MultiConduitSegmentEndKind == ConduitEndKindEnum.Incomming);

                    if (port.Terminals.Exists(t => t.Position == @event.InnerConduitSequenceNumber))
                    {
                        var terminal = port.Terminals.Find(t => t.Position == @event.InnerConduitSequenceNumber);
                        terminal.ConnectionKind      = ConduitClosureInternalConnectionKindEnum.NotConnected;
                        terminal.ConnectedToSide     = 0;
                        terminal.ConnectedToPort     = 0;
                        terminal.ConnectedToTerminal = 0;
                        terminal.LineSegmentId       = incommingSegment.Segment.Id;
                        terminal.LineSegment         = null; // to force re-resolving
                    }
                }
            }

            if (relatedSegments.Exists(s => s.RelationType == ConduitRelationTypeEnum.Outgoing))
            {
                var outgoingSegment = relatedSegments.Find(s => s.RelationType == ConduitRelationTypeEnum.Outgoing);

                // Find incomming terminal
                if (conduitClosure.Sides.Exists(s => s.Ports.Exists(p => p.MultiConduitId == @event.MultiConduitId && p.MultiConduitSegmentEndKind == ConduitEndKindEnum.Outgoing)))
                {
                    var side = conduitClosure.Sides.Find(s => s.Ports.Exists(p => p.MultiConduitId == @event.MultiConduitId && p.MultiConduitSegmentEndKind == ConduitEndKindEnum.Outgoing));
                    var port = side.Ports.Find(p => p.MultiConduitId == @event.MultiConduitId && p.MultiConduitSegmentEndKind == ConduitEndKindEnum.Outgoing);

                    if (port.Terminals.Exists(t => t.Position == @event.InnerConduitSequenceNumber))
                    {
                        var terminal = port.Terminals.Find(t => t.Position == @event.InnerConduitSequenceNumber);
                        terminal.ConnectionKind      = ConduitClosureInternalConnectionKindEnum.NotConnected;
                        terminal.ConnectedToSide     = 0;
                        terminal.ConnectedToPort     = 0;
                        terminal.ConnectedToTerminal = 0;
                        terminal.LineSegmentId       = outgoingSegment.Segment.Id;
                        terminal.LineSegment         = null; // to force re-resolving
                    }
                }
            }

            conduitClosureRepository.UpdateConduitClosureInfo(conduitClosure);
        }