public void BuildOn(Edge edge) { if (_startingNode == null || _endingNode == null) { throw new InvalidOperationException("Provide nodes to build on first"); } edge.segmentGroup?.Destroy(); _intermediatePoints = _lineFactory.GetIntermediatePoints(_startingNode.Value, _endingNode.Value, _rotation); if (_lineStart == null) { _lineStart = CreateDefaultLineEnding(edge.EdgeClass?.TexturePath); } if (_lineEnd == null) { _lineEnd = CreateDefaultLineEnding(edge.EdgeClass?.TexturePath); } var segments = new List <GameObject>(); for (int i = 0; i < _intermediatePoints.Count - 1; i++) { var segment = CreateCylinder(_class?.Scale ?? 1f); var material = _materialCache.GetByTexturePath(edge.EdgeClass?.TexturePath); segment.GetComponent <Renderer>().material = material; segments.Add(segment); } var segmentGroup = new SegmentGroup(_lineStart, segments, _lineEnd); segmentGroup.PlaceAlongPoints(_intermediatePoints); edge.segmentGroup = segmentGroup; edge.labelGameObject = _label; }