def columns_from_row_type(row_type, extra_column_names=None):
    """Generate list of column names based on the row_type card at the beginning of the line

    Args:
        row_type(str, required):
            The card at the beginning of a line, should be one of `ROW_TYPES`
        extra_column_names(list<str>, optional, default=None):
            List of column names that specify what to call extra columns if they are to be preserved

    Returns:
        List of column names
    """
    extra_column_names = extra_column_names or list()

    if row_type.upper() == 'ND':
        columns = ['x', 'y', 'z']
    else:
        num_elements = int(row_type[1])
        columns = ['v{}'.format(i) for i in range(num_elements)]
        columns.append('material')

    columns.extend(extra_column_names)
    return columns