import os
import numpy as np


class SplineWriter(object):
    def __init__(self, namespaces=None, filename="auto_splines.cc"):
        if namespaces:
            self._namespaces = namespaces
        else:
            self._namespaces = ['frc971', 'autonomous']

        self._namespace_start = '\n'.join(
            ['namespace %s {' % name for name in self._namespaces])

        self._namespace_end = '\n'.join([
            '}  // namespace %s' % name for name in reversed(self._namespaces)
        ])

        self.filename_ = filename

    def make_string_list(self, list):
        string = "{{"
        for i in range(0, len(list)):
            if i == len(list) - 1:
                string += str(list[i])
            else:
                string += str(list[i]) + ", "
        return string + "}}"

    def Write(self, spline_name, spline_idx, control_points):
        """Writes the cc file to the file named cc_file."""
        xs = control_points[:, 0]
        ys = control_points[:, 1]
        spline_count = (len(xs) - 6) / 5 + 1
        with open(self.filename_, 'a') as fd:
            fd.write(self._namespace_start)
            #write the name
            fd.write("\n\n::frc971::MultiSpline " + spline_name + "() {\n")
            # write the objs, at the moment assumes a single constraint, needs fixing
            fd.write(
                "\t::frc971::MultiSpline spline;\n\t::frc971::Constraint constraints;\n"
            )
            fd.write(
                "\tconstraints.constraint_type = 0;\n\tconstraints.value = 0;\n"
            )
            fd.write(
                "\tconstraints.start_distance = 0;\n\tconstraints.end_distance = 0;\n"
            )
            fd.write('\n')
            fd.write("\tspline.spline_idx = " + str(spline_idx) +
                     ";\n\tspline.spline_count = " + str(spline_count) + ";\n")
            fd.write("\tspline.spline_x = " + self.make_string_list(xs) +
                     ";\n\tspline.spline_y = " + self.make_string_list(ys) +
                     ";\n")
            fd.write(
                "\tspline.constraints = {{constraints}};\n\treturn spline;\n")
            fd.write("}")
            fd.write("\n\n")
            fd.write(self._namespace_end)
            fd.write("\n\n")


def main():
    writer = SplineWriter()
    points = np.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0],
                       [9.0, 10.0], [11.0, 12.0]])
    spline_name = "test_spline"
    spline_idx = 1
    writer.Write(spline_name, spline_idx, points)


main()

import os
import numpy as np


class SplineWriter(object):
    def __init__(self, namespaces=None, filename="auto_splines.cc"):
        if namespaces:
            self._namespaces = namespaces
        else:
            self._namespaces = ['frc971', 'autonomous']

        self._namespace_start = '\n'.join(
            ['namespace %s {' % name for name in self._namespaces])

        self._namespace_end = '\n'.join([
            '}  // namespace %s' % name for name in reversed(self._namespaces)
        ])

        self.filename_ = filename

    def make_string_list(self, list):
        string = "{{"
        for i in range(0, len(list)):
            if i == len(list) - 1:
                string += str(list[i])
            else:
                string += str(list[i]) + ", "
        return string + "}}"

    def Write(self, spline_name, spline_idx, control_points):
        """Writes the cc file to the file named cc_file."""
        xs = control_points[:, 0]
        ys = control_points[:, 1]
        spline_count = (len(xs) - 6) / 5 + 1
        with open(self.filename_, 'a') as fd:
            fd.write(self._namespace_start)
            #write the name
            fd.write("\n\n::frc971::MultiSpline " + spline_name + "() {\n")
            # write the objs, at the moment assumes a single constraint, needs fixing
            fd.write(
                "\t::frc971::MultiSpline spline;\n\t::frc971::Constraint constraints;\n"
            )
            fd.write(
                "\tconstraints.constraint_type = 0;\n\tconstraints.value = 0;\n"
            )
            fd.write(
                "\tconstraints.start_distance = 0;\n\tconstraints.end_distance = 0;\n"
            )
            fd.write('\n')
            fd.write("\tspline.spline_idx = " + str(spline_idx) +
                     ";\n\tspline.spline_count = " + str(spline_count) + ";\n")
            fd.write("\tspline.spline_x = " + self.make_string_list(xs) +
                     ";\n\tspline.spline_y = " + self.make_string_list(ys) +
                     ";\n")
            fd.write(
                "\tspline.constraints = {{constraints}};\n\treturn spline;\n")
            fd.write("}")
            fd.write("\n\n")
            fd.write(self._namespace_end)
            fd.write("\n\n")


def main():
    writer = SplineWriter()
    points = np.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0],
                       [9.0, 10.0], [11.0, 12.0]])
    spline_name = "test_spline"
    spline_idx = 1
    writer.Write(spline_name, spline_idx, points)


main()

Writes the cc file to the file named cc_file. #write the name # write the objs, at the moment assumes a single constraint, needs fixing