protected override Geometry GetOrCreateConnectorGeometry(Size renderSize) { var ellipse = Ellipse.CreateFromSize(renderSize); this.SetCurrentValue(EllipseProperty, ellipse); if (ellipse.IsZero) { return(Geometry.Empty); } var direction = this.ConnectorOffset; var ip = ellipse.PointOnCircumference(direction); var vertexPoint = ip + this.ConnectorOffset; var ray = new Ray(vertexPoint, this.ConnectorOffset.Negated()); var p1 = ConnectorPoint.Find(ray, this.ConnectorAngle / 2, this.StrokeThickness, ellipse); var p2 = ConnectorPoint.Find(ray, -this.ConnectorAngle / 2, this.StrokeThickness, ellipse); this.SetCurrentValue(ConnectorVertexPointProperty, vertexPoint); this.SetCurrentValue(ConnectorPoint1Property, p1); this.SetCurrentValue(ConnectorPoint2Property, p2); if (this.ConnectorGeometry is PathGeometry) { return(this.ConnectorGeometry); } var figure = this.CreatePathFigureStartingAt(ConnectorPoint1Property); figure.Segments.Add(this.CreateLineSegmentTo(ConnectorVertexPointProperty)); figure.Segments.Add(this.CreateLineSegmentTo(ConnectorPoint2Property)); var geometry = new PathGeometry(); geometry.Figures.Add(figure); return(geometry); }
protected override Geometry GetOrCreateBoxGeometry(Size renderSize) { var ellipse = Ellipse.CreateFromSize(renderSize); this.SetCurrentValue(EllipseProperty, ellipse); if (ellipse.RadiusX <= 0 || ellipse.RadiusY <= 0) { return(Geometry.Empty); } if (this.BoxGeometry is EllipseGeometry) { return(this.BoxGeometry); } var geometry = new EllipseGeometry(); geometry.Bind(EllipseGeometry.CenterProperty) .OneWayTo(this, EllipseProperty, EllipseCenterConverter.Default); geometry.Bind(EllipseGeometry.RadiusXProperty) .OneWayTo(this, EllipseProperty, EllipseRadiusXConverter.Default); geometry.Bind(EllipseGeometry.RadiusYProperty) .OneWayTo(this, EllipseProperty, EllipseRadiusYConverter.Default); return(geometry); }