
/* Automatically generated struct definitions for the Data API.
 * Do not edit manually, changes will be overwritten.           */

#define RNA_RUNTIME

#include <float.h>
#include <stdio.h>
#include <limits.h>
#include <string.h>

#include <stddef.h>

#include "MEM_guardedalloc.h"

#include "DNA_ID.h"
#include "DNA_scene_types.h"
#include "BLI_blenlib.h"

#include "BLI_utildefines.h"

#include "BKE_context.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_report.h"
#include "RNA_define.h"
#include "RNA_types.h"
#include "rna_internal.h"

#include "rna_prototypes_gen.h"

#include "rna_brush.c"

/* Autogenerated Functions */


extern CollectionPropertyRNA rna_ID_rna_properties;
extern PointerPropertyRNA rna_ID_rna_type;
extern StringPropertyRNA rna_ID_name;
extern IntPropertyRNA rna_ID_users;
extern BoolPropertyRNA rna_ID_use_fake_user;
extern BoolPropertyRNA rna_ID_tag;
extern BoolPropertyRNA rna_ID_is_updated;
extern BoolPropertyRNA rna_ID_is_updated_data;
extern BoolPropertyRNA rna_ID_is_library_indirect;
extern PointerPropertyRNA rna_ID_library;
extern PointerPropertyRNA rna_ID_preview;

EnumPropertyRNA rna_Brush_blend;
EnumPropertyRNA rna_Brush_sculpt_tool;
EnumPropertyRNA rna_Brush_vertex_tool;
EnumPropertyRNA rna_Brush_image_tool;
EnumPropertyRNA rna_Brush_direction;
EnumPropertyRNA rna_Brush_stroke_method;
EnumPropertyRNA rna_Brush_sculpt_plane;
EnumPropertyRNA rna_Brush_mask_tool;
IntPropertyRNA rna_Brush_size;
FloatPropertyRNA rna_Brush_unprojected_radius;
FloatPropertyRNA rna_Brush_jitter;
IntPropertyRNA rna_Brush_jitter_absolute;
IntPropertyRNA rna_Brush_spacing;
IntPropertyRNA rna_Brush_grad_spacing;
IntPropertyRNA rna_Brush_smooth_stroke_radius;
FloatPropertyRNA rna_Brush_smooth_stroke_factor;
FloatPropertyRNA rna_Brush_rate;
FloatPropertyRNA rna_Brush_color;
FloatPropertyRNA rna_Brush_secondary_color;
FloatPropertyRNA rna_Brush_weight;
FloatPropertyRNA rna_Brush_strength;
FloatPropertyRNA rna_Brush_plane_offset;
FloatPropertyRNA rna_Brush_plane_trim;
FloatPropertyRNA rna_Brush_height;
FloatPropertyRNA rna_Brush_texture_sample_bias;
FloatPropertyRNA rna_Brush_normal_weight;
FloatPropertyRNA rna_Brush_rake_factor;
FloatPropertyRNA rna_Brush_crease_pinch_factor;
FloatPropertyRNA rna_Brush_auto_smooth_factor;
FloatPropertyRNA rna_Brush_stencil_pos;
FloatPropertyRNA rna_Brush_stencil_dimension;
FloatPropertyRNA rna_Brush_mask_stencil_pos;
FloatPropertyRNA rna_Brush_mask_stencil_dimension;
FloatPropertyRNA rna_Brush_sharp_threshold;
FloatPropertyRNA rna_Brush_fill_threshold;
IntPropertyRNA rna_Brush_blur_kernel_radius;
EnumPropertyRNA rna_Brush_blur_mode;
BoolPropertyRNA rna_Brush_use_airbrush;
BoolPropertyRNA rna_Brush_use_original_normal;
BoolPropertyRNA rna_Brush_use_pressure_strength;
BoolPropertyRNA rna_Brush_use_offset_pressure;
BoolPropertyRNA rna_Brush_use_pressure_size;
BoolPropertyRNA rna_Brush_use_gradient;
BoolPropertyRNA rna_Brush_use_pressure_jitter;
BoolPropertyRNA rna_Brush_use_pressure_spacing;
EnumPropertyRNA rna_Brush_use_pressure_masking;
BoolPropertyRNA rna_Brush_use_inverse_smooth_pressure;
BoolPropertyRNA rna_Brush_use_relative_jitter;
BoolPropertyRNA rna_Brush_use_plane_trim;
BoolPropertyRNA rna_Brush_use_frontface;
BoolPropertyRNA rna_Brush_use_anchor;
BoolPropertyRNA rna_Brush_use_space;
BoolPropertyRNA rna_Brush_use_line;
BoolPropertyRNA rna_Brush_use_curve;
BoolPropertyRNA rna_Brush_use_smooth_stroke;
BoolPropertyRNA rna_Brush_use_persistent;
BoolPropertyRNA rna_Brush_use_accumulate;
BoolPropertyRNA rna_Brush_use_space_attenuation;
BoolPropertyRNA rna_Brush_use_adaptive_space;
BoolPropertyRNA rna_Brush_use_locked_size;
BoolPropertyRNA rna_Brush_use_edge_to_edge;
BoolPropertyRNA rna_Brush_use_restore_mesh;
BoolPropertyRNA rna_Brush_use_alpha;
PointerPropertyRNA rna_Brush_curve;
PointerPropertyRNA rna_Brush_paint_curve;
PointerPropertyRNA rna_Brush_gradient;
EnumPropertyRNA rna_Brush_gradient_stroke_mode;
EnumPropertyRNA rna_Brush_gradient_fill_mode;
BoolPropertyRNA rna_Brush_use_primary_overlay;
BoolPropertyRNA rna_Brush_use_secondary_overlay;
BoolPropertyRNA rna_Brush_use_cursor_overlay;
BoolPropertyRNA rna_Brush_use_cursor_overlay_override;
BoolPropertyRNA rna_Brush_use_primary_overlay_override;
BoolPropertyRNA rna_Brush_use_secondary_overlay_override;
BoolPropertyRNA rna_Brush_use_paint_sculpt;
BoolPropertyRNA rna_Brush_use_paint_vertex;
BoolPropertyRNA rna_Brush_use_paint_weight;
BoolPropertyRNA rna_Brush_use_paint_image;
PointerPropertyRNA rna_Brush_texture_slot;
PointerPropertyRNA rna_Brush_texture;
PointerPropertyRNA rna_Brush_mask_texture_slot;
PointerPropertyRNA rna_Brush_mask_texture;
IntPropertyRNA rna_Brush_texture_overlay_alpha;
IntPropertyRNA rna_Brush_mask_overlay_alpha;
IntPropertyRNA rna_Brush_cursor_overlay_alpha;
FloatPropertyRNA rna_Brush_cursor_color_add;
FloatPropertyRNA rna_Brush_cursor_color_subtract;
BoolPropertyRNA rna_Brush_use_custom_icon;
StringPropertyRNA rna_Brush_icon_filepath;
PointerPropertyRNA rna_Brush_clone_image;
FloatPropertyRNA rna_Brush_clone_alpha;
FloatPropertyRNA rna_Brush_clone_offset;
PointerPropertyRNA rna_Brush_brush_capabilities;
PointerPropertyRNA rna_Brush_sculpt_capabilities;
PointerPropertyRNA rna_Brush_image_paint_capabilities;

extern FunctionRNA rna_ID_copy_func;
extern PointerPropertyRNA rna_ID_copy_id;

extern FunctionRNA rna_ID_user_clear_func;
extern FunctionRNA rna_ID_user_remap_func;
extern PointerPropertyRNA rna_ID_user_remap_new_id;

extern FunctionRNA rna_ID_make_local_func;
extern BoolPropertyRNA rna_ID_make_local_clear_proxy;
extern PointerPropertyRNA rna_ID_make_local_id;

extern FunctionRNA rna_ID_user_of_id_func;
extern PointerPropertyRNA rna_ID_user_of_id_id;
extern IntPropertyRNA rna_ID_user_of_id_count;

extern FunctionRNA rna_ID_animation_data_create_func;
extern PointerPropertyRNA rna_ID_animation_data_create_anim_data;

extern FunctionRNA rna_ID_animation_data_clear_func;
extern FunctionRNA rna_ID_update_tag_func;
extern EnumPropertyRNA rna_ID_update_tag_refresh;



CollectionPropertyRNA rna_BrushCapabilities_rna_properties;
PointerPropertyRNA rna_BrushCapabilities_rna_type;
BoolPropertyRNA rna_BrushCapabilities_has_overlay;
BoolPropertyRNA rna_BrushCapabilities_has_random_texture_angle;
BoolPropertyRNA rna_BrushCapabilities_has_spacing;
BoolPropertyRNA rna_BrushCapabilities_has_smooth_stroke;


CollectionPropertyRNA rna_SculptToolCapabilities_rna_properties;
PointerPropertyRNA rna_SculptToolCapabilities_rna_type;
BoolPropertyRNA rna_SculptToolCapabilities_has_accumulate;
BoolPropertyRNA rna_SculptToolCapabilities_has_auto_smooth;
BoolPropertyRNA rna_SculptToolCapabilities_has_height;
BoolPropertyRNA rna_SculptToolCapabilities_has_jitter;
BoolPropertyRNA rna_SculptToolCapabilities_has_normal_weight;
BoolPropertyRNA rna_SculptToolCapabilities_has_rake_factor;
BoolPropertyRNA rna_SculptToolCapabilities_has_persistence;
BoolPropertyRNA rna_SculptToolCapabilities_has_pinch_factor;
BoolPropertyRNA rna_SculptToolCapabilities_has_plane_offset;
BoolPropertyRNA rna_SculptToolCapabilities_has_random_texture_angle;
BoolPropertyRNA rna_SculptToolCapabilities_has_sculpt_plane;
BoolPropertyRNA rna_SculptToolCapabilities_has_secondary_color;
BoolPropertyRNA rna_SculptToolCapabilities_has_smooth_stroke;
BoolPropertyRNA rna_SculptToolCapabilities_has_space_attenuation;
BoolPropertyRNA rna_SculptToolCapabilities_has_strength_pressure;
BoolPropertyRNA rna_SculptToolCapabilities_has_gravity;


CollectionPropertyRNA rna_ImapaintToolCapabilities_rna_properties;
PointerPropertyRNA rna_ImapaintToolCapabilities_rna_type;
BoolPropertyRNA rna_ImapaintToolCapabilities_has_accumulate;
BoolPropertyRNA rna_ImapaintToolCapabilities_has_space_attenuation;
BoolPropertyRNA rna_ImapaintToolCapabilities_has_radius;


extern CollectionPropertyRNA rna_TextureSlot_rna_properties;
extern PointerPropertyRNA rna_TextureSlot_rna_type;
extern PointerPropertyRNA rna_TextureSlot_texture;
extern StringPropertyRNA rna_TextureSlot_name;
extern FloatPropertyRNA rna_TextureSlot_offset;
extern FloatPropertyRNA rna_TextureSlot_scale;
extern FloatPropertyRNA rna_TextureSlot_color;
extern EnumPropertyRNA rna_TextureSlot_blend_type;
extern BoolPropertyRNA rna_TextureSlot_use_stencil;
extern BoolPropertyRNA rna_TextureSlot_invert;
extern BoolPropertyRNA rna_TextureSlot_use_rgb_to_intensity;
extern FloatPropertyRNA rna_TextureSlot_default_value;
extern EnumPropertyRNA rna_TextureSlot_output_node;

FloatPropertyRNA rna_BrushTextureSlot_angle;
EnumPropertyRNA rna_BrushTextureSlot_map_mode;
EnumPropertyRNA rna_BrushTextureSlot_tex_paint_map_mode;
EnumPropertyRNA rna_BrushTextureSlot_mask_map_mode;
BoolPropertyRNA rna_BrushTextureSlot_use_rake;
BoolPropertyRNA rna_BrushTextureSlot_use_random;
FloatPropertyRNA rna_BrushTextureSlot_random_angle;
BoolPropertyRNA rna_BrushTextureSlot_has_texture_angle_source;
BoolPropertyRNA rna_BrushTextureSlot_has_random_texture_angle;
BoolPropertyRNA rna_BrushTextureSlot_has_texture_angle;


extern CollectionPropertyRNA rna_PropertyGroup_rna_properties;
extern PointerPropertyRNA rna_PropertyGroup_rna_type;
extern StringPropertyRNA rna_PropertyGroup_name;

FloatPropertyRNA rna_OperatorStrokeElement_location;
FloatPropertyRNA rna_OperatorStrokeElement_mouse;
FloatPropertyRNA rna_OperatorStrokeElement_pressure;
FloatPropertyRNA rna_OperatorStrokeElement_size;
BoolPropertyRNA rna_OperatorStrokeElement_pen_flip;
FloatPropertyRNA rna_OperatorStrokeElement_time;
BoolPropertyRNA rna_OperatorStrokeElement_is_start;

int Brush_blend_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->blend);
}

void Brush_blend_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->blend = value;
}

int Brush_sculpt_tool_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->sculpt_tool);
}

void Brush_sculpt_tool_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->sculpt_tool = value;
}

int Brush_vertex_tool_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->vertexpaint_tool);
}

void Brush_vertex_tool_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->vertexpaint_tool = value;
}

int Brush_image_tool_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->imagepaint_tool);
}

void Brush_image_tool_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->imagepaint_tool = value;
}

int Brush_direction_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return ((data->flag) & 512);
}

void Brush_direction_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->flag &= ~512;
	data->flag |= value;
}

int Brush_stroke_method_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return ((data->flag) & -1602222847);
}

void Brush_stroke_method_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->flag &= ~-1602222847;
	data->flag |= value;
}

int Brush_sculpt_plane_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->sculpt_plane);
}

void Brush_sculpt_plane_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->sculpt_plane = value;
}

int Brush_mask_tool_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->mask_tool);
}

void Brush_mask_tool_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->mask_tool = value;
}

int Brush_size_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->size);
}

void Brush_size_set(PointerRNA *ptr, int value)
{
	rna_Brush_set_size(ptr, value);
}

float Brush_unprojected_radius_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->unprojected_radius);
}

void Brush_unprojected_radius_set(PointerRNA *ptr, float value)
{
	rna_Brush_set_unprojected_radius(ptr, value);
}

float Brush_jitter_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->jitter);
}

void Brush_jitter_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->jitter = CLAMPIS(value, 0.0f, 1000.0f);
}

int Brush_jitter_absolute_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->jitter_absolute);
}

void Brush_jitter_absolute_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->jitter_absolute = CLAMPIS(value, 0, 1000000);
}

int Brush_spacing_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->spacing);
}

void Brush_spacing_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->spacing = CLAMPIS(value, 1, 1000);
}

int Brush_grad_spacing_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->gradient_spacing);
}

void Brush_grad_spacing_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->gradient_spacing = CLAMPIS(value, 1, 10000);
}

int Brush_smooth_stroke_radius_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->smooth_stroke_radius);
}

void Brush_smooth_stroke_radius_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->smooth_stroke_radius = CLAMPIS(value, 10, 200);
}

float Brush_smooth_stroke_factor_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->smooth_stroke_factor);
}

