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); } } }
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)); } }
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"); }
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); }
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); }
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); }
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); } }
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 } }; } }
public DetachedSpanEquipmentBuilder(ILogger <GetDiagramQueryHandler> logger, SpanEquipmentViewModel spanEquipmentViewModel) { _logger = logger; _spanEquipmentViewModel = spanEquipmentViewModel; }
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++; } }