Beispiel #1
0
        private void CreateTerminalForSingleConduitEnd(SpanEquipmentViewModel viewModel, BlockPort outerConduitPort)
        {
            var routeSpanDiagramInfo = viewModel.RootSpanDiagramInfo("OuterConduit");

            var terminal = new BlockPortTerminal(outerConduitPort)
            {
                IsVisible    = true,
                ShapeType    = viewModel.IsSingleSpan ? TerminalShapeTypeEnum.PointAndPolygon : TerminalShapeTypeEnum.Point,
                PointStyle   = outerConduitPort.Side.ToString() + "TerminalLabel",
                PointLabel   = viewModel.InterestRelationKind() == RouteNetworkInterestRelationKindEnum.End ? viewModel.GetIngoingRouteNodeName(routeSpanDiagramInfo.SegmentId) : viewModel.GetOutgoingRouteNodeName(routeSpanDiagramInfo.SegmentId),
                PolygonStyle = routeSpanDiagramInfo.StyleName,
                DrawingOrder = 620
            };

            terminal.SetReference(routeSpanDiagramInfo.SegmentId, "SpanSegment");

            AddToTerminalEnds(routeSpanDiagramInfo.TerminalId, routeSpanDiagramInfo.SpanSegment, terminal, routeSpanDiagramInfo.StyleName);

            // Check if cables are related to the conduit
            if (_nodeContainerViewModel.Data.ConduitSegmentToCableChildRelations.ContainsKey(routeSpanDiagramInfo.SegmentId))
            {
                var cableRelations = _nodeContainerViewModel.Data.ConduitSegmentToCableChildRelations[routeSpanDiagramInfo.SegmentId];

                foreach (var cableId in cableRelations)
                {
                    // Add cable to terminal end relation
                    AddToTerminalEnds(cableId, routeSpanDiagramInfo.SpanSegment, terminal, routeSpanDiagramInfo.StyleName);
                }
            }
        }
Beispiel #2
0
        private void AffixConduit(LineBlock nodeContainerBlock, SpanEquipmentViewModel viewModel)
        {
            if (viewModel.IsPassThrough)
            {
                AffixPassThroughConduit(nodeContainerBlock, viewModel);

                _nodeContainerViewModel.PortViewModels.Add(new NodeContainerBlockPortViewModel(_nodeContainerViewModel, viewModel, NodeContainerBlockPortViewModelKind.PassThrough));
            }
            else
            {
                AffixConduitEnd(nodeContainerBlock, viewModel);

                _nodeContainerViewModel.PortViewModels.Add(new NodeContainerBlockPortViewModel(_nodeContainerViewModel, viewModel, NodeContainerBlockPortViewModelKind.End));
            }
        }
Beispiel #3
0
        private void CreateTerminalForShowingWhereEmptySingleConduitIsHeading(SpanEquipmentViewModel viewModel, BlockPort outerConduitPort)
        {
            var routeSpanDiagramInfo = viewModel.RootSpanDiagramInfo("OuterConduit");

            var terminal = new BlockPortTerminal(outerConduitPort)
            {
                IsVisible    = true,
                ShapeType    = viewModel.IsSingleSpan ? TerminalShapeTypeEnum.PointAndPolygon : TerminalShapeTypeEnum.Point,
                PointStyle   = outerConduitPort.Side.ToString() + "TerminalLabel",
                PointLabel   = viewModel.InterestRelationKind() == RouteNetworkInterestRelationKindEnum.End ? viewModel.GetIngoingRouteNodeName(routeSpanDiagramInfo.SegmentId) : viewModel.GetOutgoingRouteNodeName(routeSpanDiagramInfo.SegmentId),
                PolygonStyle = routeSpanDiagramInfo.StyleName,
                DrawingOrder = 620
            };

            terminal.SetReference(routeSpanDiagramInfo.SegmentId, "SpanSegment");
        }
