452 lines
11 KiB
C
452 lines
11 KiB
C
/* SPDX-FileCopyrightText: 2005 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup DNA
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "DNA_ID.h"
|
|
#include "DNA_brush_enums.h"
|
|
#include "DNA_curve_types.h"
|
|
#include "DNA_defs.h"
|
|
#include "DNA_texture_types.h" /* for MTex */
|
|
|
|
struct CurveMapping;
|
|
struct Image;
|
|
struct MTex;
|
|
struct Material;
|
|
|
|
typedef struct BrushClone {
|
|
/** Image for clone tool. */
|
|
struct Image *image;
|
|
/** Offset of clone image from canvas. */
|
|
float offset[2];
|
|
/** Transparency for drawing of clone image. */
|
|
float alpha;
|
|
char _pad[4];
|
|
} BrushClone;
|
|
|
|
typedef struct BrushGpencilSettings {
|
|
/** Amount of smoothing to apply to newly created strokes. */
|
|
float draw_smoothfac;
|
|
/** Fill zoom factor */
|
|
float fill_factor;
|
|
/** Amount of alpha strength to apply to newly created strokes. */
|
|
float draw_strength;
|
|
/** Amount of jitter to apply to newly created strokes. */
|
|
float draw_jitter;
|
|
/** Angle when the brush has full thickness. */
|
|
float draw_angle;
|
|
/** Factor to apply when angle change (only 90 degrees). */
|
|
float draw_angle_factor;
|
|
/** Factor of randomness for pressure. */
|
|
float draw_random_press;
|
|
/** Factor of strength for strength. */
|
|
float draw_random_strength;
|
|
/** Number of times to apply smooth factor to new strokes. */
|
|
short draw_smoothlvl;
|
|
/** Number of times to subdivide new strokes. */
|
|
short draw_subdivide;
|
|
/** Layers used for fill. */
|
|
short fill_layer_mode;
|
|
short fill_direction;
|
|
|
|
/** Factor for transparency. */
|
|
float fill_threshold;
|
|
char _pad2[2];
|
|
/* Type of caps: eGPDstroke_Caps. */
|
|
int8_t caps_type;
|
|
char _pad[5];
|
|
|
|
int flag2;
|
|
|
|
/** Number of simplify steps. */
|
|
int fill_simplylvl;
|
|
/** Type of control lines drawing mode. */
|
|
int fill_draw_mode;
|
|
/** Type of gap filling extension to use. */
|
|
int fill_extend_mode;
|
|
/** Icon identifier. */
|
|
int icon_id;
|
|
|
|
/** Maximum distance before generate new point for very fast mouse movements. */
|
|
int input_samples;
|
|
/** Random factor for UV rotation. */
|
|
float uv_random;
|
|
/** Moved to 'Brush.gpencil_tool'. */
|
|
int brush_type DNA_DEPRECATED;
|
|
/** Soft, hard or stroke. */
|
|
int eraser_mode;
|
|
/** Smooth while drawing factor. */
|
|
float active_smooth;
|
|
/** Factor to apply to strength for soft eraser. */
|
|
float era_strength_f;
|
|
/** Factor to apply to thickness for soft eraser. */
|
|
float era_thickness_f;
|
|
/** Internal grease pencil drawing flags. */
|
|
int flag;
|
|
|
|
/** gradient control along y for color */
|
|
float hardness;
|
|
/** factor xy of shape for dots gradients */
|
|
float aspect_ratio[2];
|
|
/** Simplify adaptive factor */
|
|
float simplify_f;
|
|
|
|
/** Mix color-factor. */
|
|
float vertex_factor;
|
|
int vertex_mode;
|
|
|
|
/** eGP_Sculpt_Flag. */
|
|
int sculpt_flag;
|
|
/** eGP_Sculpt_Mode_Flag. */
|
|
int sculpt_mode_flag;
|
|
/** Preset type (used to reset brushes - internal). */
|
|
short preset_type;
|
|
/** Brush preselected mode (Active/Material/Vertex-color). */
|
|
short brush_draw_mode;
|
|
|
|
/** Randomness for Hue. */
|
|
float random_hue;
|
|
/** Randomness for Saturation. */
|
|
float random_saturation;
|
|
/** Randomness for Value. */
|
|
float random_value;
|
|
|
|
/** Factor to extend stroke extremes using fill tool. */
|
|
float fill_extend_fac;
|
|
/** Number of pixels to dilate fill area. */
|
|
int dilate_pixels;
|
|
|
|
struct CurveMapping *curve_sensitivity;
|
|
struct CurveMapping *curve_strength;
|
|
struct CurveMapping *curve_jitter;
|
|
struct CurveMapping *curve_rand_pressure;
|
|
struct CurveMapping *curve_rand_strength;
|
|
struct CurveMapping *curve_rand_uv;
|
|
struct CurveMapping *curve_rand_hue;
|
|
struct CurveMapping *curve_rand_saturation;
|
|
struct CurveMapping *curve_rand_value;
|
|
|
|
/** Factor for external line thickness conversion to outline. */
|
|
float outline_fac;
|
|
char _pad1[4];
|
|
|
|
/* optional link of material to replace default in context */
|
|
/** Material. */
|
|
struct Material *material;
|
|
/** Material Alternative for secondary operations. */
|
|
struct Material *material_alt;
|
|
} BrushGpencilSettings;
|
|
|
|
typedef struct BrushCurvesSculptSettings {
|
|
/** Number of curves added by the add brush. */
|
|
int add_amount;
|
|
/** Number of control points in new curves added by the add brush. */
|
|
int points_per_curve;
|
|
/* eBrushCurvesSculptFlag. */
|
|
uint32_t flag;
|
|
/** When shrinking curves, they shouldn't become shorter than this length. */
|
|
float minimum_length;
|
|
/** Length of newly added curves when it is not interpolated from other curves. */
|
|
float curve_length;
|
|
/** Minimum distance between curve root points used by the Density brush. */
|
|
float minimum_distance;
|
|
/** The initial radius of curve. */
|
|
float curve_radius;
|
|
/** How often the Density brush tries to add a new curve. */
|
|
int density_add_attempts;
|
|
/** #eBrushCurvesSculptDensityMode. */
|
|
uint8_t density_mode;
|
|
char _pad[7];
|
|
struct CurveMapping *curve_parameter_falloff;
|
|
} BrushCurvesSculptSettings;
|
|
|
|
/** Max number of propagation steps for automasking settings. */
|
|
#define AUTOMASKING_BOUNDARY_EDGES_MAX_PROPAGATION_STEPS 20
|
|
typedef struct Brush {
|
|
DNA_DEFINE_CXX_METHODS(Brush)
|
|
|
|
ID id;
|
|
|
|
struct BrushClone clone;
|
|
/** Falloff curve. */
|
|
struct CurveMapping *curve;
|
|
struct MTex mtex;
|
|
struct MTex mask_mtex;
|
|
|
|
struct Brush *toggle_brush;
|
|
|
|
struct ImBuf *icon_imbuf;
|
|
PreviewImage *preview;
|
|
/** Color gradient. */
|
|
struct ColorBand *gradient;
|
|
struct PaintCurve *paint_curve;
|
|
|
|
/** 1024 = FILE_MAX. */
|
|
char icon_filepath[1024];
|
|
|
|
float normal_weight;
|
|
/** Rake actual data (not texture), used for sculpt. */
|
|
float rake_factor;
|
|
|
|
/** Blend mode. */
|
|
short blend;
|
|
/** #eObjectMode: to see if the brush is compatible, use for display only. */
|
|
short ob_mode;
|
|
/** Brush weight. */
|
|
float weight;
|
|
/** Brush diameter. */
|
|
int size;
|
|
/** General purpose flags. */
|
|
int flag;
|
|
int flag2;
|
|
int sampling_flag;
|
|
|
|
/** Number of samples used to smooth the stroke. */
|
|
int input_samples;
|
|
|
|
/** Pressure influence for mask. */
|
|
int mask_pressure;
|
|
/** Jitter the position of the brush. */
|
|
float jitter;
|
|
/** Absolute jitter in pixels. */
|
|
int jitter_absolute;
|
|
int overlay_flags;
|
|
/** Spacing of paint operations. */
|
|
int spacing;
|
|
/** Turning radius (in pixels) for smooth stroke. */
|
|
int smooth_stroke_radius;
|
|
/** Higher values limit fast changes in the stroke direction. */
|
|
float smooth_stroke_factor;
|
|
/** Paint operations / second (airbrush). */
|
|
float rate;
|
|
|
|
/** Color. */
|
|
float rgb[3];
|
|
/** Opacity. */
|
|
float alpha;
|
|
/** Hardness */
|
|
float hardness;
|
|
/** Flow */
|
|
float flow;
|
|
/** Wet Mix */
|
|
float wet_mix;
|
|
float wet_persistence;
|
|
/** Density */
|
|
float density;
|
|
int paint_flags;
|
|
|
|
/** Tip Shape */
|
|
/* Factor that controls the shape of the brush tip by rounding the corners of a square. */
|
|
/* 0.0 value produces a square, 1.0 produces a circle. */
|
|
float tip_roundness;
|
|
float tip_scale_x;
|
|
|
|
/** Background color. */
|
|
float secondary_rgb[3];
|
|
|
|
/** Rate */
|
|
float dash_ratio;
|
|
int dash_samples;
|
|
|
|
/** The direction of movement for sculpt vertices. */
|
|
int sculpt_plane;
|
|
|
|
/** Offset for plane brushes (clay, flatten, fill, scrape). */
|
|
float plane_offset;
|
|
|
|
int gradient_spacing;
|
|
/** Source for stroke color gradient application. */
|
|
char gradient_stroke_mode;
|
|
/** Source for fill tool color gradient application. */
|
|
char gradient_fill_mode;
|
|
|
|
char _pad0;
|
|
|
|
/** Projection shape (sphere, circle). */
|
|
char falloff_shape;
|
|
float falloff_angle;
|
|
|
|
/** Active sculpt tool. */
|
|
char sculpt_tool;
|
|
/** Active sculpt tool. */
|
|
char uv_sculpt_tool;
|
|
/** Active vertex paint. */
|
|
char vertexpaint_tool;
|
|
/** Active weight paint. */
|
|
char weightpaint_tool;
|
|
/** Active image paint tool. */
|
|
char imagepaint_tool;
|
|
/** Enum eBrushMaskTool, only used if sculpt_tool is SCULPT_TOOL_MASK. */
|
|
char mask_tool;
|
|
/** Active grease pencil tool. */
|
|
char gpencil_tool;
|
|
/** Active grease pencil vertex tool. */
|
|
char gpencil_vertex_tool;
|
|
/** Active grease pencil sculpt tool. */
|
|
char gpencil_sculpt_tool;
|
|
/** Active grease pencil weight tool. */
|
|
char gpencil_weight_tool;
|
|
/** Active curves sculpt tool (#eBrushCurvesSculptTool). */
|
|
char curves_sculpt_tool;
|
|
char _pad1[5];
|
|
|
|
float autosmooth_factor;
|
|
|
|
float tilt_strength_factor;
|
|
|
|
float topology_rake_factor;
|
|
|
|
float crease_pinch_factor;
|
|
|
|
float normal_radius_factor;
|
|
float area_radius_factor;
|
|
float wet_paint_radius_factor;
|
|
|
|
float plane_trim;
|
|
/** Affectable height of brush (layer height for layer tool, i.e.). */
|
|
float height;
|
|
|
|
float texture_sample_bias;
|
|
|
|
int curve_preset;
|
|
|
|
/* Maximum distance to search fake neighbors from a vertex. */
|
|
float disconnected_distance_max;
|
|
|
|
int deform_target;
|
|
|
|
/* automasking */
|
|
int automasking_flags;
|
|
int automasking_boundary_edges_propagation_steps;
|
|
|
|
float automasking_start_normal_limit;
|
|
float automasking_start_normal_falloff;
|
|
float automasking_view_normal_limit;
|
|
float automasking_view_normal_falloff;
|
|
|
|
int elastic_deform_type;
|
|
float elastic_deform_volume_preservation;
|
|
|
|
/* snake hook */
|
|
int snake_hook_deform_type;
|
|
|
|
/* pose */
|
|
int pose_deform_type;
|
|
float pose_offset;
|
|
int pose_smooth_iterations;
|
|
int pose_ik_segments;
|
|
int pose_origin_type;
|
|
|
|
/* boundary */
|
|
int boundary_deform_type;
|
|
int boundary_falloff_type;
|
|
float boundary_offset;
|
|
|
|
/* cloth */
|
|
int cloth_deform_type;
|
|
int cloth_force_falloff_type;
|
|
int cloth_simulation_area_type;
|
|
|
|
float cloth_mass;
|
|
float cloth_damping;
|
|
|
|
float cloth_sim_limit;
|
|
float cloth_sim_falloff;
|
|
|
|
float cloth_constraint_softbody_strength;
|
|
|
|
/* smooth */
|
|
int smooth_deform_type;
|
|
float surface_smooth_shape_preservation;
|
|
float surface_smooth_current_vertex;
|
|
int surface_smooth_iterations;
|
|
|
|
/* multiplane scrape */
|
|
float multiplane_scrape_angle;
|
|
|
|
/* smear */
|
|
int smear_deform_type;
|
|
|
|
/* slide/relax */
|
|
int slide_deform_type;
|
|
|
|
/* overlay */
|
|
int texture_overlay_alpha;
|
|
int mask_overlay_alpha;
|
|
int cursor_overlay_alpha;
|
|
|
|
float unprojected_radius;
|
|
|
|
/* soften/sharpen */
|
|
float sharp_threshold;
|
|
int blur_kernel_radius;
|
|
int blur_mode;
|
|
|
|
/* fill tool */
|
|
float fill_threshold;
|
|
|
|
float add_col[4];
|
|
float sub_col[4];
|
|
|
|
float stencil_pos[2];
|
|
float stencil_dimension[2];
|
|
|
|
float mask_stencil_pos[2];
|
|
float mask_stencil_dimension[2];
|
|
|
|
struct BrushGpencilSettings *gpencil_settings;
|
|
struct BrushCurvesSculptSettings *curves_sculpt_settings;
|
|
|
|
int automasking_cavity_blur_steps;
|
|
float automasking_cavity_factor;
|
|
|
|
struct CurveMapping *automasking_cavity_curve;
|
|
} Brush;
|
|
|
|
/* Struct to hold palette colors for sorting. */
|
|
typedef struct tPaletteColorHSV {
|
|
float rgb[3];
|
|
float value;
|
|
float h;
|
|
float s;
|
|
float v;
|
|
} tPaletteColorHSV;
|
|
|
|
typedef struct PaletteColor {
|
|
struct PaletteColor *next, *prev;
|
|
/* two values, one to store rgb, other to store values for sculpt/weight */
|
|
float rgb[3];
|
|
float value;
|
|
} PaletteColor;
|
|
|
|
typedef struct Palette {
|
|
ID id;
|
|
|
|
/** Pointer to individual colors. */
|
|
ListBase colors;
|
|
|
|
int active_color;
|
|
char _pad[4];
|
|
} Palette;
|
|
|
|
typedef struct PaintCurvePoint {
|
|
/** Bezier handle. */
|
|
BezTriple bez;
|
|
/** Pressure on that point. */
|
|
float pressure;
|
|
} PaintCurvePoint;
|
|
|
|
typedef struct PaintCurve {
|
|
ID id;
|
|
/** Points of curve. */
|
|
PaintCurvePoint *points;
|
|
int tot_points;
|
|
/** Index where next point will be added. */
|
|
int add_index;
|
|
} PaintCurve;
|