@@ -693,21 +693,34 @@ def reCurveSubSegments(self, inputContours):
693693 lp = segmentedFlatPoints [- 1 ][- 1 ]
694694 mergeFirstSegments = False
695695 if fp in flatInputPoints and lp in flatInputPoints :
696+ # fp and lp are "known" points with associated input
697+ # segments and fp is an isolated point in
698+ # segmentedFlatPoints[0]. If both points are
699+ # associated with the same input segment or if one
700+ # is the previous on-curve point for the other
701+ # segment (and the two are oriented correctly)
702+ # we want to merge the first and last segments.
696703 firstInputSegment = flatInputPointsSegmentDict [fp ]
697704 lastInputSegment = flatInputPointsSegmentDict [lp ]
698705 reversedFirstInputSegment = reversedFlatInputPointsSegmentDict [fp ]
699706 reversedLastInputSegment = reversedFlatInputPointsSegmentDict [lp ]
700- if (firstInputSegment .segmentType == reversedFirstInputSegment .segmentType == "curve" ) or (lastInputSegment .segmentType == reversedLastInputSegment .segmentType == "curve" ):
701- if firstInputSegment == lastInputSegment or reversedFirstInputSegment == reversedLastInputSegment :
707+ firstCurved = firstInputSegment .segmentType == reversedFirstInputSegment .segmentType == "curve"
708+ lastCurved = lastInputSegment .segmentType == reversedLastInputSegment .segmentType == "curve"
709+ if firstCurved or lastCurved :
710+ if (firstInputSegment == lastInputSegment or
711+ reversedFirstInputSegment == reversedLastInputSegment ):
702712 mergeFirstSegments = True
703- # elif len(firstInputSegment.points) > 1 and len( lastInputSegment.points) > 1:
704- elif fp == lastInputSegment .scaledPreviousOnCurve :
713+ elif ( fp == lastInputSegment .scaledPreviousOnCurve and
714+ lastCurved and lp == lastInputSegment .flat [ 0 ]) :
705715 mergeFirstSegments = True
706- elif lp == firstInputSegment .scaledPreviousOnCurve :
716+ elif (lp == firstInputSegment .scaledPreviousOnCurve and
717+ firstCurved and fp == firstInputSegment .flat [0 ]):
707718 mergeFirstSegments = True
708- elif fp == reversedLastInputSegment .scaledPreviousOnCurve :
719+ elif (fp == reversedLastInputSegment .scaledPreviousOnCurve and
720+ lastCurved and lp == reversedLastInputSegment .flat [0 ]):
709721 mergeFirstSegments = True
710- elif lp == reversedFirstInputSegment .scaledPreviousOnCurve :
722+ elif (lp == reversedFirstInputSegment .scaledPreviousOnCurve and
723+ firstCurved and fp == reversedFirstInputSegment .flat [0 ]):
711724 mergeFirstSegments = True
712725 elif not hasOncurvePoints and _distance (fp , lp ):
713726 # Merge last segment with first segment if the distance between the last point and the first
0 commit comments