Beispiel #4
0
        private void AffixConduitEnd(LineBlock nodeContainerBlock, SpanEquipmentViewModel viewModel)
        {
            var routeSpanDiagramInfo = viewModel.RootSpanDiagramInfo("OuterConduit");

            var blockSide = viewModel.BlockSideWhereSpanEquipmentShouldBeAffixed();

            // Create block port representing the outer conduit
            var outerConduitPort = CreatePortForOuterConduitEnd(viewModel, blockSide);

            nodeContainerBlock.AddPort(outerConduitPort);

            List <SpanDiagramInfo> innerSpanData = viewModel.GetInnerSpanDiagramInfos("InnerConduit");

            bool innerSpansFound = false;

            // Create inner conduit ends as port terminals
            foreach (var innerSpanDiagramInfo in innerSpanData)
            {
                CreateTerminalForInnerConduitEnd(viewModel, outerConduitPort, innerSpanDiagramInfo);
                innerSpansFound = true;
            }

            // We're dealing with a multi conduit without any inner conduits or a single span conduit
            if (!innerSpansFound)
            {
                // We're dealing with a single span conduit
                if (viewModel.IsSingleSpan)
                {
                    CreateTerminalForSingleConduitEnd(viewModel, outerConduitPort);
                }
                // We're dealing with a multi level conduit with no inner conduits
                else
                {
                    // Check if cables are related to the outer conduir
                    if (_nodeContainerViewModel.Data.ConduitSegmentToCableChildRelations.ContainsKey(routeSpanDiagramInfo.SegmentId))
                    {
                        CreateTerminalsForCablesRelatedToSingleConduitEnd(viewModel, outerConduitPort);
                    }
                    // No cables so we create one terminal that shows where the empty multi conduit is heading
                    else
                    {
                        CreateTerminalForShowingWhereEmptySingleConduitIsHeading(viewModel, outerConduitPort);
                    }
                }
            }
        }
        private SpanSegment GetIngoingOrOutgoingSpanSegment(SpanEquipmentViewModel spanEquipmentView, SpanStructure spanStructure)
        {
            foreach (var spanSegment in spanStructure.SpanSegments)
            {
                var spanSegmentFromRouteNodeId = spanEquipmentView.SpanEquipment.NodesOfInterestIds[spanSegment.FromNodeOfInterestIndex];
                var spanSegmentToRouteNodeId   = spanEquipmentView.SpanEquipment.NodesOfInterestIds[spanSegment.ToNodeOfInterestIndex];

                if (spanSegmentToRouteNodeId == spanEquipmentView.RouteNetworkElementIdOfInterest)
                {
                    return(spanSegment);
                }
                else if (spanSegmentFromRouteNodeId == spanEquipmentView.RouteNetworkElementIdOfInterest)
                {
                    return(spanSegment);
                }
            }

            return(null);
        }
Beispiel #6
0
        private BlockPortTerminal CreateTerminalForInnerConduitEnd(SpanEquipmentViewModel viewModel, BlockPort outerConduitPort, SpanDiagramInfo innerSpanDiagramInfo)
        {
            var terminal = new BlockPortTerminal(outerConduitPort)
            {
                IsVisible    = true,
                ShapeType    = TerminalShapeTypeEnum.PointAndPolygon,
                PointStyle   = outerConduitPort.Side.ToString() + "TerminalLabel",
                PointLabel   = viewModel.InterestRelationKind() == RouteNetworkInterestRelationKindEnum.End ? viewModel.GetIngoingRouteNodeName(innerSpanDiagramInfo.SegmentId) : viewModel.GetOutgoingRouteNodeName(innerSpanDiagramInfo.SegmentId),
                PolygonStyle = innerSpanDiagramInfo.StyleName
            };

            terminal.DrawingOrder = 620;

            terminal.SetReference(innerSpanDiagramInfo.SegmentId, "SpanSegment");

            AddToTerminalEnds(innerSpanDiagramInfo.TerminalId, innerSpanDiagramInfo.SpanSegment, terminal, innerSpanDiagramInfo.StyleName);

            return(terminal);
        }