void Brush_smooth_stroke_factor_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->smooth_stroke_factor = CLAMPIS(value, 0.5000000000f, 0.9900000095f);
}

float Brush_rate_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->rate);
}

void Brush_rate_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->rate = CLAMPIS(value, 0.0001000000f, 10000.0f);
}

void Brush_color_get(PointerRNA *ptr, float values[3])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 3; i++) {
		values[i] = (float)(((float *)data->rgb)[i]);
	}
}

void Brush_color_set(PointerRNA *ptr, const float values[3])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 3; i++) {
		((float *)data->rgb)[i] = CLAMPIS(values[i], 0.0f, 1.0f);
	}
}

void Brush_secondary_color_get(PointerRNA *ptr, float values[3])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 3; i++) {
		values[i] = (float)(((float *)data->secondary_rgb)[i]);
	}
}

void Brush_secondary_color_set(PointerRNA *ptr, const float values[3])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 3; i++) {
		((float *)data->secondary_rgb)[i] = CLAMPIS(values[i], 0.0f, 1.0f);
	}
}

float Brush_weight_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->weight);
}

void Brush_weight_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->weight = CLAMPIS(value, 0.0f, 1.0f);
}

float Brush_strength_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->alpha);
}

void Brush_strength_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->alpha = CLAMPIS(value, 0.0f, 10.0f);
}

float Brush_plane_offset_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->plane_offset);
}

void Brush_plane_offset_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->plane_offset = CLAMPIS(value, -2.0f, 2.0f);
}

float Brush_plane_trim_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->plane_trim);
}

void Brush_plane_trim_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->plane_trim = CLAMPIS(value, 0.0f, 1.0f);
}

float Brush_height_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->height);
}

void Brush_height_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->height = CLAMPIS(value, 0.0f, 1.0f);
}

float Brush_texture_sample_bias_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->texture_sample_bias);
}

void Brush_texture_sample_bias_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->texture_sample_bias = CLAMPIS(value, -1.0f, 1.0f);
}

float Brush_normal_weight_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->normal_weight);
}

void Brush_normal_weight_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->normal_weight = CLAMPIS(value, 0.0f, 1.0f);
}

float Brush_rake_factor_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->rake_factor);
}

void Brush_rake_factor_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->rake_factor = CLAMPIS(value, 0.0f, 10.0f);
}

float Brush_crease_pinch_factor_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->crease_pinch_factor);
}

void Brush_crease_pinch_factor_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->crease_pinch_factor = CLAMPIS(value, 0.0f, 1.0f);
}

float Brush_auto_smooth_factor_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->autosmooth_factor);
}

void Brush_auto_smooth_factor_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->autosmooth_factor = CLAMPIS(value, 0.0f, 1.0f);
}

void Brush_stencil_pos_get(PointerRNA *ptr, float values[2])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 2; i++) {
		values[i] = (float)(((float *)data->stencil_pos)[i]);
	}
}

void Brush_stencil_pos_set(PointerRNA *ptr, const float values[2])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 2; i++) {
		((float *)data->stencil_pos)[i] = values[i];
	}
}

void Brush_stencil_dimension_get(PointerRNA *ptr, float values[2])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 2; i++) {
		values[i] = (float)(((float *)data->stencil_dimension)[i]);
	}
}

void Brush_stencil_dimension_set(PointerRNA *ptr, const float values[2])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 2; i++) {
		((float *)data->stencil_dimension)[i] = values[i];
	}
}

void Brush_mask_stencil_pos_get(PointerRNA *ptr, float values[2])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 2; i++) {
		values[i] = (float)(((float *)data->mask_stencil_pos)[i]);
	}
}

void Brush_mask_stencil_pos_set(PointerRNA *ptr, const float values[2])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 2; i++) {
		((float *)data->mask_stencil_pos)[i] = values[i];
	}
}

void Brush_mask_stencil_dimension_get(PointerRNA *ptr, float values[2])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 2; i++) {
		values[i] = (float)(((float *)data->mask_stencil_dimension)[i]);
	}
}

void Brush_mask_stencil_dimension_set(PointerRNA *ptr, const float values[2])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 2; i++) {
		((float *)data->mask_stencil_dimension)[i] = values[i];
	}
}

float Brush_sharp_threshold_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->sharp_threshold);
}

void Brush_sharp_threshold_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->sharp_threshold = CLAMPIS(value, 0.0f, 100.0f);
}

float Brush_fill_threshold_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->fill_threshold);
}

void Brush_fill_threshold_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->fill_threshold = CLAMPIS(value, 0.0f, 100.0f);
}

int Brush_blur_kernel_radius_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->blur_kernel_radius);
}

void Brush_blur_kernel_radius_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->blur_kernel_radius = CLAMPIS(value, 1, 10000);
}

int Brush_blur_mode_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->blur_mode);
}

void Brush_blur_mode_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->blur_mode = value;
}

int Brush_use_airbrush_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 1) != 0);
}

void Brush_use_airbrush_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 1;
	else data->flag &= ~1;
}

int Brush_use_original_normal_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 32768) != 0);
}

void Brush_use_original_normal_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 32768;
	else data->flag &= ~32768;
}

int Brush_use_pressure_strength_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 4) != 0);
}

void Brush_use_pressure_strength_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 4;
	else data->flag &= ~4;
}

int Brush_use_offset_pressure_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 65536) != 0);
}

void Brush_use_offset_pressure_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 65536;
	else data->flag &= ~65536;
}

int Brush_use_pressure_size_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 8) != 0);
}

void Brush_use_pressure_size_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 8;
	else data->flag &= ~8;
}

int Brush_use_gradient_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 2097152) != 0);
}

void Brush_use_gradient_set(PointerRNA *ptr, int value)
{
	rna_Brush_use_gradient_set(ptr, value);
}

int Brush_use_pressure_jitter_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 16) != 0);
}

void Brush_use_pressure_jitter_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 16;
	else data->flag &= ~16;
}

int Brush_use_pressure_spacing_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 32) != 0);
}

void Brush_use_pressure_spacing_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 32;
	else data->flag &= ~32;
}

int Brush_use_pressure_masking_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->mask_pressure);
}

void Brush_use_pressure_masking_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->mask_pressure = value;
}

int Brush_use_inverse_smooth_pressure_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 16777216) != 0);
}

void Brush_use_inverse_smooth_pressure_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 16777216;
	else data->flag &= ~16777216;
}

int Brush_use_relative_jitter_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return !(((data->flag) & 1073741824) != 0);
}

void Brush_use_relative_jitter_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (!value) data->flag |= 1073741824;
	else data->flag &= ~1073741824;
}

int Brush_use_plane_trim_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 67108864) != 0);
}

void Brush_use_plane_trim_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 67108864;
	else data->flag &= ~67108864;
}

int Brush_use_frontface_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 134217728) != 0);
}

void Brush_use_frontface_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 134217728;
	else data->flag &= ~134217728;
}

int Brush_use_anchor_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 256) != 0);
}

void Brush_use_anchor_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 256;
	else data->flag &= ~256;
}

int Brush_use_space_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 1024) != 0);
}

void Brush_use_space_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 1024;
	else data->flag &= ~1024;
}

int Brush_use_line_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 536870912) != 0);
}

void Brush_use_line_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 536870912;
	else data->flag &= ~536870912;
}

int Brush_use_curve_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & INT_MIN) != 0);
}

void Brush_use_curve_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= INT_MIN;
	else data->flag &= ~INT_MIN;
}

int Brush_use_smooth_stroke_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 2048) != 0);
}

void Brush_use_smooth_stroke_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 2048;
	else data->flag &= ~2048;
}

int Brush_use_persistent_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 4096) != 0);
}

void Brush_use_persistent_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 4096;
	else data->flag &= ~4096;
}

int Brush_use_accumulate_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 8192) != 0);
}

void Brush_use_accumulate_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 8192;
	else data->flag &= ~8192;
}

int Brush_use_space_attenuation_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 262144) != 0);
}

void Brush_use_space_attenuation_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 262144;
	else data->flag &= ~262144;
}

int Brush_use_adaptive_space_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 524288) != 0);
}

void Brush_use_adaptive_space_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 524288;
	else data->flag &= ~524288;
}

int Brush_use_locked_size_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 1048576) != 0);
}

void Brush_use_locked_size_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 1048576;
	else data->flag &= ~1048576;
}

int Brush_use_edge_to_edge_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 4194304) != 0);
}

void Brush_use_edge_to_edge_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 4194304;
	else data->flag &= ~4194304;
}

int Brush_use_restore_mesh_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 8388608) != 0);
}

void Brush_use_restore_mesh_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 8388608;
	else data->flag &= ~8388608;
}

int Brush_use_alpha_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return !(((data->flag) & 16384) != 0);
}

void Brush_use_alpha_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (!value) data->flag |= 16384;
	else data->flag &= ~16384;
}

PointerRNA Brush_curve_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return rna_pointer_inherit_refine(ptr, &RNA_CurveMapping, data->curve);
}

PointerRNA Brush_paint_curve_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return rna_pointer_inherit_refine(ptr, &RNA_PaintCurve, data->paint_curve);
}

void Brush_paint_curve_set(PointerRNA *ptr, PointerRNA value)
{
	Brush *data = (Brush *)(ptr->data);

	if (data->paint_curve)
		id_us_min((ID *)data->paint_curve);
	if (value.data)
		id_us_plus((ID *)value.data);

	data->paint_curve = value.data;
}

PointerRNA Brush_gradient_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return rna_pointer_inherit_refine(ptr, &RNA_ColorRamp, data->gradient);
}

int Brush_gradient_stroke_mode_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->gradient_stroke_mode);
}

void Brush_gradient_stroke_mode_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->gradient_stroke_mode = value;
}

int Brush_gradient_fill_mode_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->gradient_fill_mode);
}

void Brush_gradient_fill_mode_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->gradient_fill_mode = value;
}

int Brush_use_primary_overlay_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->overlay_flags) & 2) != 0);
}

void Brush_use_primary_overlay_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->overlay_flags |= 2;
	else data->overlay_flags &= ~2;
}

int Brush_use_secondary_overlay_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->overlay_flags) & 4) != 0);
}

void Brush_use_secondary_overlay_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->overlay_flags |= 4;
	else data->overlay_flags &= ~4;
}

int Brush_use_cursor_overlay_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->overlay_flags) & 1) != 0);
}

void Brush_use_cursor_overlay_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->overlay_flags |= 1;
	else data->overlay_flags &= ~1;
}

int Brush_use_cursor_overlay_override_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->overlay_flags) & 8) != 0);
}

void Brush_use_cursor_overlay_override_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->overlay_flags |= 8;
	else data->overlay_flags &= ~8;
}

int Brush_use_primary_overlay_override_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->overlay_flags) & 16) != 0);
}

void Brush_use_primary_overlay_override_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->overlay_flags |= 16;
	else data->overlay_flags &= ~16;
}

int Brush_use_secondary_overlay_override_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->overlay_flags) & 32) != 0);
}

void Brush_use_secondary_overlay_override_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->overlay_flags |= 32;
	else data->overlay_flags &= ~32;
}

int Brush_use_paint_sculpt_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->ob_mode) & 2) != 0);
}

void Brush_use_paint_sculpt_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->ob_mode |= 2;
	else data->ob_mode &= ~2;
}

int Brush_use_paint_vertex_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->ob_mode) & 4) != 0);
}

void Brush_use_paint_vertex_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->ob_mode |= 4;
	else data->ob_mode &= ~4;
}

int Brush_use_paint_weight_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->ob_mode) & 8) != 0);
}

void Brush_use_paint_weight_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->ob_mode |= 8;
	else data->ob_mode &= ~8;
}

int Brush_use_paint_image_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->ob_mode) & 16) != 0);
}

void Brush_use_paint_image_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->ob_mode |= 16;
	else data->ob_mode &= ~16;
}

PointerRNA Brush_texture_slot_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return rna_pointer_inherit_refine(ptr, &RNA_BrushTextureSlot, &data->mtex);
}

PointerRNA Brush_texture_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return rna_pointer_inherit_refine(ptr, &RNA_Texture, data->mtex.tex);
}

void Brush_texture_set(PointerRNA *ptr, PointerRNA value)
{
	Brush *data = (Brush *)(ptr->data);

	if (data->mtex.tex)
		id_us_min((ID *)data->mtex.tex);
	if (value.data)
		id_us_plus((ID *)value.data);

	data->mtex.tex = value.data;
}

PointerRNA Brush_mask_texture_slot_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return rna_pointer_inherit_refine(ptr, &RNA_BrushTextureSlot, &data->mask_mtex);
}

PointerRNA Brush_mask_texture_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return rna_pointer_inherit_refine(ptr, &RNA_Texture, data->mask_mtex.tex);
}

void Brush_mask_texture_set(PointerRNA *ptr, PointerRNA value)
{
	Brush *data = (Brush *)(ptr->data);

	if (data->mask_mtex.tex)
		id_us_min((ID *)data->mask_mtex.tex);
	if (value.data)
		id_us_plus((ID *)value.data);

	data->mask_mtex.tex = value.data;
}

int Brush_texture_overlay_alpha_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->texture_overlay_alpha);
}

void Brush_texture_overlay_alpha_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->texture_overlay_alpha = CLAMPIS(value, 0, 100);
}

int Brush_mask_overlay_alpha_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->mask_overlay_alpha);
}

void Brush_mask_overlay_alpha_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->mask_overlay_alpha = CLAMPIS(value, 0, 100);
}

int Brush_cursor_overlay_alpha_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (int)(data->cursor_overlay_alpha);
}

void Brush_cursor_overlay_alpha_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	data->cursor_overlay_alpha = CLAMPIS(value, 0, 100);
}

void Brush_cursor_color_add_get(PointerRNA *ptr, float values[3])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 3; i++) {
		values[i] = (float)(((float *)data->add_col)[i]);
	}
}

void Brush_cursor_color_add_set(PointerRNA *ptr, const float values[3])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 3; i++) {
		((float *)data->add_col)[i] = CLAMPIS(values[i], 0.0f, FLT_MAX);
	}
}

void Brush_cursor_color_subtract_get(PointerRNA *ptr, float values[3])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 3; i++) {
		values[i] = (float)(((float *)data->sub_col)[i]);
	}
}

void Brush_cursor_color_subtract_set(PointerRNA *ptr, const float values[3])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 3; i++) {
		((float *)data->sub_col)[i] = CLAMPIS(values[i], 0.0f, FLT_MAX);
	}
}

int Brush_use_custom_icon_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (((data->flag) & 268435456) != 0);
}

void Brush_use_custom_icon_set(PointerRNA *ptr, int value)
{
	Brush *data = (Brush *)(ptr->data);
	if (value) data->flag |= 268435456;
	else data->flag &= ~268435456;
}

void Brush_icon_filepath_get(PointerRNA *ptr, char *value)
{
	Brush *data = (Brush *)(ptr->data);
	BLI_strncpy(value, data->icon_filepath, 1024);
}

int Brush_icon_filepath_length(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return strlen(data->icon_filepath);
}

