def add_roll_off(curve, roll_off_curve, direction, roll_radius, offset_extra, roll_off): if direction == "on": return if roll_off is None: return if curve.getNumVertices() <= 1: return last_span = curve.GetLastSpan() if roll_off == 'auto': if roll_radius < 0.0000000001: return v = last_span.GetVector(1.0) # get end direction if direction == 'right': off_v = area.Point(v.y, -v.x) else: off_v = area.Point(-v.y, v.x) rollend = last_span.v.p + off_v * roll_radius else: rollend = roll_off # add the end of the original kurve roll_off_curve.append(last_span.v.p) if rollend == last_span.v.p: return rvertex = area.Vertex(rollend) v = last_span.GetVector(1.0) # get end direction rvertex.c, rvertex.type = area.TangentialArc(last_span.v.p, rollend, v) # add the roll off arc roll_off_curve.append(rvertex)
def add_roll_on(curve, roll_on_curve, direction, roll_radius, offset_extra, roll_on): if direction == "on": roll_on = None if curve.getNumVertices() <= 1: return first_span = curve.GetFirstSpan() if roll_on is None: rollstart = first_span.p elif roll_on == 'auto': if roll_radius < 0.0000000001: rollstart = first_span.p v = first_span.GetVector(0.0) if direction == 'right': off_v = area.Point(v.y, -v.x) else: off_v = area.Point(-v.y, v.x) rollstart = first_span.p + off_v * roll_radius else: rollstart = roll_on rvertex = area.Vertex(first_span.p) if first_span.p == rollstart: rvertex.type = 0 else: v = first_span.GetVector(0.0) # get start direction rvertex.c, rvertex.type = area.TangentialArc( first_span.p, rollstart, -v) rvertex.type = -rvertex.type # because TangentialArc was used in reverse # add a start roll on point roll_on_curve.append(rollstart) # add the roll on arc roll_on_curve.append(rvertex)