Beispiel #7
0
        private BlockPort CreatePortForOuterConduitEnd(SpanEquipmentViewModel viewModel, BlockSideEnum blockSide)
        {
            var routeSpanDiagramInfo = viewModel.RootSpanDiagramInfo("OuterConduit");

            var port = new BlockPort(blockSide)
            {
                IsVisible  = viewModel.IsSingleSpan ? false : true,
                Margin     = viewModel.IsSingleSpan ? _portMargin / 2 : _portMargin,
                Style      = routeSpanDiagramInfo.StyleName,
                PointStyle = blockSide.ToString() + "TerminalLabel",
                PointLabel = viewModel.GetConduitEquipmentLabel(),
            };

            port.DrawingOrder = 420;

            port.SetReference(routeSpanDiagramInfo.SegmentId, "SpanSegment");

            return(port);
        }
        private double AddDetachedSpanEquipmentsToDiagram(double yOffsetInitial)
        {
            double yOffset = yOffsetInitial;

            var detachedSpanEquipments = _data.SpanEquipments.Where(s => !s.IsAttachedToNodeContainer(_data));

            var orderedDetachedSpanEquipments = detachedSpanEquipments.OrderBy(s => s.IsPassThrough(_data)).ThenBy(s => s.IsMultiLevel(_data)).Reverse();

            foreach (var spanEquipment in orderedDetachedSpanEquipments)
            {
                var readModel = new SpanEquipmentViewModel(_logger, _routeNetworkElementId, spanEquipment.Id, _data);

                if (!readModel.IsCableWithinConduit)
                {
                    var builder = new DetachedSpanEquipmentBuilder(_logger, readModel);

                    var size = builder.CreateDiagramObjects(_diagram, 0, yOffset);

                    yOffset += size.Height + _spaceBetweenSections;
                }
            }

            return(yOffset);
        }
Beispiel #9
0
        private void CreateTerminalsForCablesRelatedToSingleConduitEnd(SpanEquipmentViewModel viewModel, BlockPort outerConduitPort)
        {
            var routeSpanDiagramInfo = viewModel.RootSpanDiagramInfo("OuterConduit");

            var cableRelations = _nodeContainerViewModel.Data.ConduitSegmentToCableChildRelations[routeSpanDiagramInfo.SegmentId];

            foreach (var cableId in cableRelations)
            {
                var terminal = new BlockPortTerminal(outerConduitPort)
                {
                    IsVisible    = viewModel.IsSingleSpan && viewModel.SpanEquipment.SpanStructures.Length == 1,
                    ShapeType    = TerminalShapeTypeEnum.Point,
                    PointStyle   = outerConduitPort.Side + "TerminalLabel",
                    PointLabel   = viewModel.InterestRelationKind() == RouteNetworkInterestRelationKindEnum.End ? viewModel.GetIngoingRouteNodeName(routeSpanDiagramInfo.SegmentId) : viewModel.GetOutgoingRouteNodeName(routeSpanDiagramInfo.SegmentId),
                    PolygonStyle = routeSpanDiagramInfo.StyleName,
                    DrawingOrder = 620
                };

                terminal.SetReference(routeSpanDiagramInfo.SegmentId, "SpanSegment");

                // Create a fake terminal for the cable
                AddToTerminalEnds(cableId, routeSpanDiagramInfo.SpanSegment, terminal, routeSpanDiagramInfo.StyleName);
            }
        }
Beispiel #10
0
 public NodeContainerBlockPortViewModel(NodeContainerViewModel nodeContainerViewModel, SpanEquipmentViewModel spanEquipmentViewModel, NodeContainerBlockPortViewModelKind kind)
 {
 }
        private void AddToTerminalIndex(Dictionary <Guid, List <TerminalIndexRecord> > terminalIndex, Guid terminalId, SpanEquipmentViewModel spanEquipmentViewModel, SpanSegment spanSegment, ushort structurePosition)
        {
            if (terminalId == Guid.Empty)
            {
                return;
            }

            if (terminalIndex.ContainsKey(terminalId))
            {
                terminalIndex[terminalId].Add(
                    new TerminalIndexRecord()
                {
                    SpanEquipmentViewModel = spanEquipmentViewModel,
                    SpanSegment            = spanSegment,
                    StructurePosition      = structurePosition
                }
                    );
            }
            else
            {
                terminalIndex[terminalId] = new List <TerminalIndexRecord> {
                    new TerminalIndexRecord()
                    {
                        SpanEquipmentViewModel = spanEquipmentViewModel,
                        SpanSegment            = spanSegment,
                        StructurePosition      = structurePosition
                    }
                };
            }
        }