void Brush_icon_filepath_set(PointerRNA *ptr, const char *value)
{
	Brush *data = (Brush *)(ptr->data);
	BLI_strncpy(data->icon_filepath, value, 1024);
}

PointerRNA Brush_clone_image_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return rna_pointer_inherit_refine(ptr, &RNA_Image, data->clone.image);
}

void Brush_clone_image_set(PointerRNA *ptr, PointerRNA value)
{
	Brush *data = (Brush *)(ptr->data);

	if (data->clone.image)
		id_us_min((ID *)data->clone.image);
	if (value.data)
		id_us_plus((ID *)value.data);

	data->clone.image = value.data;
}

float Brush_clone_alpha_get(PointerRNA *ptr)
{
	Brush *data = (Brush *)(ptr->data);
	return (float)(data->clone.alpha);
}

void Brush_clone_alpha_set(PointerRNA *ptr, float value)
{
	Brush *data = (Brush *)(ptr->data);
	data->clone.alpha = CLAMPIS(value, 0.0f, 1.0f);
}

void Brush_clone_offset_get(PointerRNA *ptr, float values[2])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 2; i++) {
		values[i] = (float)(((float *)data->clone.offset)[i]);
	}
}

void Brush_clone_offset_set(PointerRNA *ptr, const float values[2])
{
	Brush *data = (Brush *)(ptr->data);
	unsigned int i;

	for (i = 0; i < 2; i++) {
		((float *)data->clone.offset)[i] = values[i];
	}
}

PointerRNA Brush_brush_capabilities_get(PointerRNA *ptr)
{
	return rna_Brush_capabilities_get(ptr);
}

PointerRNA Brush_sculpt_capabilities_get(PointerRNA *ptr)
{
	return rna_Sculpt_tool_capabilities_get(ptr);
}

PointerRNA Brush_image_paint_capabilities_get(PointerRNA *ptr)
{
	return rna_Imapaint_tool_capabilities_get(ptr);
}

static PointerRNA BrushCapabilities_rna_properties_get(CollectionPropertyIterator *iter)
{
	return rna_builtin_properties_get(iter);
}

void BrushCapabilities_rna_properties_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{

	memset(iter, 0, sizeof(*iter));
	iter->parent = *ptr;
	iter->prop = (PropertyRNA *)&rna_BrushCapabilities_rna_properties;

	rna_builtin_properties_begin(iter, ptr);

	if (iter->valid)
		iter->ptr = BrushCapabilities_rna_properties_get(iter);
}

void BrushCapabilities_rna_properties_next(CollectionPropertyIterator *iter)
{
	rna_builtin_properties_next(iter);

	if (iter->valid)
		iter->ptr = BrushCapabilities_rna_properties_get(iter);
}

void BrushCapabilities_rna_properties_end(CollectionPropertyIterator *iter)
{
	rna_iterator_listbase_end(iter);
}

int BrushCapabilities_rna_properties_lookup_string(PointerRNA *ptr, const char *key, PointerRNA *r_ptr)
{
	return rna_builtin_properties_lookup_string(ptr, key, r_ptr);
}

PointerRNA BrushCapabilities_rna_type_get(PointerRNA *ptr)
{
	return rna_builtin_type_get(ptr);
}

int BrushCapabilities_has_overlay_get(PointerRNA *ptr)
{
	return rna_BrushCapabilities_has_overlay_get(ptr);
}

int BrushCapabilities_has_random_texture_angle_get(PointerRNA *ptr)
{
	return rna_BrushCapabilities_has_random_texture_angle_get(ptr);
}

int BrushCapabilities_has_spacing_get(PointerRNA *ptr)
{
	return rna_BrushCapabilities_has_spacing_get(ptr);
}

int BrushCapabilities_has_smooth_stroke_get(PointerRNA *ptr)
{
	return rna_BrushCapabilities_has_smooth_stroke_get(ptr);
}

static PointerRNA SculptToolCapabilities_rna_properties_get(CollectionPropertyIterator *iter)
{
	return rna_builtin_properties_get(iter);
}

void SculptToolCapabilities_rna_properties_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{

	memset(iter, 0, sizeof(*iter));
	iter->parent = *ptr;
	iter->prop = (PropertyRNA *)&rna_SculptToolCapabilities_rna_properties;

	rna_builtin_properties_begin(iter, ptr);

	if (iter->valid)
		iter->ptr = SculptToolCapabilities_rna_properties_get(iter);
}

void SculptToolCapabilities_rna_properties_next(CollectionPropertyIterator *iter)
{
	rna_builtin_properties_next(iter);

	if (iter->valid)
		iter->ptr = SculptToolCapabilities_rna_properties_get(iter);
}

void SculptToolCapabilities_rna_properties_end(CollectionPropertyIterator *iter)
{
	rna_iterator_listbase_end(iter);
}

int SculptToolCapabilities_rna_properties_lookup_string(PointerRNA *ptr, const char *key, PointerRNA *r_ptr)
{
	return rna_builtin_properties_lookup_string(ptr, key, r_ptr);
}

PointerRNA SculptToolCapabilities_rna_type_get(PointerRNA *ptr)
{
	return rna_builtin_type_get(ptr);
}

int SculptToolCapabilities_has_accumulate_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_accumulate_get(ptr);
}

int SculptToolCapabilities_has_auto_smooth_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_auto_smooth_get(ptr);
}

int SculptToolCapabilities_has_height_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_height_get(ptr);
}

int SculptToolCapabilities_has_jitter_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_jitter_get(ptr);
}

int SculptToolCapabilities_has_normal_weight_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_normal_weight_get(ptr);
}

int SculptToolCapabilities_has_rake_factor_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_rake_factor_get(ptr);
}

int SculptToolCapabilities_has_persistence_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_persistence_get(ptr);
}

int SculptToolCapabilities_has_pinch_factor_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_pinch_factor_get(ptr);
}

int SculptToolCapabilities_has_plane_offset_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_plane_offset_get(ptr);
}

int SculptToolCapabilities_has_random_texture_angle_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_random_texture_angle_get(ptr);
}

int SculptToolCapabilities_has_sculpt_plane_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_sculpt_plane_get(ptr);
}

int SculptToolCapabilities_has_secondary_color_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_secondary_color_get(ptr);
}

int SculptToolCapabilities_has_smooth_stroke_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_smooth_stroke_get(ptr);
}

int SculptToolCapabilities_has_space_attenuation_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_space_attenuation_get(ptr);
}

int SculptToolCapabilities_has_strength_pressure_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_strength_pressure_get(ptr);
}

int SculptToolCapabilities_has_gravity_get(PointerRNA *ptr)
{
	return rna_SculptToolCapabilities_has_gravity_get(ptr);
}

static PointerRNA ImapaintToolCapabilities_rna_properties_get(CollectionPropertyIterator *iter)
{
	return rna_builtin_properties_get(iter);
}

void ImapaintToolCapabilities_rna_properties_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{

	memset(iter, 0, sizeof(*iter));
	iter->parent = *ptr;
	iter->prop = (PropertyRNA *)&rna_ImapaintToolCapabilities_rna_properties;

	rna_builtin_properties_begin(iter, ptr);

	if (iter->valid)
		iter->ptr = ImapaintToolCapabilities_rna_properties_get(iter);
}

void ImapaintToolCapabilities_rna_properties_next(CollectionPropertyIterator *iter)
{
	rna_builtin_properties_next(iter);

	if (iter->valid)
		iter->ptr = ImapaintToolCapabilities_rna_properties_get(iter);
}

void ImapaintToolCapabilities_rna_properties_end(CollectionPropertyIterator *iter)
{
	rna_iterator_listbase_end(iter);
}

int ImapaintToolCapabilities_rna_properties_lookup_string(PointerRNA *ptr, const char *key, PointerRNA *r_ptr)
{
	return rna_builtin_properties_lookup_string(ptr, key, r_ptr);
}

PointerRNA ImapaintToolCapabilities_rna_type_get(PointerRNA *ptr)
{
	return rna_builtin_type_get(ptr);
}

int ImapaintToolCapabilities_has_accumulate_get(PointerRNA *ptr)
{
	return rna_ImapaintToolCapabilities_has_accumulate_get(ptr);
}

int ImapaintToolCapabilities_has_space_attenuation_get(PointerRNA *ptr)
{
	return rna_ImapaintToolCapabilities_has_space_attenuation_get(ptr);
}

int ImapaintToolCapabilities_has_radius_get(PointerRNA *ptr)
{
	return rna_ImapaintToolCapabilities_has_radius_get(ptr);
}

float BrushTextureSlot_angle_get(PointerRNA *ptr)
{
	MTex *data = (MTex *)(ptr->data);
	return (float)(data->rot);
}

void BrushTextureSlot_angle_set(PointerRNA *ptr, float value)
{
	MTex *data = (MTex *)(ptr->data);
	data->rot = CLAMPIS(value, 0.0f, 6.2831854820f);
}

int BrushTextureSlot_map_mode_get(PointerRNA *ptr)
{
	MTex *data = (MTex *)(ptr->data);
	return (int)(data->brush_map_mode);
}

void BrushTextureSlot_map_mode_set(PointerRNA *ptr, int value)
{
	MTex *data = (MTex *)(ptr->data);
	data->brush_map_mode = value;
}

int BrushTextureSlot_tex_paint_map_mode_get(PointerRNA *ptr)
{
	MTex *data = (MTex *)(ptr->data);
	return (int)(data->brush_map_mode);
}

void BrushTextureSlot_tex_paint_map_mode_set(PointerRNA *ptr, int value)
{
	MTex *data = (MTex *)(ptr->data);
	data->brush_map_mode = value;
}

int BrushTextureSlot_mask_map_mode_get(PointerRNA *ptr)
{
	MTex *data = (MTex *)(ptr->data);
	return (int)(data->brush_map_mode);
}

void BrushTextureSlot_mask_map_mode_set(PointerRNA *ptr, int value)
{
	MTex *data = (MTex *)(ptr->data);
	data->brush_map_mode = value;
}

int BrushTextureSlot_use_rake_get(PointerRNA *ptr)
{
	MTex *data = (MTex *)(ptr->data);
	return (((data->brush_angle_mode) & 2) != 0);
}

void BrushTextureSlot_use_rake_set(PointerRNA *ptr, int value)
{
	MTex *data = (MTex *)(ptr->data);
	if (value) data->brush_angle_mode |= 2;
	else data->brush_angle_mode &= ~2;
}

int BrushTextureSlot_use_random_get(PointerRNA *ptr)
{
	MTex *data = (MTex *)(ptr->data);
	return (((data->brush_angle_mode) & 1) != 0);
}

void BrushTextureSlot_use_random_set(PointerRNA *ptr, int value)
{
	MTex *data = (MTex *)(ptr->data);
	if (value) data->brush_angle_mode |= 1;
	else data->brush_angle_mode &= ~1;
}

float BrushTextureSlot_random_angle_get(PointerRNA *ptr)
{
	MTex *data = (MTex *)(ptr->data);
	return (float)(data->random_angle);
}

void BrushTextureSlot_random_angle_set(PointerRNA *ptr, float value)
{
	MTex *data = (MTex *)(ptr->data);
	data->random_angle = CLAMPIS(value, 0.0f, 6.2831854820f);
}

int BrushTextureSlot_has_texture_angle_source_get(PointerRNA *ptr)
{
	return rna_TextureCapabilities_has_texture_angle_source_get(ptr);
}

int BrushTextureSlot_has_random_texture_angle_get(PointerRNA *ptr)
{
	return rna_TextureCapabilities_has_random_texture_angle_get(ptr);
}

int BrushTextureSlot_has_texture_angle_get(PointerRNA *ptr)
{
	return rna_TextureCapabilities_has_texture_angle_get(ptr);
}







/* Brush */
static EnumPropertyItem rna_Brush_blend_items[25] = {
	{0, "MIX", 0, "Mix", "Use mix blending mode while painting"},
	{1, "ADD", 0, "Add", "Use add blending mode while painting"},
	{2, "SUB", 0, "Subtract", "Use subtract blending mode while painting"},
	{3, "MUL", 0, "Multiply", "Use multiply blending mode while painting"},
	{4, "LIGHTEN", 0, "Lighten", "Use lighten blending mode while painting"},
	{5, "DARKEN", 0, "Darken", "Use darken blending mode while painting"},
	{6, "ERASE_ALPHA", 0, "Erase Alpha", "Erase alpha while painting"},
	{7, "ADD_ALPHA", 0, "Add Alpha", "Add alpha while painting"},
	{8, "OVERLAY", 0, "Overlay", "Use overlay blending mode while painting"},
	{9, "HARDLIGHT", 0, "Hard light", "Use hard light blending mode while painting"},
	{10, "COLORBURN", 0, "Color burn", "Use color burn blending mode while painting"},
	{11, "LINEARBURN", 0, "Linear burn", "Use linear burn blending mode while painting"},
	{12, "COLORDODGE", 0, "Color dodge", "Use color dodge blending mode while painting"},
	{13, "SCREEN", 0, "Screen", "Use screen blending mode while painting"},
	{14, "SOFTLIGHT", 0, "Soft light", "Use softlight blending mode while painting"},
	{15, "PINLIGHT", 0, "Pin light", "Use pinlight blending mode while painting"},
	{16, "VIVIDLIGHT", 0, "Vivid light", "Use vividlight blending mode while painting"},
	{17, "LINEARLIGHT", 0, "Linear light", "Use linearlight blending mode while painting"},
	{18, "DIFFERENCE", 0, "Difference", "Use difference blending mode while painting"},
	{19, "EXCLUSION", 0, "Exclusion", "Use exclusion blending mode while painting"},
	{20, "HUE", 0, "Hue", "Use hue blending mode while painting"},
	{21, "SATURATION", 0, "Saturation", "Use saturation blending mode while painting"},
	{22, "LUMINOSITY", 0, "Luminosity", "Use luminosity blending mode while painting"},
	{23, "COLOR", 0, "Color", "Use color blending mode while painting"},
	{0, NULL, 0, NULL, NULL}
};

