"""
Explode, re-join and simplify polylines
Axel Jacobs, 19 Jan 2017
"""

from __future__ import print_function

import rhinoscriptsyntax as rs


def main():
    objs = rs.GetObjects('Select polylines', filter=rs.filter.curve,
            preselect=True, select=True)
    if not objs:
        print("Error: Need polylines to proceed.")
        return

    rebuildPolylines(objs)


def rebuildPolylines(plines):
    failed = 0

    for pline in plines:
        segments = rs.ExplodeCurves(pline)

        if not segments:
            print("Error: Could not explode polyline.")
            failed += 1
            continue

        joined = rs.JoinCurves(segments)
        rs.DeleteObjects(segments)

        if not joined:
            print("Error: Could not join segments.")
            failed += 1
            continue

        if len(joined) != 1:
            print("Error: Joining segments resulted in more than one curve.")
            rs.DeleteObjects(joined)
            failed += 1
            continue

        if not rs.SimplifyCurve(joined):
            print("Warning: Could not simplify curve.")
            continue

        rs.DeleteObject(pline)

    total = len(plines)
    print("Successfully re-built {s} out of {t} polylines.".format(
            s=total-failed,t=total))

    return


if __name__ == '__main__':
    main()

#EOF