Beispiel #12
0
 public DetachedSpanEquipmentBuilder(ILogger <GetDiagramQueryHandler> logger, SpanEquipmentViewModel spanEquipmentViewModel)
 {
     _logger = logger;
     _spanEquipmentViewModel = spanEquipmentViewModel;
 }
Beispiel #13
0
        private void AffixPassThroughConduit(LineBlock nodeContainerBlock, SpanEquipmentViewModel viewModel)
        {
            var spanDiagramInfo = viewModel.RootSpanDiagramInfo("OuterConduit");

            BlockSideEnum fromSide = viewModel.BlockSideWhereSpanEquipmentShouldBeAffixed();
            BlockSideEnum toSide   = viewModel.OppositeBlockSideWhereSpanEquipmentShouldBeAffixed();

            bool portsVisible = true;

            // If cut we want to draw the port polygons, because otherwise the outer conduit cannot be seen on the diagram (due to missing connection between the two sides)
            if (spanDiagramInfo.IsPassThrough)
            {
                portsVisible = false;
            }

            // Create outer conduit as port
            var fromPort = new BlockPort(fromSide)
            {
                IsVisible  = portsVisible,
                Margin     = _portMargin,
                Style      = spanDiagramInfo.StyleName,
                PointStyle = fromSide.ToString() + "TerminalLabel",
                PointLabel = viewModel.GetConduitEquipmentLabel()
            };

            fromPort.DrawingOrder = 420;
            fromPort.SetReference(viewModel.RootSpanDiagramInfo("OuterConduit").IngoingSegmentId, "SpanSegment");
            nodeContainerBlock.AddPort(fromPort);

            var toPort = new BlockPort(toSide)
            {
                IsVisible  = portsVisible,
                Margin     = _portMargin,
                Style      = spanDiagramInfo.StyleName,
                PointStyle = toSide.ToString() + "TerminalLabel",
                PointLabel = viewModel.GetConduitEquipmentLabel()
            };

            toPort.DrawingOrder = 420;
            toPort.SetReference(viewModel.RootSpanDiagramInfo("OuterConduit").OutgoingSegmentId, "SpanSegment");

            nodeContainerBlock.AddPort(toPort);

            if (spanDiagramInfo.IsPassThrough)
            {
                var portConnection = nodeContainerBlock.AddPortConnection(fromSide, fromPort.Index, toSide, toPort.Index, null, spanDiagramInfo.StyleName);
                portConnection.SetReference(spanDiagramInfo.SegmentId, "SpanSegment");
                portConnection.DrawingOrder = 410;
            }

            List <SpanDiagramInfo> innerSpanData = viewModel.GetInnerSpanDiagramInfos("InnerConduit");

            bool innerSpansFound = false;

            int terminalNo = 1;

            if (innerSpanData.Count == 6)
            {
            }

            foreach (var innerSpan in innerSpanData)
            {
                TerminalShapeTypeEnum terminalShapeType = TerminalShapeTypeEnum.Point;

                // If cut we want to draw the terminal polygon, because otherwise the conduit cannot be seen on the diagram (due to missing connection between the two sides)
                if (!innerSpan.IsPassThrough)
                {
                    terminalShapeType = TerminalShapeTypeEnum.PointAndPolygon;
                }


                string fromNodeName = "NA";
                string toNodeName   = "NA";

                if (innerSpan.IsPassThrough)
                {
                    fromNodeName = viewModel.GetIngoingRouteNodeName(innerSpan.SegmentId);
                    toNodeName   = viewModel.GetOutgoingRouteNodeName(innerSpan.SegmentId);
                }
                else
                {
                    fromNodeName = viewModel.GetIngoingRouteNodeName(innerSpan.IngoingSpanSegment.Id);
                    toNodeName   = viewModel.GetOutgoingRouteNodeName(innerSpan.OutgoingSpanSegment.Id);
                }

                var fromTerminal = new BlockPortTerminal(fromPort)
                {
                    IsVisible    = true,
                    ShapeType    = terminalShapeType,
                    PointStyle   = fromSide.ToString() + "TerminalLabel",
                    PointLabel   = fromNodeName,
                    PolygonStyle = innerSpan.StyleName
                };

                fromTerminal.SetReference(innerSpan.IngoingSegmentId, "SpanSegment");
                fromTerminal.DrawingOrder = 620;

                var toTerminal = new BlockPortTerminal(toPort)
                {
                    IsVisible    = true,
                    ShapeType    = terminalShapeType,
                    PointStyle   = toSide.ToString() + "TerminalLabel",
                    PointLabel   = toNodeName,
                    PolygonStyle = innerSpan.StyleName
                };

                toTerminal.SetReference(innerSpan.OutgoingSegmentId, "SpanSegment");
                toTerminal.DrawingOrder = 620;

                // Connect the two sides, if the inner conduit is not cut / passing through
                if (innerSpan.IsPassThrough)
                {
                    var terminalConnection = nodeContainerBlock.AddTerminalConnection(fromSide, fromPort.Index, terminalNo, toSide, toPort.Index, terminalNo, null, innerSpan.StyleName, LineShapeTypeEnum.Polygon);
                    terminalConnection.SetReference(innerSpan.IngoingSegmentId, "SpanSegment");
                    terminalConnection.DrawingOrder = 510;

                    // Add eventually cable running through inner conduit
                    if (_nodeContainerViewModel.Data.ConduitSegmentToCableChildRelations.ContainsKey(innerSpan.IngoingSegmentId))
                    {
                        var cableId             = _nodeContainerViewModel.Data.ConduitSegmentToCableChildRelations[innerSpan.IngoingSegmentId].First();
                        var fiberCableLineLabel = _nodeContainerViewModel.Data.GetCableEquipmentLineLabel(cableId);


                        var cableTerminalConnection = nodeContainerBlock.AddTerminalConnection(BlockSideEnum.West, 1, terminalNo, BlockSideEnum.East, 1, terminalNo, fiberCableLineLabel, "FiberCable", LineShapeTypeEnum.Line);
                        cableTerminalConnection.DrawingOrder = 600;
                        cableTerminalConnection.SetReference(cableId, "SpanSegment");
                    }
                }
                else
                {
                    // Add from terminal / ingoing segment to ends
                    AddToTerminalEnds(innerSpan.IngoingTerminalId, innerSpan.IngoingSpanSegment, fromTerminal, innerSpan.StyleName);

                    // Add to terminal / outgoing segment to ends
                    AddToTerminalEnds(innerSpan.OutgoingTerminalId, innerSpan.OutgoingSpanSegment, toTerminal, innerSpan.StyleName);
                }

                terminalNo++;
                innerSpansFound = true;
            }

            // Create fake inner terminals used to display where the empty multi conduit is heading
            if (!innerSpansFound)
            {
                var fromTerminal = new BlockPortTerminal(fromPort)
                {
                    IsVisible    = true,
                    ShapeType    = TerminalShapeTypeEnum.Point,
                    PointStyle   = fromSide.ToString() + "TerminalLabel",
                    PointLabel   = viewModel.GetIngoingRouteNodeName(spanDiagramInfo.IngoingSegmentId),
                    DrawingOrder = 520
                };

                fromTerminal.SetReference(spanDiagramInfo.IngoingSegmentId, "SpanSegment");

                var toTerminal = new BlockPortTerminal(toPort)
                {
                    IsVisible    = true,
                    ShapeType    = TerminalShapeTypeEnum.Point,
                    PointStyle   = toSide.ToString() + "TerminalLabel",
                    PointLabel   = viewModel.GetOutgoingRouteNodeName(spanDiagramInfo.IngoingSegmentId),
                    DrawingOrder = 520
                };

                toTerminal.SetReference(spanDiagramInfo.OutgoingSegmentId, "SpanSegment");

                terminalNo++;
            }
        }