EnumPropertyRNA rna_Brush_blend = {
	{(PropertyRNA *)&rna_Brush_sculpt_tool, NULL,
	-1, "blend", 3, 0, 0, "Blending mode",
	"Brush blending mode",
	0, "*",
	PROP_ENUM, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_blend_get, Brush_blend_set, NULL, NULL, NULL, NULL, rna_Brush_blend_items, 24, 0
};

static EnumPropertyItem rna_Brush_sculpt_tool_items[20] = {
	{17, "BLOB", 781, "Blob", ""},
	{8, "CLAY", 783, "Clay", ""},
	{18, "CLAY_STRIPS", 784, "Clay Strips", ""},
	{16, "CREASE", 786, "Crease", ""},
	{1, "DRAW", 800, "Draw", ""},
	{9, "FILL", 788, "Fill", ""},
	{7, "FLATTEN", 789, "Flatten", ""},
	{5, "GRAB", 790, "Grab", ""},
	{4, "INFLATE", 791, "Inflate", ""},
	{6, "LAYER", 792, "Layer", ""},
	{19, "MASK", 794, "Mask", ""},
	{11, "NUDGE", 797, "Nudge", ""},
	{3, "PINCH", 798, "Pinch", ""},
	{14, "ROTATE", 810, "Rotate", ""},
	{10, "SCRAPE", 799, "Scrape", ""},
	{15, "SIMPLIFY", 805, "Simplify", ""},
	{2, "SMOOTH", 802, "Smooth", ""},
	{13, "SNAKE_HOOK", 803, "Snake Hook", ""},
	{12, "THUMB", 809, "Thumb", ""},
	{0, NULL, 0, NULL, NULL}
};

EnumPropertyRNA rna_Brush_sculpt_tool = {
	{(PropertyRNA *)&rna_Brush_vertex_tool, (PropertyRNA *)&rna_Brush_blend,
	-1, "sculpt_tool", 3, 0, 0, "Sculpt Tool",
	"",
	0, "*",
	PROP_ENUM, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_sculpt_tool_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_sculpt_tool_get, Brush_sculpt_tool_set, NULL, NULL, NULL, NULL, rna_Brush_sculpt_tool_items, 19, 17
};

static EnumPropertyItem rna_Brush_vertex_tool_items[8] = {
	{0, "MIX", 795, "Mix", "Use mix blending mode while painting"},
	{1, "ADD", 780, "Add", "Use add blending mode while painting"},
	{2, "SUB", 805, "Subtract", "Use subtract blending mode while painting"},
	{3, "MUL", 796, "Multiply", "Use multiply blending mode while painting"},
	{4, "BLUR", 782, "Blur", "Blur the color with surrounding values"},
	{5, "LIGHTEN", 793, "Lighten", "Use lighten blending mode while painting"},
	{6, "DARKEN", 787, "Darken", "Use darken blending mode while painting"},
	{0, NULL, 0, NULL, NULL}
};

EnumPropertyRNA rna_Brush_vertex_tool = {
	{(PropertyRNA *)&rna_Brush_image_tool, (PropertyRNA *)&rna_Brush_sculpt_tool,
	-1, "vertex_tool", 3, 0, 0, "Blending mode",
	"Brush blending mode",
	0, "*",
	PROP_ENUM, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_vertex_tool_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_vertex_tool_get, Brush_vertex_tool_set, NULL, NULL, NULL, NULL, rna_Brush_vertex_tool_items, 7, 0
};

static EnumPropertyItem rna_Brush_image_tool_items[7] = {
	{0, "DRAW", 806, "Draw", ""},
	{1, "SOFTEN", 804, "Soften", ""},
	{2, "SMEAR", 801, "Smear", ""},
	{3, "CLONE", 785, "Clone", ""},
	{4, "FILL", 807, "Fill", ""},
	{5, "MASK", 808, "Mask", ""},
	{0, NULL, 0, NULL, NULL}
};

EnumPropertyRNA rna_Brush_image_tool = {
	{(PropertyRNA *)&rna_Brush_direction, (PropertyRNA *)&rna_Brush_vertex_tool,
	-1, "image_tool", 3, 0, 0, "Image Paint Tool",
	"",
	0, "*",
	PROP_ENUM, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_imagepaint_tool_update, 251920384, NULL, NULL,
	0, -1, NULL},
	Brush_image_tool_get, Brush_image_tool_set, NULL, NULL, NULL, NULL, rna_Brush_image_tool_items, 6, 0
};

static EnumPropertyItem rna_Brush_direction_items[3] = {
	{0, "ADD", 0, "Add", "Add effect of brush"},
	{512, "SUBTRACT", 0, "Subtract", "Subtract effect of brush"},
	{0, NULL, 0, NULL, NULL}
};

EnumPropertyRNA rna_Brush_direction = {
	{(PropertyRNA *)&rna_Brush_stroke_method, (PropertyRNA *)&rna_Brush_image_tool,
	-1, "direction", 3, 0, 0, "Direction",
	"",
	0, "*",
	PROP_ENUM, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_direction_get, Brush_direction_set, rna_Brush_direction_itemf, NULL, NULL, NULL, rna_Brush_direction_items, 2, 0
};

static EnumPropertyItem rna_Brush_stroke_method_items[8] = {
	{0, "DOTS", 0, "Dots", "Apply paint on each mouse move step"},
	{8388608, "DRAG_DOT", 0, "Drag Dot", "Allows a single dot to be carefully positioned"},
	{1024, "SPACE", 0, "Space", "Limit brush application to the distance specified by spacing"},
	{1, "AIRBRUSH", 0, "Airbrush", "Keep applying paint effect while holding mouse (spray)"},
	{256, "ANCHORED", 0, "Anchored", "Keep the brush anchored to the initial location"},
	{536870912, "LINE", 0, "Line", "Draw a line with dabs separated according to spacing"},
	{-2147483648, "CURVE", 0, "Curve", "Define the stroke curve with a bezier curve (dabs are separated according to spacing)"},
	{0, NULL, 0, NULL, NULL}
};

EnumPropertyRNA rna_Brush_stroke_method = {
	{(PropertyRNA *)&rna_Brush_sculpt_plane, (PropertyRNA *)&rna_Brush_direction,
	-1, "stroke_method", 3, 0, 0, "Stroke Method",
	"",
	0, "*",
	PROP_ENUM, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_stroke_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_stroke_method_get, Brush_stroke_method_set, rna_Brush_stroke_itemf, NULL, NULL, NULL, rna_Brush_stroke_method_items, 7, 0
};

static EnumPropertyItem rna_Brush_sculpt_plane_items[6] = {
	{0, "AREA", 0, "Area Plane", ""},
	{1, "VIEW", 0, "View Plane", ""},
	{2, "X", 0, "X Plane", ""},
	{3, "Y", 0, "Y Plane", ""},
	{4, "Z", 0, "Z Plane", ""},
	{0, NULL, 0, NULL, NULL}
};

EnumPropertyRNA rna_Brush_sculpt_plane = {
	{(PropertyRNA *)&rna_Brush_mask_tool, (PropertyRNA *)&rna_Brush_stroke_method,
	-1, "sculpt_plane", 3, 0, 0, "Sculpt Plane",
	"",
	0, "*",
	PROP_ENUM, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_sculpt_plane_get, Brush_sculpt_plane_set, NULL, NULL, NULL, NULL, rna_Brush_sculpt_plane_items, 5, 0
};

static EnumPropertyItem rna_Brush_mask_tool_items[3] = {
	{0, "DRAW", 0, "Draw", ""},
	{1, "SMOOTH", 0, "Smooth", ""},
	{0, NULL, 0, NULL, NULL}
};

EnumPropertyRNA rna_Brush_mask_tool = {
	{(PropertyRNA *)&rna_Brush_size, (PropertyRNA *)&rna_Brush_sculpt_plane,
	-1, "mask_tool", 3, 0, 0, "Mask Tool",
	"",
	0, "*",
	PROP_ENUM, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_mask_tool_get, Brush_mask_tool_set, NULL, NULL, NULL, NULL, rna_Brush_mask_tool_items, 2, 0
};

IntPropertyRNA rna_Brush_size = {
	{(PropertyRNA *)&rna_Brush_unprojected_radius, (PropertyRNA *)&rna_Brush_mask_tool,
	-1, "size", 3, 0, 0, "Radius",
	"Radius of the brush in pixels",
	0, "*",
	PROP_INT, PROP_PIXEL | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_size_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_size_get, Brush_size_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
	1, 500, 1, 5000, 1, 0, NULL
};

FloatPropertyRNA rna_Brush_unprojected_radius = {
	{(PropertyRNA *)&rna_Brush_jitter, (PropertyRNA *)&rna_Brush_size,
	-1, "unprojected_radius", 3, 0, 0, "Unprojected Radius",
	"Radius of brush in Blender units",
	0, "*",
	PROP_FLOAT, PROP_DISTANCE | PROP_UNIT_LENGTH, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_size_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_unprojected_radius_get, Brush_unprojected_radius_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0010000000f, 1.0f, 0.0010000000f, FLT_MAX, 0.0f, -1, 0.0f, NULL
};

FloatPropertyRNA rna_Brush_jitter = {
	{(PropertyRNA *)&rna_Brush_jitter_absolute, (PropertyRNA *)&rna_Brush_unprojected_radius,
	-1, "jitter", 3, 0, 4, "Jitter",
	"Jitter the position of the brush while painting",
	0, "*",
	PROP_FLOAT, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, jitter), 4, NULL},
	Brush_jitter_get, Brush_jitter_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 2.0f, 0.0f, 1000.0f, 0.1000000015f, 4, 0.0f, NULL
};

IntPropertyRNA rna_Brush_jitter_absolute = {
	{(PropertyRNA *)&rna_Brush_spacing, (PropertyRNA *)&rna_Brush_jitter,
	-1, "jitter_absolute", 3, 0, 4, "Jitter",
	"Jitter the position of the brush in pixels while painting",
	0, "*",
	PROP_INT, PROP_PIXEL | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, jitter_absolute), 0, NULL},
	Brush_jitter_absolute_get, Brush_jitter_absolute_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
	0, 1000000, 0, 1000000, 1, 0, NULL
};

IntPropertyRNA rna_Brush_spacing = {
	{(PropertyRNA *)&rna_Brush_grad_spacing, (PropertyRNA *)&rna_Brush_jitter_absolute,
	-1, "spacing", 3, 0, 4, "Spacing",
	"Spacing between brush daubs as a percentage of brush diameter",
	0, "*",
	PROP_INT, PROP_PERCENTAGE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, spacing), 0, NULL},
	Brush_spacing_get, Brush_spacing_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
	1, 500, 1, 1000, 5, 0, NULL
};

IntPropertyRNA rna_Brush_grad_spacing = {
	{(PropertyRNA *)&rna_Brush_smooth_stroke_radius, (PropertyRNA *)&rna_Brush_spacing,
	-1, "grad_spacing", 3, 0, 4, "Gradient Spacing",
	"Spacing before brush gradient goes full circle",
	0, "*",
	PROP_INT, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, gradient_spacing), 0, NULL},
	Brush_grad_spacing_get, Brush_grad_spacing_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
	1, 10000, 1, 10000, 5, 0, NULL
};

IntPropertyRNA rna_Brush_smooth_stroke_radius = {
	{(PropertyRNA *)&rna_Brush_smooth_stroke_factor, (PropertyRNA *)&rna_Brush_grad_spacing,
	-1, "smooth_stroke_radius", 3, 0, 4, "Smooth Stroke Radius",
	"Minimum distance from last point before stroke continues",
	0, "*",
	PROP_INT, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, smooth_stroke_radius), 0, NULL},
	Brush_smooth_stroke_radius_get, Brush_smooth_stroke_radius_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
	10, 200, 10, 200, 1, 0, NULL
};

FloatPropertyRNA rna_Brush_smooth_stroke_factor = {
	{(PropertyRNA *)&rna_Brush_rate, (PropertyRNA *)&rna_Brush_smooth_stroke_radius,
	-1, "smooth_stroke_factor", 3, 0, 4, "Smooth Stroke Factor",
	"Higher values give a smoother stroke",
	0, "*",
	PROP_FLOAT, PROP_FACTOR | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, smooth_stroke_factor), 4, NULL},
	Brush_smooth_stroke_factor_get, Brush_smooth_stroke_factor_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.5000000000f, 0.9900000095f, 0.5000000000f, 0.9900000095f, 10.0f, 3, 0.0f, NULL
};

FloatPropertyRNA rna_Brush_rate = {
	{(PropertyRNA *)&rna_Brush_color, (PropertyRNA *)&rna_Brush_smooth_stroke_factor,
	-1, "rate", 3, 0, 4, "Rate",
	"Interval between paints for Airbrush",
	0, "*",
	PROP_FLOAT, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, rate), 4, NULL},
	Brush_rate_get, Brush_rate_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0099999998f, 1.0f, 0.0001000000f, 10000.0f, 1.0f, 3, 0.0f, NULL
};

static float rna_Brush_color_default[3] = {
	0.0f,
	0.0f,
	0.0f
};

FloatPropertyRNA rna_Brush_color = {
	{(PropertyRNA *)&rna_Brush_secondary_color, (PropertyRNA *)&rna_Brush_rate,
	-1, "color", 3, 0, 4, "Color",
	"",
	0, "*",
	PROP_FLOAT, PROP_COLOR_GAMMA | PROP_UNIT_NONE, NULL, 1, {3, 0, 0}, 3,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, rgb), 4, NULL},
	NULL, NULL, Brush_color_get, Brush_color_set, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, 1.0f, 10.0f, 3, 0.0f, rna_Brush_color_default
};

static float rna_Brush_secondary_color_default[3] = {
	0.0f,
	0.0f,
	0.0f
};

FloatPropertyRNA rna_Brush_secondary_color = {
	{(PropertyRNA *)&rna_Brush_weight, (PropertyRNA *)&rna_Brush_color,
	-1, "secondary_color", 3, 0, 4, "Secondary Color",
	"",
	0, "*",
	PROP_FLOAT, PROP_COLOR_GAMMA | PROP_UNIT_NONE, NULL, 1, {3, 0, 0}, 3,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, secondary_rgb), 4, NULL},
	NULL, NULL, Brush_secondary_color_get, Brush_secondary_color_set, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, 1.0f, 10.0f, 3, 0.0f, rna_Brush_secondary_color_default
};

FloatPropertyRNA rna_Brush_weight = {
	{(PropertyRNA *)&rna_Brush_strength, (PropertyRNA *)&rna_Brush_secondary_color,
	-1, "weight", 3, 0, 4, "Weight",
	"Vertex weight when brush is applied",
	0, "*",
	PROP_FLOAT, PROP_FACTOR | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, weight), 4, NULL},
	Brush_weight_get, Brush_weight_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, 1.0f, 0.0010000000f, 3, 1.0f, NULL
};

FloatPropertyRNA rna_Brush_strength = {
	{(PropertyRNA *)&rna_Brush_plane_offset, (PropertyRNA *)&rna_Brush_weight,
	-1, "strength", 3, 0, 4, "Strength",
	"How powerful the effect of the brush is when applied",
	0, "*",
	PROP_FLOAT, PROP_FACTOR | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, alpha), 4, NULL},
	Brush_strength_get, Brush_strength_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, 10.0f, 0.0010000000f, 3, 0.5000000000f, NULL
};

FloatPropertyRNA rna_Brush_plane_offset = {
	{(PropertyRNA *)&rna_Brush_plane_trim, (PropertyRNA *)&rna_Brush_strength,
	-1, "plane_offset", 3, 0, 4, "Plane Offset",
	"Adjust plane on which the brush acts towards or away from the object surface",
	0, "*",
	PROP_FLOAT, PROP_DISTANCE | PROP_UNIT_LENGTH, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, plane_offset), 4, NULL},
	Brush_plane_offset_get, Brush_plane_offset_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.5000000000f, 0.5000000000f, -2.0f, 2.0f, 0.0010000000f, 3, 0.0f, NULL
};

