protected override float ComputePixel(ref InstanceContext ctx) { var sd = SignedDistance.Infinite.Distance; for (var i = 0; i < Shape.Count; ++i) { var minDistance = SignedDistance.Infinite; EdgeSegment nearEdge = null; double nearParam = 0; foreach (var edge in Shape[i]) { double param = 0; var distance = edge.SignedDistance(ctx.P, ref param); if (distance < minDistance) { minDistance = distance; nearEdge = edge; nearParam = param; } } if (Math.Abs(minDistance.Distance) < Math.Abs(sd)) { sd = minDistance.Distance; ctx.Winding = -Windings[i]; } nearEdge?.DistanceToPseudoDistance(ref minDistance, ctx.P, nearParam); ContourSd[i] = new SingleDistance { Dist = minDistance.Distance }; ctx.UpdateDistance(Windings[i], minDistance.Distance); } return((float)(ComputeSd(Infinite, ref ctx).Dist / Range + 0.5)); }
protected override float ComputePixel(ref InstanceContext ctx) { double dummy = 0; for (var i = 0; i < Shape.Count; ++i) { var minDistance = SignedDistance.Infinite; foreach (var edge in Shape[i]) { var distance = edge.SignedDistance(ctx.P, ref dummy); if (distance < minDistance) { minDistance = distance; } } ContourSd[i] = new SingleDistance { Dist = minDistance.Distance }; ctx.UpdateDistance(Windings[i], minDistance.Distance); } return((float)(ComputeSd(Infinite, ref ctx).Dist / Range + 0.5)); }