'Printing method.'

def __str__(self, printer=None, order=True):

    from sympy.physics.vector.printing import VectorStrPrinter
    if ((not order) or (len(self.args) == 1)):
        ar = list(self.args)
    elif (len(self.args) == 0):
        return str(0)
    else:
        d = {v[1]: v[0] for v in self.args}
        keys = sorted(d.keys(), key=(lambda x: x.index))
        ar = []
        for key in keys:
            ar.append((d[key], key))
    ol = []
    for (i, v) in enumerate(ar):
        for j in (0, 1, 2):
            if (ar[i][0][j] == 1):
                ol.append(('    +    ' + ar[i][1].str_vecs[j]))
            elif (ar[i][0][j] == (-1)):
                ol.append(('    -    ' + ar[i][1].str_vecs[j]))
            elif (ar[i][0][j] != 0):
                arg_str = VectorStrPrinter().doprint(ar[i][0][j])
                if isinstance(ar[i][0][j], Add):
                    arg_str = ('(%s)' % arg_str)
                if (arg_str[0] == '-'):
                    arg_str = arg_str[1:]
                    str_start = '    -    '
                else:
                    str_start = '    +    '
                ol.append((((str_start + arg_str) + '*') + ar[i][1].str_vecs[j]))
    outstr = ''.join(ol)
    if outstr.startswith('    +    '):
        outstr = outstr[3:]
    elif outstr.startswith('    '):
        outstr = outstr[1:]
    return outstr
