GetBounds() { AssertValid(); if (m_oEdge.IsSelfLoop) { Debug.Assert(false); throw new InvalidOperationException("Edge is self-loop."); } // Start with a rectangle that has the same dimensions as the edge, but // that starts at the origin and has an angle of zero. Point oVertex1Location = WpfGraphicsUtil.PointFToWpfPoint( m_oEdge.Vertex1.Location); Point oVertex2Location = WpfGraphicsUtil.PointFToWpfPoint( m_oEdge.Vertex2.Location); Double dLength = WpfGraphicsUtil.GetDistanceBetweenPoints( oVertex1Location, oVertex2Location); Double dAngleDegrees = MathUtil.RadiansToDegrees( WpfGraphicsUtil.GetAngleBetweenPointsRadians( oVertex1Location, oVertex2Location)); Double dHalfWidth = m_dWidth / 2.0; Point[] ao4BoundingPoints = new Point[4] { new Point(0, -dHalfWidth), new Point(dLength, -dHalfWidth), new Point(dLength, dHalfWidth), new Point(0, dHalfWidth), }; // Rotate the rectangle so it is at the same angle as the edge. TransformPoints(new RotateTransform(dAngleDegrees), ao4BoundingPoints); // Translate the rotated rectangle to the location of the edge's first // endpoint. TransformPoints( new TranslateTransform(oVertex1Location.X, oVertex1Location.Y), ao4BoundingPoints); // Create a PathGeometry from the bounding points. return(WpfPathGeometryUtil.GetPathGeometryFromPoints( ao4BoundingPoints[0], ao4BoundingPoints[1], ao4BoundingPoints[2], ao4BoundingPoints[3] )); }