///<inheritdoc/> public virtual IEnumerable <ILabelModelParameter> GetParameters(ILabel label, ILabelModel model) { SliderEdgeLabelModel sliderEdgeLabelModel = (SliderEdgeLabelModel)model; List <ILabelModelParameter> result = new List <ILabelModelParameter>(); IEdge edge = (IEdge)label.Owner; IPathGeometry geometry = GetPathGeometry(edge); if (geometry != null) { int count = geometry.GetSegmentCount(); for (int i = 0; i < count; i++) { result.Add(sliderEdgeLabelModel.CreateParameterFromSource(i, 0)); result.Add(sliderEdgeLabelModel.CreateParameterFromSource(i, 0.5)); result.Add(sliderEdgeLabelModel.CreateParameterFromSource(i, 1)); } } return(result); }
public void SetAnchor(SliderEdgeLabelModel labelModel, IEdge edge, OrientedRectangle geometry) { IPathGeometry pathGeometry = GetPathGeometry(edge); if (pathGeometry != null) { int count = pathGeometry.GetSegmentCount(); int index = segmentIndex; if (index >= count) { index = count - 1; } if (index < 0) { index = count + index; } if (index < 0) { index = 0; } else if (index >= count) { index = count - 1; } double thisRatio = ratio; var validTangent = pathGeometry.GetTangent(index, thisRatio); if (validTangent.HasValue) { var p = validTangent.Value.Point; var t = validTangent.Value.Vector; AnchorGeometry(geometry, labelModel.EdgeRelativeDistance, labelModel.Distance, p.X, p.Y, thisRatio, t.X, t.Y); return; } } geometry.Width = -1; geometry.Height = -1; }