private double CalculateClipLocation(ContourSegment hitSegment, StrokeNodeData beginNode, Vector spineVector, double pressureDelta)
        {
            double num = StrokeFIndices.BeforeFirst;

            if (hitSegment.IsArc || WhereIsVectorAboutVector(beginNode.Position - hitSegment.Begin, hitSegment.Vector) == HitResult.Left)
            {
                num = (hitSegment.IsArc ? ClipTestArc(spineVector, pressureDelta, (hitSegment.Begin + hitSegment.Radius - beginNode.Position) / beginNode.PressureFactor, hitSegment.Radius / beginNode.PressureFactor) : ClipTest(spineVector, pressureDelta, (hitSegment.Begin - beginNode.Position) / beginNode.PressureFactor, (hitSegment.End - beginNode.Position) / beginNode.PressureFactor));
                if (num == StrokeFIndices.AfterLast)
                {
                    num = StrokeFIndices.BeforeFirst;
                }
            }
            return(num);
        }
        private bool HitTestStrokeNodes(ContourSegment hitSegment, StrokeNodeData beginNode, StrokeNodeData endNode, ref StrokeFIndices result)
        {
            bool flag = false;

            for (int i = 0; i < 2; i++)
            {
                Point  position;
                double num;
                if (i == 0)
                {
                    if (flag && DoubleUtil.AreClose(result.BeginFIndex, StrokeFIndices.BeforeFirst))
                    {
                        continue;
                    }
                    position = beginNode.Position;
                    num      = beginNode.PressureFactor;
                }
                else
                {
                    if (flag && DoubleUtil.AreClose(result.EndFIndex, StrokeFIndices.AfterLast))
                    {
                        continue;
                    }
                    position = endNode.Position;
                    num      = endNode.PressureFactor;
                }
                Vector vector;
                Vector vector2;
                if (hitSegment.IsArc)
                {
                    vector  = hitSegment.Begin - position + hitSegment.Radius;
                    vector2 = hitSegment.Radius;
                }
                else
                {
                    vector  = hitSegment.Begin - position;
                    vector2 = vector + hitSegment.Vector;
                }
                if (num != 1.0)
                {
                    vector  /= num;
                    vector2 /= num;
                }
                if (!(hitSegment.IsArc ? HitTestPolygonCircle(_vertices, vector, vector2) : HitTestPolygonSegment(_vertices, vector, vector2)))
                {
                    continue;
                }
                flag = true;
                if (i == 0)
                {
                    result.BeginFIndex = StrokeFIndices.BeforeFirst;
                    if (DoubleUtil.AreClose(result.EndFIndex, StrokeFIndices.AfterLast))
                    {
                        break;
                    }
                    continue;
                }
                result.EndFIndex = StrokeFIndices.AfterLast;
                if (beginNode.IsEmpty)
                {
                    result.BeginFIndex = StrokeFIndices.BeforeFirst;
                    break;
                }
                if (DoubleUtil.AreClose(result.BeginFIndex, StrokeFIndices.BeforeFirst))
                {
                    break;
                }
            }
            return(flag);
        }