FloatPropertyRNA rna_Brush_plane_trim = {
	{(PropertyRNA *)&rna_Brush_height, (PropertyRNA *)&rna_Brush_plane_offset,
	-1, "plane_trim", 3, 0, 4, "Plane Trim",
	"If a vertex is further away from offset plane than this, then it is not affected",
	0, "*",
	PROP_FLOAT, PROP_DISTANCE | PROP_UNIT_LENGTH, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, plane_trim), 4, NULL},
	Brush_plane_trim_get, Brush_plane_trim_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, 1.0f, 10.0f, 3, 0.5000000000f, NULL
};

FloatPropertyRNA rna_Brush_height = {
	{(PropertyRNA *)&rna_Brush_texture_sample_bias, (PropertyRNA *)&rna_Brush_plane_trim,
	-1, "height", 3, 0, 4, "Brush Height",
	"Affectable height of brush (layer height for layer tool, i.e.)",
	0, "*",
	PROP_FLOAT, PROP_DISTANCE | PROP_UNIT_LENGTH, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, height), 4, NULL},
	Brush_height_get, Brush_height_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, 1.0f, 10.0f, 3, 0.5000000000f, NULL
};

FloatPropertyRNA rna_Brush_texture_sample_bias = {
	{(PropertyRNA *)&rna_Brush_normal_weight, (PropertyRNA *)&rna_Brush_height,
	-1, "texture_sample_bias", 3, 0, 4, "Texture Sample Bias",
	"Value added to texture samples",
	0, "*",
	PROP_FLOAT, PROP_DISTANCE | PROP_UNIT_LENGTH, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, texture_sample_bias), 4, NULL},
	Brush_texture_sample_bias_get, Brush_texture_sample_bias_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1.0f, 1.0f, -1.0f, 1.0f, 10.0f, 3, 0.0f, NULL
};

FloatPropertyRNA rna_Brush_normal_weight = {
	{(PropertyRNA *)&rna_Brush_rake_factor, (PropertyRNA *)&rna_Brush_texture_sample_bias,
	-1, "normal_weight", 3, 0, 4, "Normal Weight",
	"How much grab will pull vertexes out of surface during a grab",
	0, "*",
	PROP_FLOAT, PROP_FACTOR | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, normal_weight), 4, NULL},
	Brush_normal_weight_get, Brush_normal_weight_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, 1.0f, 10.0f, 3, 0.0f, NULL
};

FloatPropertyRNA rna_Brush_rake_factor = {
	{(PropertyRNA *)&rna_Brush_crease_pinch_factor, (PropertyRNA *)&rna_Brush_normal_weight,
	-1, "rake_factor", 3, 0, 4, "Rake",
	"How much grab will follow cursor rotation",
	0, "*",
	PROP_FLOAT, PROP_FACTOR | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, rake_factor), 4, NULL},
	Brush_rake_factor_get, Brush_rake_factor_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, 10.0f, 0.0010000000f, 3, 0.0f, NULL
};

FloatPropertyRNA rna_Brush_crease_pinch_factor = {
	{(PropertyRNA *)&rna_Brush_auto_smooth_factor, (PropertyRNA *)&rna_Brush_rake_factor,
	-1, "crease_pinch_factor", 3, 0, 4, "Crease Brush Pinch Factor",
	"How much the crease brush pinches",
	0, "*",
	PROP_FLOAT, PROP_FACTOR | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, crease_pinch_factor), 4, NULL},
	Brush_crease_pinch_factor_get, Brush_crease_pinch_factor_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, 1.0f, 10.0f, 3, 0.6666666865f, NULL
};

FloatPropertyRNA rna_Brush_auto_smooth_factor = {
	{(PropertyRNA *)&rna_Brush_stencil_pos, (PropertyRNA *)&rna_Brush_crease_pinch_factor,
	-1, "auto_smooth_factor", 3, 0, 4, "Autosmooth",
	"Amount of smoothing to automatically apply to each stroke",
	0, "*",
	PROP_FLOAT, PROP_FACTOR | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, autosmooth_factor), 4, NULL},
	Brush_auto_smooth_factor_get, Brush_auto_smooth_factor_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, 1.0f, 0.0010000000f, 3, 0.0f, NULL
};

static float rna_Brush_stencil_pos_default[2] = {
	0.0f,
	0.0f
};

FloatPropertyRNA rna_Brush_stencil_pos = {
	{(PropertyRNA *)&rna_Brush_stencil_dimension, (PropertyRNA *)&rna_Brush_auto_smooth_factor,
	-1, "stencil_pos", 3, 0, 4, "Stencil Position",
	"Position of stencil in viewport",
	0, "*",
	PROP_FLOAT, PROP_XYZ | PROP_UNIT_NONE, NULL, 1, {2, 0, 0}, 2,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, stencil_pos), 4, NULL},
	NULL, NULL, Brush_stencil_pos_get, Brush_stencil_pos_set, NULL, NULL, NULL, NULL, NULL, NULL, -10000.0f, 10000.0f, -FLT_MAX, FLT_MAX, 10.0f, 3, 0.0f, rna_Brush_stencil_pos_default
};

static float rna_Brush_stencil_dimension_default[2] = {
	0.0f,
	0.0f
};

FloatPropertyRNA rna_Brush_stencil_dimension = {
	{(PropertyRNA *)&rna_Brush_mask_stencil_pos, (PropertyRNA *)&rna_Brush_stencil_pos,
	-1, "stencil_dimension", 3, 0, 4, "Stencil Dimensions",
	"Dimensions of stencil in viewport",
	0, "*",
	PROP_FLOAT, PROP_XYZ | PROP_UNIT_NONE, NULL, 1, {2, 0, 0}, 2,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, stencil_dimension), 4, NULL},
	NULL, NULL, Brush_stencil_dimension_get, Brush_stencil_dimension_set, NULL, NULL, NULL, NULL, NULL, NULL, -10000.0f, 10000.0f, -FLT_MAX, FLT_MAX, 10.0f, 3, 0.0f, rna_Brush_stencil_dimension_default
};

static float rna_Brush_mask_stencil_pos_default[2] = {
	0.0f,
	0.0f
};

FloatPropertyRNA rna_Brush_mask_stencil_pos = {
	{(PropertyRNA *)&rna_Brush_mask_stencil_dimension, (PropertyRNA *)&rna_Brush_stencil_dimension,
	-1, "mask_stencil_pos", 3, 0, 4, "Mask Stencil Position",
	"Position of mask stencil in viewport",
	0, "*",
	PROP_FLOAT, PROP_XYZ | PROP_UNIT_NONE, NULL, 1, {2, 0, 0}, 2,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, mask_stencil_pos), 4, NULL},
	NULL, NULL, Brush_mask_stencil_pos_get, Brush_mask_stencil_pos_set, NULL, NULL, NULL, NULL, NULL, NULL, -10000.0f, 10000.0f, -FLT_MAX, FLT_MAX, 10.0f, 3, 0.0f, rna_Brush_mask_stencil_pos_default
};

static float rna_Brush_mask_stencil_dimension_default[2] = {
	0.0f,
	0.0f
};

FloatPropertyRNA rna_Brush_mask_stencil_dimension = {
	{(PropertyRNA *)&rna_Brush_sharp_threshold, (PropertyRNA *)&rna_Brush_mask_stencil_pos,
	-1, "mask_stencil_dimension", 3, 0, 4, "Mask Stencil Dimensions",
	"Dimensions of mask stencil in viewport",
	0, "*",
	PROP_FLOAT, PROP_XYZ | PROP_UNIT_NONE, NULL, 1, {2, 0, 0}, 2,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, mask_stencil_dimension), 4, NULL},
	NULL, NULL, Brush_mask_stencil_dimension_get, Brush_mask_stencil_dimension_set, NULL, NULL, NULL, NULL, NULL, NULL, -10000.0f, 10000.0f, -FLT_MAX, FLT_MAX, 10.0f, 3, 0.0f, rna_Brush_mask_stencil_dimension_default
};

FloatPropertyRNA rna_Brush_sharp_threshold = {
	{(PropertyRNA *)&rna_Brush_fill_threshold, (PropertyRNA *)&rna_Brush_mask_stencil_dimension,
	-1, "sharp_threshold", 3, 0, 4, "Sharp Threshold",
	"Threshold below which, no sharpening is done",
	0, "*",
	PROP_FLOAT, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, sharp_threshold), 4, NULL},
	Brush_sharp_threshold_get, Brush_sharp_threshold_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, 100.0f, 1.0f, 3, 0.0f, NULL
};

FloatPropertyRNA rna_Brush_fill_threshold = {
	{(PropertyRNA *)&rna_Brush_blur_kernel_radius, (PropertyRNA *)&rna_Brush_sharp_threshold,
	-1, "fill_threshold", 3, 0, 4, "Fill Threshold",
	"Threshold above which filling is not propagated",
	0, "*",
	PROP_FLOAT, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, fill_threshold), 4, NULL},
	Brush_fill_threshold_get, Brush_fill_threshold_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, 100.0f, 1.0f, 3, 0.0f, NULL
};

IntPropertyRNA rna_Brush_blur_kernel_radius = {
	{(PropertyRNA *)&rna_Brush_blur_mode, (PropertyRNA *)&rna_Brush_fill_threshold,
	-1, "blur_kernel_radius", 3, 0, 4, "Kernel Radius",
	"Radius of kernel used for soften and sharpen in pixels",
	0, "*",
	PROP_INT, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, blur_kernel_radius), 0, NULL},
	Brush_blur_kernel_radius_get, Brush_blur_kernel_radius_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
	1, 50, 1, 10000, 1, 0, NULL
};

static EnumPropertyItem rna_Brush_blur_mode_items[3] = {
	{1, "BOX", 0, "Box", ""},
	{0, "GAUSSIAN", 0, "Gaussian", ""},
	{0, NULL, 0, NULL, NULL}
};

