private Transform CalcEdgeTransform(int edgeIndex)
        {
            ShapeEdge edge       = this.shape.Structure.Edges[edgeIndex];
            Vector    pos1       = this.shape.VertexPositions[edge.Index1];
            Vector    pos2       = this.shape.VertexPositions[edge.Index2];
            Vector    middlePos  = 0.5 * (pos1 + pos2);
            double    edgeLength = pos1.DistanceToPoint(pos2);
            double    angle      = Vector.AngleBetween(Vector.UnitX, pos2 - pos1);

            TransformGroup result = new TransformGroup();

            result.Children.Add(new TranslateTransform(-0.5, -0.5));
            result.Children.Add(new ScaleTransform(edgeLength, this.shape.EdgeWidths[edgeIndex]));
            result.Children.Add(new RotateTransform(MathHelper.ToDegrees(angle)));
            result.Children.Add(new TranslateTransform(middlePos.X, middlePos.Y));

            return(result);
        }