Blender V5.0
BKE_brush.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
12
13#include <optional>
14
15#include "BLI_span.hh"
16
17#include "DNA_brush_enums.h"
18#include "DNA_color_types.h"
19#include "DNA_object_enums.h"
20#include "DNA_userdef_enums.h"
21
22enum class PaintMode : int8_t;
23struct Brush;
24struct ImBuf;
25struct ImagePool;
26struct Main;
27struct MTex;
28struct Paint;
29struct Scene;
31
32/* Globals for brush execution. */
33
36
37/* Data-block functions. */
38
43Brush *BKE_brush_add(Main *bmain, const char *name, eObjectMode ob_mode);
47bool BKE_brush_delete(Main *bmain, Brush *brush);
48
68 Brush *brush,
69 eDupli_ID_Flags dupflag,
70 /*eLibIDDuplicateFlags*/ uint duplicate_options);
75
77
90
92
93void BKE_brush_jitter_pos(const Paint &paint,
94 const Brush &brush,
95 const float pos[2],
96 float jitterpos[2]);
98
99/* Brush curve. */
100
105
110 const CurveMapping *cumap,
111 blender::Span<float> distances,
112 float brush_radius,
117float BKE_brush_curve_strength_clamped(const Brush *br, float p, float len);
122 const CurveMapping *cumap,
123 float distance,
124 float brush_radius);
125float BKE_brush_curve_strength(const Brush *br, float p, float len);
126
127/* Sampling. */
128
136float BKE_brush_sample_tex_3d(const Paint *paint,
137 const Brush *br,
138 const MTex *mtex,
139 const float point[3],
140 float rgba[4],
141 int thread,
142 ImagePool *pool);
144 const Paint *paint, Brush *br, const float point[2], int thread, ImagePool *pool);
145
152const MTex *BKE_brush_mask_texture_get(const Brush *brush, eObjectMode object_mode);
153
160const MTex *BKE_brush_color_texture_get(const Brush *brush, eObjectMode object_mode);
161
165ImBuf *BKE_brush_gen_radial_control_imbuf(Brush *br, bool secondary, bool display_gradient);
166
167/* Unified strength size and color. */
168
181
182const float *BKE_brush_color_get(const Paint *paint, const Brush *brush);
183std::optional<BrushColorJitterSettings> BKE_brush_color_jitter_get_settings(const Paint *paint,
184 const Brush *brush);
185const float *BKE_brush_secondary_color_get(const Paint *paint, const Brush *brush);
186void BKE_brush_color_set(Paint *paint, Brush *brush, const float color[3]);
187
190
191int BKE_brush_size_get(const Paint *paint, const Brush *brush);
192void BKE_brush_size_set(Paint *paint, Brush *brush, int size);
193float BKE_brush_radius_get(const Paint *paint, const Brush *brush);
194
195float BKE_brush_unprojected_size_get(const Paint *paint, const Brush *brush);
196void BKE_brush_unprojected_size_set(Paint *paint, Brush *brush, float unprojected_size);
197float BKE_brush_unprojected_radius_get(const Paint *paint, const Brush *brush);
198
199float BKE_brush_alpha_get(const Paint *paint, const Brush *brush);
200void BKE_brush_alpha_set(Paint *paint, Brush *brush, float alpha);
201float BKE_brush_weight_get(const Paint *paint, const Brush *brush);
202void BKE_brush_weight_set(Paint *paint, Brush *brush, float value);
203
204int BKE_brush_input_samples_get(const Paint *paint, const Brush *brush);
205void BKE_brush_input_samples_set(Paint *paint, Brush *brush, int value);
206
207bool BKE_brush_use_locked_size(const Paint *paint, const Brush *brush);
208bool BKE_brush_use_alpha_pressure(const Brush *brush);
209bool BKE_brush_use_size_pressure(const Brush *brush);
210
214void BKE_brush_scale_unprojected_size(float *unprojected_size,
215 int new_brush_size,
216 int old_brush_size);
217
221void BKE_brush_scale_size(int *r_brush_size,
222 float new_unprojected_size,
223 float old_unprojected_size);
224
225/* Returns true if a brush requires a cube
226 * (often presented to the user as a square) tip inside a specific paint mode.
227 */
228bool BKE_brush_has_cube_tip(const Brush *brush, PaintMode paint_mode);
229
230/* debugging only */
232
233/* -------------------------------------------------------------------- */
238
240bool supports_dyntopo(const Brush &brush);
241bool supports_accumulate(const Brush &brush);
243bool supports_auto_smooth(const Brush &brush);
244bool supports_height(const Brush &brush);
246bool supports_plane_depth(const Brush &brush);
247bool supports_jitter(const Brush &brush);
249bool supports_rake_factor(const Brush &brush);
250bool supports_persistence(const Brush &brush);
255bool supports_color(const Brush &brush);
264bool supports_gravity(const Brush &brush);
265bool supports_tilt(const Brush &brush);
266} // namespace blender::bke::brush
267
void BKE_brush_scale_unprojected_size(float *unprojected_size, int new_brush_size, int old_brush_size)
Definition brush.cc:1320
float BKE_brush_unprojected_size_get(const Paint *paint, const Brush *brush)
Definition brush.cc:1308
bool BKE_brush_use_alpha_pressure(const Brush *brush)
Definition brush.cc:1290
float BKE_brush_alpha_get(const Paint *paint, const Brush *brush)
Definition brush.cc:1357
Brush * BKE_brush_add(Main *bmain, const char *name, eObjectMode ob_mode)
Definition brush.cc:627
const MTex * BKE_brush_color_texture_get(const Brush *brush, eObjectMode object_mode)
Definition brush.cc:912
float BKE_brush_sample_tex_3d(const Paint *paint, const Brush *br, const MTex *mtex, const float point[3], float rgba[4], int thread, ImagePool *pool)
Definition brush.cc:920
void BKE_brush_color_sync_legacy(Brush *brush)
Definition brush.cc:1227
const float * BKE_brush_color_get(const Paint *paint, const Brush *brush)
Definition brush.cc:1161
float BKE_brush_curve_strength(eBrushCurvePreset preset, const CurveMapping *cumap, float distance, float brush_radius)
Definition brush.cc:1577
void BKE_brush_input_samples_set(Paint *paint, Brush *brush, int value)
Definition brush.cc:1391
const float * BKE_brush_secondary_color_get(const Paint *paint, const Brush *brush)
Definition brush.cc:1205
float BKE_brush_sample_masktex(const Paint *paint, Brush *br, const float point[2], int thread, ImagePool *pool)
Definition brush.cc:1043
void BKE_brush_scale_size(int *r_brush_size, float new_unprojected_size, float old_unprojected_size)
Definition brush.cc:1332
bool BKE_brush_use_locked_size(const Paint *paint, const Brush *brush)
Definition brush.cc:1277
std::optional< BrushColorJitterSettings > BKE_brush_color_jitter_get_settings(const Paint *paint, const Brush *brush)
Definition brush.cc:1170
bool BKE_brush_use_size_pressure(const Brush *brush)
Definition brush.cc:1285
float BKE_brush_radius_get(const Paint *paint, const Brush *brush)
Definition brush.cc:1272
bool BKE_brush_has_cube_tip(const Brush *brush, PaintMode paint_mode)
Definition brush.cc:1707
void BKE_brush_randomize_texture_coords(Paint *paint, bool mask)
Definition brush.cc:1433
void BKE_brush_init_curves_sculpt_settings(Brush *brush)
Definition brush.cc:748
void BKE_brush_system_init()
Definition brush.cc:556
ImBuf * BKE_brush_gen_radial_control_imbuf(Brush *br, bool secondary, bool display_gradient)
Definition brush.cc:1677
void BKE_brush_curve_preset(Brush *b, eCurveMappingPreset preset)
Definition brush.cc:886
void BKE_brush_color_set(Paint *paint, Brush *brush, const float color[3])
Definition brush.cc:1213
float BKE_brush_unprojected_radius_get(const Paint *paint, const Brush *brush)
Definition brush.cc:1315
void BKE_brush_jitter_pos(const Paint &paint, const Brush &brush, const float pos[2], float jitterpos[2])
Definition brush.cc:1406
void BKE_brush_size_set(Paint *paint, Brush *brush, int size)
Definition brush.cc:1248
Brush * BKE_brush_duplicate(Main *bmain, Brush *brush, eDupli_ID_Flags dupflag, uint duplicate_options)
Definition brush.cc:690
void BKE_brush_init_gpencil_settings(Brush *brush)
Definition brush.cc:648
void BKE_brush_debug_print_state(Brush *br)
Definition brush.cc:781
void BKE_brush_unprojected_size_set(Paint *paint, Brush *brush, float unprojected_size)
Definition brush.cc:1295
bool BKE_brush_delete(Main *bmain, Brush *brush)
Definition brush.cc:674
void BKE_brush_weight_set(Paint *paint, Brush *brush, float value)
Definition brush.cc:1371
void BKE_brush_alpha_set(Paint *paint, Brush *brush, float alpha)
Definition brush.cc:1344
int BKE_brush_input_samples_get(const Paint *paint, const Brush *brush)
Definition brush.cc:1384
void BKE_brush_tag_unsaved_changes(Brush *brush)
Definition brush.cc:764
float BKE_brush_curve_strength_clamped(const Brush *br, float p, float len)
Definition brush.cc:1637
void BKE_brush_calc_curve_factors(eBrushCurvePreset preset, const CurveMapping *cumap, blender::Span< float > distances, float brush_radius, blender::MutableSpan< float > factors)
Definition brush.cc:1448
int BKE_brush_size_get(const Paint *paint, const Brush *brush)
Definition brush.cc:1264
const MTex * BKE_brush_mask_texture_get(const Brush *brush, eObjectMode object_mode)
Definition brush.cc:904
float BKE_brush_weight_get(const Paint *paint, const Brush *brush)
Definition brush.cc:1364
void BKE_brush_system_exit()
Definition brush.cc:562
Brush * BKE_brush_first_search(Main *bmain, eObjectMode ob_mode)
Definition brush.cc:771
PaintMode
unsigned int uint
eBrushCurvePreset
eCurveMappingPreset
eObjectMode
eDupli_ID_Flags
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
uint pos
float distance(VecOp< float, D >, VecOp< float, D >) RET
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
bool supports_sculpt_plane(const Brush &brush)
Definition brush.cc:1854
bool supports_secondary_cursor_color(const Brush &brush)
Definition brush.cc:1867
bool supports_auto_smooth(const Brush &brush)
Definition brush.cc:1786
bool supports_jitter(const Brush &brush)
Definition brush.cc:1807
bool supports_space_attenuation(const Brush &brush)
Definition brush.cc:1892
bool supports_size_pressure(const Brush &brush)
Definition brush.cc:1925
bool supports_persistence(const Brush &brush)
Definition brush.cc:1827
bool supports_tilt(const Brush &brush)
Definition brush.cc:1967
bool supports_inverted_direction(const Brush &brush)
Definition brush.cc:1937
bool supports_auto_smooth_pressure(const Brush &brush)
Definition brush.cc:1929
bool supports_rake_factor(const Brush &brush)
Definition brush.cc:1823
bool supports_plane_depth(const Brush &brush)
Definition brush.cc:1803
bool supports_accumulate(const Brush &brush)
Definition brush.cc:1760
bool supports_gravity(const Brush &brush)
Definition brush.cc:1954
bool supports_hardness_pressure(const Brush &brush)
Definition brush.cc:1933
bool supports_smooth_stroke(const Brush &brush)
Definition brush.cc:1882
bool supports_plane_offset(const Brush &brush)
Definition brush.cc:1838
bool supports_pinch_factor(const Brush &brush)
Definition brush.cc:1831
bool supports_color(const Brush &brush)
Definition brush.cc:1863
bool supports_random_texture_angle(const Brush &brush)
Definition brush.cc:1846
bool supports_strength_pressure(const Brush &brush)
Definition brush.cc:1921
bool supports_dyntopo(const Brush &brush)
Definition brush.cc:1736
bool supports_height(const Brush &brush)
Definition brush.cc:1795
bool supports_topology_rake(const Brush &brush)
Definition brush.cc:1775
bool supports_plane_height(const Brush &brush)
Definition brush.cc:1799
bool supports_normal_weight(const Brush &brush)
Definition brush.cc:1816
const char * name
CurveMapping * curve_sat_jitter
Definition BKE_brush.hh:178
CurveMapping * curve_val_jitter
Definition BKE_brush.hh:179
CurveMapping * curve_hue_jitter
Definition BKE_brush.hh:177
uint len