EnumPropertyRNA rna_Brush_blur_mode = {
	{(PropertyRNA *)&rna_Brush_use_airbrush, (PropertyRNA *)&rna_Brush_blur_kernel_radius,
	-1, "blur_mode", 3, 0, 0, "Blur Mode",
	"",
	0, "*",
	PROP_ENUM, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_blur_mode_get, Brush_blur_mode_set, NULL, NULL, NULL, NULL, rna_Brush_blur_mode_items, 2, 0
};

BoolPropertyRNA rna_Brush_use_airbrush = {
	{(PropertyRNA *)&rna_Brush_use_original_normal, (PropertyRNA *)&rna_Brush_blur_mode,
	-1, "use_airbrush", 3, 0, 0, "Airbrush",
	"Keep applying paint effect while holding mouse (spray)",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_airbrush_get, Brush_use_airbrush_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_original_normal = {
	{(PropertyRNA *)&rna_Brush_use_pressure_strength, (PropertyRNA *)&rna_Brush_use_airbrush,
	-1, "use_original_normal", 4099, 0, 0, "Original Normal",
	"When locked keep using normal of surface where stroke was initiated",
	40, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_original_normal_get, Brush_use_original_normal_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_pressure_strength = {
	{(PropertyRNA *)&rna_Brush_use_offset_pressure, (PropertyRNA *)&rna_Brush_use_original_normal,
	-1, "use_pressure_strength", 3, 0, 0, "Strength Pressure",
	"Enable tablet pressure sensitivity for strength",
	67, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_pressure_strength_get, Brush_use_pressure_strength_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_offset_pressure = {
	{(PropertyRNA *)&rna_Brush_use_pressure_size, (PropertyRNA *)&rna_Brush_use_pressure_strength,
	-1, "use_offset_pressure", 3, 0, 0, "Plane Offset Pressure",
	"Enable tablet pressure sensitivity for offset",
	67, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_offset_pressure_get, Brush_use_offset_pressure_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_pressure_size = {
	{(PropertyRNA *)&rna_Brush_use_gradient, (PropertyRNA *)&rna_Brush_use_offset_pressure,
	-1, "use_pressure_size", 3, 0, 0, "Size Pressure",
	"Enable tablet pressure sensitivity for size",
	67, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_pressure_size_get, Brush_use_pressure_size_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_gradient = {
	{(PropertyRNA *)&rna_Brush_use_pressure_jitter, (PropertyRNA *)&rna_Brush_use_pressure_size,
	-1, "use_gradient", 3, 0, 0, "Use Gradient",
	"Use Gradient by utilizing a sampling method",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_gradient_get, Brush_use_gradient_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_pressure_jitter = {
	{(PropertyRNA *)&rna_Brush_use_pressure_spacing, (PropertyRNA *)&rna_Brush_use_gradient,
	-1, "use_pressure_jitter", 3, 0, 0, "Jitter Pressure",
	"Enable tablet pressure sensitivity for jitter",
	67, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_pressure_jitter_get, Brush_use_pressure_jitter_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_pressure_spacing = {
	{(PropertyRNA *)&rna_Brush_use_pressure_masking, (PropertyRNA *)&rna_Brush_use_pressure_jitter,
	-1, "use_pressure_spacing", 3, 0, 0, "Spacing Pressure",
	"Enable tablet pressure sensitivity for spacing",
	67, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_pressure_spacing_get, Brush_use_pressure_spacing_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

static EnumPropertyItem rna_Brush_use_pressure_masking_items[4] = {
	{0, "NONE", 0, "Off", ""},
	{2, "RAMP", 67, "Ramp", ""},
	{4, "CUTOFF", 67, "Cutoff", ""},
	{0, NULL, 0, NULL, NULL}
};

EnumPropertyRNA rna_Brush_use_pressure_masking = {
	{(PropertyRNA *)&rna_Brush_use_inverse_smooth_pressure, (PropertyRNA *)&rna_Brush_use_pressure_spacing,
	-1, "use_pressure_masking", 3, 0, 0, "Mask Pressure Mode",
	"Pen pressure makes texture influence smaller",
	0, "*",
	PROP_ENUM, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_pressure_masking_get, Brush_use_pressure_masking_set, NULL, NULL, NULL, NULL, rna_Brush_use_pressure_masking_items, 3, 0
};

BoolPropertyRNA rna_Brush_use_inverse_smooth_pressure = {
	{(PropertyRNA *)&rna_Brush_use_relative_jitter, (PropertyRNA *)&rna_Brush_use_pressure_masking,
	-1, "use_inverse_smooth_pressure", 3, 0, 0, "Inverse Smooth Pressure",
	"Lighter pressure causes more smoothing to be applied",
	67, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_inverse_smooth_pressure_get, Brush_use_inverse_smooth_pressure_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_relative_jitter = {
	{(PropertyRNA *)&rna_Brush_use_plane_trim, (PropertyRNA *)&rna_Brush_use_inverse_smooth_pressure,
	-1, "use_relative_jitter", 4099, 0, 0, "Absolute Jitter",
	"Jittering happens in screen space, not relative to brush size",
	40, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_relative_jitter_get, Brush_use_relative_jitter_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_plane_trim = {
	{(PropertyRNA *)&rna_Brush_use_frontface, (PropertyRNA *)&rna_Brush_use_relative_jitter,
	-1, "use_plane_trim", 3, 0, 0, "Use Plane Trim",
	"Enable Plane Trim",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_plane_trim_get, Brush_use_plane_trim_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_frontface = {
	{(PropertyRNA *)&rna_Brush_use_anchor, (PropertyRNA *)&rna_Brush_use_plane_trim,
	-1, "use_frontface", 3, 0, 0, "Use Front-Face",
	"Brush only affects vertexes that face the viewer",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_frontface_get, Brush_use_frontface_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_anchor = {
	{(PropertyRNA *)&rna_Brush_use_space, (PropertyRNA *)&rna_Brush_use_frontface,
	-1, "use_anchor", 3, 0, 0, "Anchored",
	"Keep the brush anchored to the initial location",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_anchor_get, Brush_use_anchor_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_space = {
	{(PropertyRNA *)&rna_Brush_use_line, (PropertyRNA *)&rna_Brush_use_anchor,
	-1, "use_space", 3, 0, 0, "Space",
	"Limit brush application to the distance specified by spacing",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_space_get, Brush_use_space_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_line = {
	{(PropertyRNA *)&rna_Brush_use_curve, (PropertyRNA *)&rna_Brush_use_space,
	-1, "use_line", 3, 0, 0, "Line",
	"Draw a line with dabs separated according to spacing",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_line_get, Brush_use_line_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_curve = {
	{(PropertyRNA *)&rna_Brush_use_smooth_stroke, (PropertyRNA *)&rna_Brush_use_line,
	-1, "use_curve", 3, 0, 0, "Curve",
	"Define the stroke curve with a bezier curve. Dabs are separated according to spacing",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_curve_get, Brush_use_curve_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_smooth_stroke = {
	{(PropertyRNA *)&rna_Brush_use_persistent, (PropertyRNA *)&rna_Brush_use_curve,
	-1, "use_smooth_stroke", 3, 0, 0, "Smooth Stroke",
	"Brush lags behind mouse and follows a smoother path",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_smooth_stroke_get, Brush_use_smooth_stroke_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_persistent = {
	{(PropertyRNA *)&rna_Brush_use_accumulate, (PropertyRNA *)&rna_Brush_use_smooth_stroke,
	-1, "use_persistent", 3, 0, 0, "Persistent",
	"Sculpt on a persistent layer of the mesh",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_persistent_get, Brush_use_persistent_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_accumulate = {
	{(PropertyRNA *)&rna_Brush_use_space_attenuation, (PropertyRNA *)&rna_Brush_use_persistent,
	-1, "use_accumulate", 3, 0, 0, "Accumulate",
	"Accumulate stroke daubs on top of each other",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_accumulate_get, Brush_use_accumulate_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_space_attenuation = {
	{(PropertyRNA *)&rna_Brush_use_adaptive_space, (PropertyRNA *)&rna_Brush_use_accumulate,
	-1, "use_space_attenuation", 4099, 0, 0, "Use Automatic Strength Adjustment",
	"Automatically adjust strength to give consistent results for different spacings",
	40, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_space_attenuation_get, Brush_use_space_attenuation_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_adaptive_space = {
	{(PropertyRNA *)&rna_Brush_use_locked_size, (PropertyRNA *)&rna_Brush_use_space_attenuation,
	-1, "use_adaptive_space", 3, 0, 0, "Adaptive Spacing",
	"Space daubs according to surface orientation instead of screen space",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_adaptive_space_get, Brush_use_adaptive_space_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_locked_size = {
	{(PropertyRNA *)&rna_Brush_use_edge_to_edge, (PropertyRNA *)&rna_Brush_use_adaptive_space,
	-1, "use_locked_size", 3, 0, 0, "Use Blender Units",
	"When locked brush stays same size relative to object; when unlocked brush size is given in pixels",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_locked_size_get, Brush_use_locked_size_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_edge_to_edge = {
	{(PropertyRNA *)&rna_Brush_use_restore_mesh, (PropertyRNA *)&rna_Brush_use_locked_size,
	-1, "use_edge_to_edge", 3, 0, 0, "Edge-to-edge",
	"Drag anchor brush from edge-to-edge",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_edge_to_edge_get, Brush_use_edge_to_edge_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_restore_mesh = {
	{(PropertyRNA *)&rna_Brush_use_alpha, (PropertyRNA *)&rna_Brush_use_edge_to_edge,
	-1, "use_restore_mesh", 3, 0, 0, "Restore Mesh",
	"Allow a single dot to be carefully positioned",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_restore_mesh_get, Brush_use_restore_mesh_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_alpha = {
	{(PropertyRNA *)&rna_Brush_curve, (PropertyRNA *)&rna_Brush_use_restore_mesh,
	-1, "use_alpha", 3, 0, 0, "Alpha",
	"When this is disabled, lock alpha while painting",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_alpha_get, Brush_use_alpha_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

PointerPropertyRNA rna_Brush_curve = {
	{(PropertyRNA *)&rna_Brush_paint_curve, (PropertyRNA *)&rna_Brush_use_alpha,
	-1, "curve", 8650752, 0, 0, "Curve",
	"Editable falloff curve",
	0, "*",
	PROP_POINTER, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_curve_get, NULL, NULL, NULL,&RNA_CurveMapping
};

PointerPropertyRNA rna_Brush_paint_curve = {
	{(PropertyRNA *)&rna_Brush_gradient, (PropertyRNA *)&rna_Brush_curve,
	-1, "paint_curve", 8388673, 0, 0, "Paint Curve",
	"Active Paint Curve",
	0, "*",
	PROP_POINTER, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_paint_curve_get, Brush_paint_curve_set, NULL, NULL,&RNA_PaintCurve
};

PointerPropertyRNA rna_Brush_gradient = {
	{(PropertyRNA *)&rna_Brush_gradient_stroke_mode, (PropertyRNA *)&rna_Brush_paint_curve,
	-1, "gradient", 8388608, 0, 0, "Gradient",
	"",
	0, "*",
	PROP_POINTER, PROP_NONE | PROP_UNIT_MASS, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_gradient_get, NULL, NULL, NULL,&RNA_ColorRamp
};

static EnumPropertyItem rna_Brush_gradient_stroke_mode_items[4] = {
	{0, "PRESSURE", 0, "Pressure", ""},
	{1, "SPACING_REPEAT", 0, "Repeat", ""},
	{2, "SPACING_CLAMP", 0, "Clamp", ""},
	{0, NULL, 0, NULL, NULL}
};

EnumPropertyRNA rna_Brush_gradient_stroke_mode = {
	{(PropertyRNA *)&rna_Brush_gradient_fill_mode, (PropertyRNA *)&rna_Brush_gradient,
	-1, "gradient_stroke_mode", 3, 0, 0, "Gradient Stroke Mode",
	"",
	0, "*",
	PROP_ENUM, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_gradient_stroke_mode_get, Brush_gradient_stroke_mode_set, NULL, NULL, NULL, NULL, rna_Brush_gradient_stroke_mode_items, 3, 0
};

static EnumPropertyItem rna_Brush_gradient_fill_mode_items[3] = {
	{0, "LINEAR", 0, "Linear", ""},
	{1, "RADIAL", 0, "Radial", ""},
	{0, NULL, 0, NULL, NULL}
};

EnumPropertyRNA rna_Brush_gradient_fill_mode = {
	{(PropertyRNA *)&rna_Brush_use_primary_overlay, (PropertyRNA *)&rna_Brush_gradient_stroke_mode,
	-1, "gradient_fill_mode", 3, 0, 0, "Gradient Fill Mode",
	"",
	0, "*",
	PROP_ENUM, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_gradient_fill_mode_get, Brush_gradient_fill_mode_set, NULL, NULL, NULL, NULL, rna_Brush_gradient_fill_mode_items, 2, 0
};

BoolPropertyRNA rna_Brush_use_primary_overlay = {
	{(PropertyRNA *)&rna_Brush_use_secondary_overlay, (PropertyRNA *)&rna_Brush_gradient_fill_mode,
	-1, "use_primary_overlay", 3, 0, 0, "Use Texture Overlay",
	"Show texture in viewport",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_primary_overlay_get, Brush_use_primary_overlay_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_secondary_overlay = {
	{(PropertyRNA *)&rna_Brush_use_cursor_overlay, (PropertyRNA *)&rna_Brush_use_primary_overlay,
	-1, "use_secondary_overlay", 3, 0, 0, "Use Texture Overlay",
	"Show texture in viewport",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_secondary_overlay_get, Brush_use_secondary_overlay_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_cursor_overlay = {
	{(PropertyRNA *)&rna_Brush_use_cursor_overlay_override, (PropertyRNA *)&rna_Brush_use_secondary_overlay,
	-1, "use_cursor_overlay", 3, 0, 0, "Use Cursor Overlay",
	"Show cursor in viewport",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_cursor_overlay_get, Brush_use_cursor_overlay_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_cursor_overlay_override = {
	{(PropertyRNA *)&rna_Brush_use_primary_overlay_override, (PropertyRNA *)&rna_Brush_use_cursor_overlay,
	-1, "use_cursor_overlay_override", 3, 0, 0, "Override Overlay",
	"Don\'t show overlay during a stroke",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_cursor_overlay_override_get, Brush_use_cursor_overlay_override_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_primary_overlay_override = {
	{(PropertyRNA *)&rna_Brush_use_secondary_overlay_override, (PropertyRNA *)&rna_Brush_use_cursor_overlay_override,
	-1, "use_primary_overlay_override", 3, 0, 0, "Override Overlay",
	"Don\'t show overlay during a stroke",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_primary_overlay_override_get, Brush_use_primary_overlay_override_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_secondary_overlay_override = {
	{(PropertyRNA *)&rna_Brush_use_paint_sculpt, (PropertyRNA *)&rna_Brush_use_primary_overlay_override,
	-1, "use_secondary_overlay_override", 3, 0, 0, "Override Overlay",
	"Don\'t show overlay during a stroke",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_secondary_overlay_override_get, Brush_use_secondary_overlay_override_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_paint_sculpt = {
	{(PropertyRNA *)&rna_Brush_use_paint_vertex, (PropertyRNA *)&rna_Brush_use_secondary_overlay_override,
	-1, "use_paint_sculpt", 3, 0, 0, "Use Sculpt",
	"Use this brush in sculpt mode",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_paint_sculpt_get, Brush_use_paint_sculpt_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_paint_vertex = {
	{(PropertyRNA *)&rna_Brush_use_paint_weight, (PropertyRNA *)&rna_Brush_use_paint_sculpt,
	-1, "use_paint_vertex", 3, 0, 0, "Use Vertex",
	"Use this brush in vertex paint mode",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_paint_vertex_get, Brush_use_paint_vertex_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_paint_weight = {
	{(PropertyRNA *)&rna_Brush_use_paint_image, (PropertyRNA *)&rna_Brush_use_paint_vertex,
	-1, "use_paint_weight", 3, 0, 0, "Use Weight",
	"Use this brush in weight paint mode",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_paint_weight_get, Brush_use_paint_weight_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_Brush_use_paint_image = {
	{(PropertyRNA *)&rna_Brush_texture_slot, (PropertyRNA *)&rna_Brush_use_paint_weight,
	-1, "use_paint_image", 3, 0, 0, "Use Texture",
	"Use this brush in texture paint mode",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_paint_image_get, Brush_use_paint_image_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

PointerPropertyRNA rna_Brush_texture_slot = {
	{(PropertyRNA *)&rna_Brush_texture, (PropertyRNA *)&rna_Brush_use_paint_image,
	-1, "texture_slot", 8388608, 0, 0, "Texture Slot",
	"",
	0, "*",
	PROP_POINTER, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	Brush_texture_slot_get, NULL, NULL, NULL,&RNA_BrushTextureSlot
};

PointerPropertyRNA rna_Brush_texture = {
	{(PropertyRNA *)&rna_Brush_mask_texture_slot, (PropertyRNA *)&rna_Brush_texture_slot,
	-1, "texture", 8388673, 0, 0, "Texture",
	"",
	0, "*",
	PROP_POINTER, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_main_tex_update, 117440512, NULL, NULL,
	0, -1, NULL},
	Brush_texture_get, Brush_texture_set, NULL, NULL,&RNA_Texture
};

PointerPropertyRNA rna_Brush_mask_texture_slot = {
	{(PropertyRNA *)&rna_Brush_mask_texture, (PropertyRNA *)&rna_Brush_texture,
	-1, "mask_texture_slot", 8388608, 0, 0, "Mask Texture Slot",
	"",
	0, "*",
	PROP_POINTER, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	Brush_mask_texture_slot_get, NULL, NULL, NULL,&RNA_BrushTextureSlot
};

PointerPropertyRNA rna_Brush_mask_texture = {
	{(PropertyRNA *)&rna_Brush_texture_overlay_alpha, (PropertyRNA *)&rna_Brush_mask_texture_slot,
	-1, "mask_texture", 8388673, 0, 0, "Mask Texture",
	"",
	0, "*",
	PROP_POINTER, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_secondary_tex_update, 117440512, NULL, NULL,
	0, -1, NULL},
	Brush_mask_texture_get, Brush_mask_texture_set, NULL, NULL,&RNA_Texture
};

IntPropertyRNA rna_Brush_texture_overlay_alpha = {
	{(PropertyRNA *)&rna_Brush_mask_overlay_alpha, (PropertyRNA *)&rna_Brush_mask_texture,
	-1, "texture_overlay_alpha", 3, 0, 4, "Texture Overlay Alpha",
	"",
	0, "*",
	PROP_INT, PROP_PERCENTAGE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, texture_overlay_alpha), 0, NULL},
	Brush_texture_overlay_alpha_get, Brush_texture_overlay_alpha_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
	0, 100, 0, 100, 1, 0, NULL
};

IntPropertyRNA rna_Brush_mask_overlay_alpha = {
	{(PropertyRNA *)&rna_Brush_cursor_overlay_alpha, (PropertyRNA *)&rna_Brush_texture_overlay_alpha,
	-1, "mask_overlay_alpha", 3, 0, 4, "Mask Texture Overlay Alpha",
	"",
	0, "*",
	PROP_INT, PROP_PERCENTAGE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, mask_overlay_alpha), 0, NULL},
	Brush_mask_overlay_alpha_get, Brush_mask_overlay_alpha_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
	0, 100, 0, 100, 1, 0, NULL
};

IntPropertyRNA rna_Brush_cursor_overlay_alpha = {
	{(PropertyRNA *)&rna_Brush_cursor_color_add, (PropertyRNA *)&rna_Brush_mask_overlay_alpha,
	-1, "cursor_overlay_alpha", 3, 0, 4, "Mask Texture Overlay Alpha",
	"",
	0, "*",
	PROP_INT, PROP_PERCENTAGE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, cursor_overlay_alpha), 0, NULL},
	Brush_cursor_overlay_alpha_get, Brush_cursor_overlay_alpha_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
	0, 100, 0, 100, 1, 0, NULL
};

static float rna_Brush_cursor_color_add_default[3] = {
	0.0f,
	0.0f,
	0.0f
};

FloatPropertyRNA rna_Brush_cursor_color_add = {
	{(PropertyRNA *)&rna_Brush_cursor_color_subtract, (PropertyRNA *)&rna_Brush_cursor_overlay_alpha,
	-1, "cursor_color_add", 3, 0, 4, "Add Color",
	"Color of cursor when adding",
	0, "*",
	PROP_FLOAT, PROP_COLOR | PROP_UNIT_NONE, NULL, 1, {3, 0, 0}, 3,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, add_col), 4, NULL},
	NULL, NULL, Brush_cursor_color_add_get, Brush_cursor_color_add_set, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, FLT_MAX, 10.0f, 3, 0.0f, rna_Brush_cursor_color_add_default
};

static float rna_Brush_cursor_color_subtract_default[3] = {
	0.0f,
	0.0f,
	0.0f
};

FloatPropertyRNA rna_Brush_cursor_color_subtract = {
	{(PropertyRNA *)&rna_Brush_use_custom_icon, (PropertyRNA *)&rna_Brush_cursor_color_add,
	-1, "cursor_color_subtract", 3, 0, 4, "Subtract Color",
	"Color of cursor when subtracting",
	0, "*",
	PROP_FLOAT, PROP_COLOR | PROP_UNIT_NONE, NULL, 1, {3, 0, 0}, 3,
	rna_Brush_update, 0, NULL, NULL,
	offsetof(Brush, sub_col), 4, NULL},
	NULL, NULL, Brush_cursor_color_subtract_get, Brush_cursor_color_subtract_set, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, FLT_MAX, 10.0f, 3, 0.0f, rna_Brush_cursor_color_subtract_default
};

BoolPropertyRNA rna_Brush_use_custom_icon = {
	{(PropertyRNA *)&rna_Brush_icon_filepath, (PropertyRNA *)&rna_Brush_cursor_color_subtract,
	-1, "use_custom_icon", 3, 0, 0, "Custom Icon",
	"Set the brush icon from an image file",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_icon_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_use_custom_icon_get, Brush_use_custom_icon_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

StringPropertyRNA rna_Brush_icon_filepath = {
	{(PropertyRNA *)&rna_Brush_clone_image, (PropertyRNA *)&rna_Brush_use_custom_icon,
	-1, "icon_filepath", 262145, 0, 0, "Brush Icon Filepath",
	"File path to brush icon",
	0, "*",
	PROP_STRING, PROP_FILEPATH | PROP_UNIT_NONE, NULL, 0, {1024, 0, 0}, 0,
	rna_Brush_icon_update, 0, NULL, NULL,
	0, -1, NULL},
	Brush_icon_filepath_get, Brush_icon_filepath_length, Brush_icon_filepath_set, NULL, NULL, NULL, 1024, ""
};

PointerPropertyRNA rna_Brush_clone_image = {
	{(PropertyRNA *)&rna_Brush_clone_alpha, (PropertyRNA *)&rna_Brush_icon_filepath,
	-1, "clone_image", 8388673, 0, 0, "Clone Image",
	"Image for clone tool",
	0, "*",
	PROP_POINTER, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 251920384, NULL, NULL,
	0, -1, NULL},
	Brush_clone_image_get, Brush_clone_image_set, NULL, NULL,&RNA_Image
};

FloatPropertyRNA rna_Brush_clone_alpha = {
	{(PropertyRNA *)&rna_Brush_clone_offset, (PropertyRNA *)&rna_Brush_clone_image,
	-1, "clone_alpha", 3, 0, 4, "Clone Alpha",
	"Opacity of clone image display",
	0, "*",
	PROP_FLOAT, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_Brush_update, 251920384, NULL, NULL,
	offsetof(Brush, clone.alpha), 4, NULL},
	Brush_clone_alpha_get, Brush_clone_alpha_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, 1.0f, 10.0f, 3, 0.0f, NULL
};

static float rna_Brush_clone_offset_default[2] = {
	0.0f,
	0.0f
};

FloatPropertyRNA rna_Brush_clone_offset = {
	{(PropertyRNA *)&rna_Brush_brush_capabilities, (PropertyRNA *)&rna_Brush_clone_alpha,
	-1, "clone_offset", 3, 0, 4, "Clone Offset",
	"",
	0, "*",
	PROP_FLOAT, PROP_XYZ | PROP_UNIT_NONE, NULL, 1, {2, 0, 0}, 2,
	rna_Brush_update, 251920384, NULL, NULL,
	offsetof(Brush, clone.offset), 4, NULL},
	NULL, NULL, Brush_clone_offset_get, Brush_clone_offset_set, NULL, NULL, NULL, NULL, NULL, NULL, -1.0f, 1.0f, -FLT_MAX, FLT_MAX, 10.0f, 3, 0.0f, rna_Brush_clone_offset_default
};

PointerPropertyRNA rna_Brush_brush_capabilities = {
	{(PropertyRNA *)&rna_Brush_sculpt_capabilities, (PropertyRNA *)&rna_Brush_clone_offset,
	-1, "brush_capabilities", 8650752, 0, 0, "Brush Capabilities",
	"Brush\'s capabilities",
	0, "*",
	PROP_POINTER, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	Brush_brush_capabilities_get, NULL, NULL, NULL,&RNA_BrushCapabilities
};

PointerPropertyRNA rna_Brush_sculpt_capabilities = {
	{(PropertyRNA *)&rna_Brush_image_paint_capabilities, (PropertyRNA *)&rna_Brush_brush_capabilities,
	-1, "sculpt_capabilities", 8650752, 0, 0, "Sculpt Capabilities",
	"Brush\'s capabilities in sculpt mode",
	0, "*",
	PROP_POINTER, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	Brush_sculpt_capabilities_get, NULL, NULL, NULL,&RNA_SculptToolCapabilities
};

PointerPropertyRNA rna_Brush_image_paint_capabilities = {
	{NULL, (PropertyRNA *)&rna_Brush_sculpt_capabilities,
	-1, "image_paint_capabilities", 8650752, 0, 0, "Image Painting Capabilities",
	"Brush\'s capabilities in image paint mode",
	0, "*",
	PROP_POINTER, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	Brush_image_paint_capabilities_get, NULL, NULL, NULL,&RNA_ImapaintToolCapabilities
};

StructRNA RNA_Brush = {
	{(ContainerRNA *)&RNA_BrushCapabilities, (ContainerRNA *)&RNA_BoidSettings,
	NULL,
	{(PropertyRNA *)&rna_Brush_blend, (PropertyRNA *)&rna_Brush_image_paint_capabilities}},
	"Brush", NULL, NULL, 7, "Brush",
	"Brush data-block for storing brush settings for painting and sculpting",
	"*", 182,
	(PropertyRNA *)&rna_ID_name, (PropertyRNA *)&rna_ID_rna_properties,
	&RNA_ID,
	NULL,
	rna_ID_refine,
	NULL,
	NULL,
	NULL,
	NULL,
	rna_ID_idprops,
	{NULL, NULL}
};

/* Brush Capabilities */
CollectionPropertyRNA rna_BrushCapabilities_rna_properties = {
	{(PropertyRNA *)&rna_BrushCapabilities_rna_type, NULL,
	-1, "rna_properties", 0, 0, 1, "Properties",
	"RNA property collection",
	0, "*",
	PROP_COLLECTION, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	BrushCapabilities_rna_properties_begin, BrushCapabilities_rna_properties_next, BrushCapabilities_rna_properties_end, BrushCapabilities_rna_properties_get, NULL, NULL, BrushCapabilities_rna_properties_lookup_string, NULL, &RNA_Property
};

PointerPropertyRNA rna_BrushCapabilities_rna_type = {
	{(PropertyRNA *)&rna_BrushCapabilities_has_overlay, (PropertyRNA *)&rna_BrushCapabilities_rna_properties,
	-1, "rna_type", 8912896, 0, 0, "RNA",
	"RNA type definition",
	0, "*",
	PROP_POINTER, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	BrushCapabilities_rna_type_get, NULL, NULL, NULL,&RNA_Struct
};

BoolPropertyRNA rna_BrushCapabilities_has_overlay = {
	{(PropertyRNA *)&rna_BrushCapabilities_has_random_texture_angle, (PropertyRNA *)&rna_BrushCapabilities_rna_type,
	-1, "has_overlay", 2, 0, 0, "Has Overlay",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	BrushCapabilities_has_overlay_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_BrushCapabilities_has_random_texture_angle = {
	{(PropertyRNA *)&rna_BrushCapabilities_has_spacing, (PropertyRNA *)&rna_BrushCapabilities_has_overlay,
	-1, "has_random_texture_angle", 2, 0, 0, "Has Random Texture Angle",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	BrushCapabilities_has_random_texture_angle_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_BrushCapabilities_has_spacing = {
	{(PropertyRNA *)&rna_BrushCapabilities_has_smooth_stroke, (PropertyRNA *)&rna_BrushCapabilities_has_random_texture_angle,
	-1, "has_spacing", 2, 0, 0, "Has Spacing",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	BrushCapabilities_has_spacing_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_BrushCapabilities_has_smooth_stroke = {
	{NULL, (PropertyRNA *)&rna_BrushCapabilities_has_spacing,
	-1, "has_smooth_stroke", 2, 0, 0, "Has Smooth Stroke",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	BrushCapabilities_has_smooth_stroke_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

StructRNA RNA_BrushCapabilities = {
	{(ContainerRNA *)&RNA_SculptToolCapabilities, (ContainerRNA *)&RNA_Brush,
	NULL,
	{(PropertyRNA *)&rna_BrushCapabilities_rna_properties, (PropertyRNA *)&rna_BrushCapabilities_has_smooth_stroke}},
	"BrushCapabilities", NULL, NULL, 4, "Brush Capabilities",
	"Read-only indications of which brush operations are supported by the current brush",
	"*", 17,
	NULL, (PropertyRNA *)&rna_BrushCapabilities_rna_properties,
	NULL,
	&RNA_Brush,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	{NULL, NULL}
};

/* Sculpt Capabilities */
CollectionPropertyRNA rna_SculptToolCapabilities_rna_properties = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_rna_type, NULL,
	-1, "rna_properties", 0, 0, 1, "Properties",
	"RNA property collection",
	0, "*",
	PROP_COLLECTION, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_rna_properties_begin, SculptToolCapabilities_rna_properties_next, SculptToolCapabilities_rna_properties_end, SculptToolCapabilities_rna_properties_get, NULL, NULL, SculptToolCapabilities_rna_properties_lookup_string, NULL, &RNA_Property
};

PointerPropertyRNA rna_SculptToolCapabilities_rna_type = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_accumulate, (PropertyRNA *)&rna_SculptToolCapabilities_rna_properties,
	-1, "rna_type", 8912896, 0, 0, "RNA",
	"RNA type definition",
	0, "*",
	PROP_POINTER, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_rna_type_get, NULL, NULL, NULL,&RNA_Struct
};

BoolPropertyRNA rna_SculptToolCapabilities_has_accumulate = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_auto_smooth, (PropertyRNA *)&rna_SculptToolCapabilities_rna_type,
	-1, "has_accumulate", 2, 0, 0, "Has Accumulate",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_accumulate_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_SculptToolCapabilities_has_auto_smooth = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_height, (PropertyRNA *)&rna_SculptToolCapabilities_has_accumulate,
	-1, "has_auto_smooth", 2, 0, 0, "Has Auto Smooth",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_auto_smooth_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_SculptToolCapabilities_has_height = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_jitter, (PropertyRNA *)&rna_SculptToolCapabilities_has_auto_smooth,
	-1, "has_height", 2, 0, 0, "Has Height",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_height_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_SculptToolCapabilities_has_jitter = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_normal_weight, (PropertyRNA *)&rna_SculptToolCapabilities_has_height,
	-1, "has_jitter", 2, 0, 0, "Has Jitter",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_jitter_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_SculptToolCapabilities_has_normal_weight = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_rake_factor, (PropertyRNA *)&rna_SculptToolCapabilities_has_jitter,
	-1, "has_normal_weight", 2, 0, 0, "Has Crease/Pinch Factor",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_normal_weight_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_SculptToolCapabilities_has_rake_factor = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_persistence, (PropertyRNA *)&rna_SculptToolCapabilities_has_normal_weight,
	-1, "has_rake_factor", 2, 0, 0, "Has Rake Factor",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_rake_factor_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_SculptToolCapabilities_has_persistence = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_pinch_factor, (PropertyRNA *)&rna_SculptToolCapabilities_has_rake_factor,
	-1, "has_persistence", 2, 0, 0, "Has Persistence",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_persistence_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_SculptToolCapabilities_has_pinch_factor = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_plane_offset, (PropertyRNA *)&rna_SculptToolCapabilities_has_persistence,
	-1, "has_pinch_factor", 2, 0, 0, "Has Pinch Factor",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_pinch_factor_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_SculptToolCapabilities_has_plane_offset = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_random_texture_angle, (PropertyRNA *)&rna_SculptToolCapabilities_has_pinch_factor,
	-1, "has_plane_offset", 2, 0, 0, "Has Plane Offset",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_plane_offset_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_SculptToolCapabilities_has_random_texture_angle = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_sculpt_plane, (PropertyRNA *)&rna_SculptToolCapabilities_has_plane_offset,
	-1, "has_random_texture_angle", 2, 0, 0, "Has Random Texture Angle",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_random_texture_angle_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_SculptToolCapabilities_has_sculpt_plane = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_secondary_color, (PropertyRNA *)&rna_SculptToolCapabilities_has_random_texture_angle,
	-1, "has_sculpt_plane", 2, 0, 0, "Has Sculpt Plane",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_sculpt_plane_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_SculptToolCapabilities_has_secondary_color = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_smooth_stroke, (PropertyRNA *)&rna_SculptToolCapabilities_has_sculpt_plane,
	-1, "has_secondary_color", 2, 0, 0, "Has Secondary Color",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_secondary_color_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_SculptToolCapabilities_has_smooth_stroke = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_space_attenuation, (PropertyRNA *)&rna_SculptToolCapabilities_has_secondary_color,
	-1, "has_smooth_stroke", 2, 0, 0, "Has Smooth Stroke",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_smooth_stroke_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_SculptToolCapabilities_has_space_attenuation = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_strength_pressure, (PropertyRNA *)&rna_SculptToolCapabilities_has_smooth_stroke,
	-1, "has_space_attenuation", 2, 0, 0, "Has Space Attenuation",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_space_attenuation_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_SculptToolCapabilities_has_strength_pressure = {
	{(PropertyRNA *)&rna_SculptToolCapabilities_has_gravity, (PropertyRNA *)&rna_SculptToolCapabilities_has_space_attenuation,
	-1, "has_strength_pressure", 2, 0, 0, "Has Strength Pressure",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_strength_pressure_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_SculptToolCapabilities_has_gravity = {
	{NULL, (PropertyRNA *)&rna_SculptToolCapabilities_has_strength_pressure,
	-1, "has_gravity", 2, 0, 0, "Has Gravity",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	SculptToolCapabilities_has_gravity_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

StructRNA RNA_SculptToolCapabilities = {
	{(ContainerRNA *)&RNA_ImapaintToolCapabilities, (ContainerRNA *)&RNA_BrushCapabilities,
	NULL,
	{(PropertyRNA *)&rna_SculptToolCapabilities_rna_properties, (PropertyRNA *)&rna_SculptToolCapabilities_has_gravity}},
	"SculptToolCapabilities", NULL, NULL, 4, "Sculpt Capabilities",
	"Read-only indications of which brush operations are supported by the current sculpt tool",
	"*", 17,
	NULL, (PropertyRNA *)&rna_SculptToolCapabilities_rna_properties,
	NULL,
	&RNA_Brush,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	{NULL, NULL}
};

/* Image Paint Capabilities */
CollectionPropertyRNA rna_ImapaintToolCapabilities_rna_properties = {
	{(PropertyRNA *)&rna_ImapaintToolCapabilities_rna_type, NULL,
	-1, "rna_properties", 0, 0, 1, "Properties",
	"RNA property collection",
	0, "*",
	PROP_COLLECTION, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	ImapaintToolCapabilities_rna_properties_begin, ImapaintToolCapabilities_rna_properties_next, ImapaintToolCapabilities_rna_properties_end, ImapaintToolCapabilities_rna_properties_get, NULL, NULL, ImapaintToolCapabilities_rna_properties_lookup_string, NULL, &RNA_Property
};

PointerPropertyRNA rna_ImapaintToolCapabilities_rna_type = {
	{(PropertyRNA *)&rna_ImapaintToolCapabilities_has_accumulate, (PropertyRNA *)&rna_ImapaintToolCapabilities_rna_properties,
	-1, "rna_type", 8912896, 0, 0, "RNA",
	"RNA type definition",
	0, "*",
	PROP_POINTER, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	ImapaintToolCapabilities_rna_type_get, NULL, NULL, NULL,&RNA_Struct
};

BoolPropertyRNA rna_ImapaintToolCapabilities_has_accumulate = {
	{(PropertyRNA *)&rna_ImapaintToolCapabilities_has_space_attenuation, (PropertyRNA *)&rna_ImapaintToolCapabilities_rna_type,
	-1, "has_accumulate", 2, 0, 0, "Has Accumulate",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	ImapaintToolCapabilities_has_accumulate_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_ImapaintToolCapabilities_has_space_attenuation = {
	{(PropertyRNA *)&rna_ImapaintToolCapabilities_has_radius, (PropertyRNA *)&rna_ImapaintToolCapabilities_has_accumulate,
	-1, "has_space_attenuation", 2, 0, 0, "Has Space Attenuation",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	ImapaintToolCapabilities_has_space_attenuation_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_ImapaintToolCapabilities_has_radius = {
	{NULL, (PropertyRNA *)&rna_ImapaintToolCapabilities_has_space_attenuation,
	-1, "has_radius", 2, 0, 0, "Has Radius",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	ImapaintToolCapabilities_has_radius_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

StructRNA RNA_ImapaintToolCapabilities = {
	{(ContainerRNA *)&RNA_BrushTextureSlot, (ContainerRNA *)&RNA_SculptToolCapabilities,
	NULL,
	{(PropertyRNA *)&rna_ImapaintToolCapabilities_rna_properties, (PropertyRNA *)&rna_ImapaintToolCapabilities_has_radius}},
	"ImapaintToolCapabilities", NULL, NULL, 4, "Image Paint Capabilities",
	"Read-only indications of which brush operations are supported by the current image paint brush",
	"*", 17,
	NULL, (PropertyRNA *)&rna_ImapaintToolCapabilities_rna_properties,
	NULL,
	&RNA_Brush,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	{NULL, NULL}
};

/* Brush Texture Slot */
FloatPropertyRNA rna_BrushTextureSlot_angle = {
	{(PropertyRNA *)&rna_BrushTextureSlot_map_mode, NULL,
	-1, "angle", 3, 0, 4, "Angle",
	"Brush texture rotation",
	0, "*",
	PROP_FLOAT, PROP_ANGLE | PROP_UNIT_ROTATION, NULL, 0, {0, 0, 0}, 0,
	rna_TextureSlot_brush_angle_update, 0, NULL, NULL,
	offsetof(MTex, rot), 4, NULL},
	BrushTextureSlot_angle_get, BrushTextureSlot_angle_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 6.2831854820f, 0.0f, 6.2831854820f, 10.0f, 3, 0.0f, NULL
};

static EnumPropertyItem rna_BrushTextureSlot_map_mode_items[7] = {
	{0, "VIEW_PLANE", 0, "View Plane", ""},
	{3, "AREA_PLANE", 0, "Area Plane", ""},
	{1, "TILED", 0, "Tiled", ""},
	{2, "3D", 0, "3D", ""},
	{4, "RANDOM", 0, "Random", ""},
	{5, "STENCIL", 0, "Stencil", ""},
	{0, NULL, 0, NULL, NULL}
};

EnumPropertyRNA rna_BrushTextureSlot_map_mode = {
	{(PropertyRNA *)&rna_BrushTextureSlot_tex_paint_map_mode, (PropertyRNA *)&rna_BrushTextureSlot_angle,
	-1, "map_mode", 3, 0, 0, "Mode",
	"",
	0, "*",
	PROP_ENUM, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_TextureSlot_update, 0, NULL, NULL,
	0, -1, NULL},
	BrushTextureSlot_map_mode_get, BrushTextureSlot_map_mode_set, NULL, NULL, NULL, NULL, rna_BrushTextureSlot_map_mode_items, 6, 0
};

static EnumPropertyItem rna_BrushTextureSlot_tex_paint_map_mode_items[6] = {
	{0, "VIEW_PLANE", 0, "View Plane", ""},
	{1, "TILED", 0, "Tiled", ""},
	{2, "3D", 0, "3D", ""},
	{4, "RANDOM", 0, "Random", ""},
	{5, "STENCIL", 0, "Stencil", ""},
	{0, NULL, 0, NULL, NULL}
};

EnumPropertyRNA rna_BrushTextureSlot_tex_paint_map_mode = {
	{(PropertyRNA *)&rna_BrushTextureSlot_mask_map_mode, (PropertyRNA *)&rna_BrushTextureSlot_map_mode,
	-1, "tex_paint_map_mode", 3, 0, 0, "Mode",
	"",
	0, "*",
	PROP_ENUM, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_TextureSlot_update, 0, NULL, NULL,
	0, -1, NULL},
	BrushTextureSlot_tex_paint_map_mode_get, BrushTextureSlot_tex_paint_map_mode_set, NULL, NULL, NULL, NULL, rna_BrushTextureSlot_tex_paint_map_mode_items, 5, 0
};

static EnumPropertyItem rna_BrushTextureSlot_mask_map_mode_items[5] = {
	{0, "VIEW_PLANE", 0, "View Plane", ""},
	{1, "TILED", 0, "Tiled", ""},
	{4, "RANDOM", 0, "Random", ""},
	{5, "STENCIL", 0, "Stencil", ""},
	{0, NULL, 0, NULL, NULL}
};

EnumPropertyRNA rna_BrushTextureSlot_mask_map_mode = {
	{(PropertyRNA *)&rna_BrushTextureSlot_use_rake, (PropertyRNA *)&rna_BrushTextureSlot_tex_paint_map_mode,
	-1, "mask_map_mode", 3, 0, 0, "Mode",
	"",
	0, "*",
	PROP_ENUM, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_TextureSlot_update, 0, NULL, NULL,
	0, -1, NULL},
	BrushTextureSlot_mask_map_mode_get, BrushTextureSlot_mask_map_mode_set, NULL, NULL, NULL, NULL, rna_BrushTextureSlot_mask_map_mode_items, 4, 0
};

BoolPropertyRNA rna_BrushTextureSlot_use_rake = {
	{(PropertyRNA *)&rna_BrushTextureSlot_use_random, (PropertyRNA *)&rna_BrushTextureSlot_mask_map_mode,
	-1, "use_rake", 3, 0, 0, "Rake",
	"",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_TextureSlot_update, 0, NULL, NULL,
	0, -1, NULL},
	BrushTextureSlot_use_rake_get, BrushTextureSlot_use_rake_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_BrushTextureSlot_use_random = {
	{(PropertyRNA *)&rna_BrushTextureSlot_random_angle, (PropertyRNA *)&rna_BrushTextureSlot_use_rake,
	-1, "use_random", 3, 0, 0, "Random",
	"",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	rna_TextureSlot_update, 0, NULL, NULL,
	0, -1, NULL},
	BrushTextureSlot_use_random_get, BrushTextureSlot_use_random_set, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

FloatPropertyRNA rna_BrushTextureSlot_random_angle = {
	{(PropertyRNA *)&rna_BrushTextureSlot_has_texture_angle_source, (PropertyRNA *)&rna_BrushTextureSlot_use_random,
	-1, "random_angle", 3, 0, 4, "Random Angle",
	"Brush texture random angle",
	0, "*",
	PROP_FLOAT, PROP_ANGLE | PROP_UNIT_ROTATION, NULL, 0, {0, 0, 0}, 0,
	rna_TextureSlot_update, 0, NULL, NULL,
	offsetof(MTex, random_angle), 4, NULL},
	BrushTextureSlot_random_angle_get, BrushTextureSlot_random_angle_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 6.2831854820f, 0.0f, 6.2831854820f, 10.0f, 3, 0.0f, NULL
};

BoolPropertyRNA rna_BrushTextureSlot_has_texture_angle_source = {
	{(PropertyRNA *)&rna_BrushTextureSlot_has_random_texture_angle, (PropertyRNA *)&rna_BrushTextureSlot_random_angle,
	-1, "has_texture_angle_source", 2, 0, 0, "Has Texture Angle Source",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	BrushTextureSlot_has_texture_angle_source_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_BrushTextureSlot_has_random_texture_angle = {
	{(PropertyRNA *)&rna_BrushTextureSlot_has_texture_angle, (PropertyRNA *)&rna_BrushTextureSlot_has_texture_angle_source,
	-1, "has_random_texture_angle", 2, 0, 0, "Has Random Texture Angle",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	BrushTextureSlot_has_random_texture_angle_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

BoolPropertyRNA rna_BrushTextureSlot_has_texture_angle = {
	{NULL, (PropertyRNA *)&rna_BrushTextureSlot_has_random_texture_angle,
	-1, "has_texture_angle", 2, 0, 0, "Has Texture Angle Source",
	NULL,
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	BrushTextureSlot_has_texture_angle_get, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

StructRNA RNA_BrushTextureSlot = {
	{(ContainerRNA *)&RNA_OperatorStrokeElement, (ContainerRNA *)&RNA_ImapaintToolCapabilities,
	NULL,
	{(PropertyRNA *)&rna_BrushTextureSlot_angle, (PropertyRNA *)&rna_BrushTextureSlot_has_texture_angle}},
	"BrushTextureSlot", NULL, NULL, 4, "Brush Texture Slot",
	"Texture slot for textures in a Brush data-block",
	"*", 166,
	(PropertyRNA *)&rna_TextureSlot_name, (PropertyRNA *)&rna_TextureSlot_rna_properties,
	&RNA_TextureSlot,
	NULL,
	NULL,
	rna_TextureSlot_path,
	NULL,
	NULL,
	NULL,
	NULL,
	{NULL, NULL}
};

/* Operator Stroke Element */
static float rna_OperatorStrokeElement_location_default[3] = {
	0.0f,
	0.0f,
	0.0f
};

FloatPropertyRNA rna_OperatorStrokeElement_location = {
	{(PropertyRNA *)&rna_OperatorStrokeElement_mouse, NULL,
	-1, "location", 1027, 0, 0, "Location",
	"",
	0, "*",
	PROP_FLOAT, PROP_XYZ | PROP_UNIT_NONE, NULL, 1, {3, 0, 0}, 3,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -10000.0f, 10000.0f, -FLT_MAX, FLT_MAX, 10.0f, 3, 0.0f, rna_OperatorStrokeElement_location_default
};

static float rna_OperatorStrokeElement_mouse_default[2] = {
	0.0f,
	0.0f
};

FloatPropertyRNA rna_OperatorStrokeElement_mouse = {
	{(PropertyRNA *)&rna_OperatorStrokeElement_pressure, (PropertyRNA *)&rna_OperatorStrokeElement_location,
	-1, "mouse", 1027, 0, 0, "Mouse",
	"",
	0, "*",
	PROP_FLOAT, PROP_XYZ | PROP_UNIT_NONE, NULL, 1, {2, 0, 0}, 2,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -10000.0f, 10000.0f, -FLT_MAX, FLT_MAX, 10.0f, 3, 0.0f, rna_OperatorStrokeElement_mouse_default
};

FloatPropertyRNA rna_OperatorStrokeElement_pressure = {
	{(PropertyRNA *)&rna_OperatorStrokeElement_size, (PropertyRNA *)&rna_OperatorStrokeElement_mouse,
	-1, "pressure", 1027, 0, 0, "Pressure",
	"Tablet pressure",
	0, "*",
	PROP_FLOAT, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 1.0f, 0.0f, 1.0f, 10.0f, 3, 0.0f, NULL
};

FloatPropertyRNA rna_OperatorStrokeElement_size = {
	{(PropertyRNA *)&rna_OperatorStrokeElement_pen_flip, (PropertyRNA *)&rna_OperatorStrokeElement_pressure,
	-1, "size", 1027, 0, 0, "Brush Size",
	"Brush Size in screen space",
	0, "*",
	PROP_FLOAT, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, FLT_MAX, 0.0f, FLT_MAX, 10.0f, 3, 0.0f, NULL
};

BoolPropertyRNA rna_OperatorStrokeElement_pen_flip = {
	{(PropertyRNA *)&rna_OperatorStrokeElement_time, (PropertyRNA *)&rna_OperatorStrokeElement_size,
	-1, "pen_flip", 1027, 0, 0, "Flip",
	"",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

FloatPropertyRNA rna_OperatorStrokeElement_time = {
	{(PropertyRNA *)&rna_OperatorStrokeElement_is_start, (PropertyRNA *)&rna_OperatorStrokeElement_pen_flip,
	-1, "time", 1027, 0, 0, "Time",
	"",
	0, "*",
	PROP_FLOAT, PROP_UNSIGNED | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0.0f, 10000.0f, 0.0f, FLT_MAX, 10.0f, 3, 0.0f, NULL
};

BoolPropertyRNA rna_OperatorStrokeElement_is_start = {
	{NULL, (PropertyRNA *)&rna_OperatorStrokeElement_time,
	-1, "is_start", 1027, 0, 0, "Is Stroke Start",
	"",
	0, "*",
	PROP_BOOLEAN, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
	NULL, 0, NULL, NULL,
	0, -1, NULL},
	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL
};

StructRNA RNA_OperatorStrokeElement = {
	{(ContainerRNA *)&RNA_CacheFile, (ContainerRNA *)&RNA_BrushTextureSlot,
	NULL,
	{(PropertyRNA *)&rna_OperatorStrokeElement_location, (PropertyRNA *)&rna_OperatorStrokeElement_is_start}},
	"OperatorStrokeElement", NULL, NULL, 4, "Operator Stroke Element",
	"",
	"*", 17,
	(PropertyRNA *)&rna_PropertyGroup_name, (PropertyRNA *)&rna_PropertyGroup_rna_properties,
	&RNA_PropertyGroup,
	NULL,
	rna_PropertyGroup_refine,
	NULL,
	rna_PropertyGroup_register,
	rna_PropertyGroup_unregister,
	NULL,
	rna_PropertyGroup_idprops,
	{NULL, NULL}
};

