71 if (selection.is_empty()) {
89 const float2 &co = view_positions[point_i];
91 scene, brush, co, extension_sample,
params.multi_frame_falloff);
92 if (influence <= 0.0f) {
95 const float noise = 2.0f *
hash_rng(
seed, 5678, point_i) - 1.0f;
96 positions[point_i] = projection_fn(deformation.positions[point_i],
97 sideways * influence * noise);
100 params.drawing.tag_positions_changed();
106 const float2 &co = view_positions[point_i];
108 scene, brush, co, extension_sample,
params.multi_frame_falloff);
109 if (influence <= 0.0f) {
112 const float noise = 2.0f *
hash_rng(
seed, 1212, point_i) - 1.0f;
113 opacities[point_i] =
math::clamp(opacities[point_i] + influence * noise, 0.0f, 1.0f);
120 const float2 &co = view_positions[point_i];
122 scene, brush, co, extension_sample,
params.multi_frame_falloff);
123 if (influence <= 0.0f) {
126 const float noise = 2.0f *
hash_rng(
seed, 1212, point_i) - 1.0f;
127 radii[point_i] =
math::max(radii[point_i] + influence * noise * 0.001f, 0.0f);
129 curves.tag_radii_changed();
136 const float2 &co = view_positions[point_i];
138 scene, brush, co, extension_sample,
params.multi_frame_falloff);
139 if (influence <= 0.0f) {
142 const float noise = 2.0f *
hash_rng(
seed, 1212, point_i) - 1.0f;
144 rotations.
span[point_i] + influence * noise, -
float(
M_PI_2),
float(
M_PI_2));
157 return std::make_unique<RandomizeOperation>(stroke_mode);
Scene * CTX_data_scene(const bContext *C)
Low-level operations for curves.
Low-level operations for grease pencil.
Paint * BKE_paint_get_active_from_context(const bContext *C)
Brush * BKE_paint_brush(Paint *paint)
BLI_INLINE float BLI_hash_int_01(unsigned int k)
BLI_INLINE unsigned int BLI_hash_int_3d(unsigned int kx, unsigned int ky, unsigned int kz)
@ GP_SCULPT_FLAGMODE_APPLY_UV
@ GP_SCULPT_FLAGMODE_APPLY_POSITION
@ GP_SCULPT_FLAGMODE_APPLY_THICKNESS
@ GP_SCULPT_FLAGMODE_APPLY_STRENGTH
#define GPENCIL_ANY_SCULPT_MASK(flag)
eGP_Sculpt_SelectMaskFlag
static unsigned long seed
static RandomNumberGenerator from_random_seed()
float2 mouse_delta(const InputSample &input_sample) const
GreasePencilStrokeOperationCommon()
void stroke_extended(const InputSample &extension_sample)
void init_stroke(const bContext &C, const InputSample &start_sample)
void foreach_editable_drawing(const bContext &C, FunctionRef< bool(const GreasePencilStrokeParams ¶ms)> fn) const
void on_stroke_done(const bContext &) override
void on_stroke_begin(const bContext &C, const InputSample &start_sample) override
void on_stroke_extended(const bContext &C, const InputSample &extension_sample) override
uint32_t unique_seed() const
IndexMask point_selection_mask(const GreasePencilStrokeParams ¶ms, const bool use_masking, IndexMaskMemory &memory)
std::unique_ptr< GreasePencilStrokeOperation > new_randomize_operation(BrushStrokeMode stroke_mode)
Array< float2 > calculate_view_positions(const GreasePencilStrokeParams ¶ms, const IndexMask &selection)
float brush_point_influence(const Scene &scene, const Brush &brush, const float2 &co, const InputSample &sample, float multi_frame_falloff)
bke::crazyspace::GeometryDeformation get_drawing_deformation(const GreasePencilStrokeParams ¶ms)
static float hash_rng(uint32_t seed1, uint32_t seed2, int index)
std::function< float3(const float3 position, const float2 &screen_delta)> DeltaProjectionFunc
T clamp(const T &a, const T &min, const T &max)
MatBase< T, NumCol, NumRow > normalize(const MatBase< T, NumCol, NumRow > &a)
T max(const T &a, const T &b)
VecBase< float, 2 > float2
struct BrushGpencilSettings * gpencil_settings
MutableVArraySpan< T > span