37 {0,
nullptr, 0,
nullptr,
nullptr},
44 const bool use_selection_mask,
52 const IndexMask points = use_selection_mask ?
71 const IndexMask strokes = use_selection_mask ?
100 float delta = contrast / 2.0f;
110 if (contrast > 0.0f) {
111 gain = 1.0f - delta * 2.0f;
112 gain = 1.0f /
math::max(gain, FLT_EPSILON);
113 offset = gain * (brightness - delta);
117 gain =
math::max(1.0f - delta * 2.0f, 0.0f);
118 offset = gain * brightness + delta;
121 std::atomic<bool> any_changed;
137 any_changed.store(any_changed | changed, std::memory_order_relaxed);
150 ot->name =
"Vertex Paint Brightness/Contrast";
151 ot->idname =
"GREASE_PENCIL_OT_vertex_color_brightness_contrast";
152 ot->description =
"Adjust vertex color brightness/contrast";
165 RNA_def_float(
ot->srna,
"brightness", 0.0f, -1.0f, 1.0f,
"Brightness",
"", -1.0f, 1.0f);
166 RNA_def_float(
ot->srna,
"contrast", 0.0f, -1.0f, 1.0f,
"Contrast",
"", -1.0f, 1.0f);
181 std::atomic<bool> any_changed;
197 hsv[0] += (hue - 0.5f);
201 else if (hsv[0] < 0.0f) {
211 any_changed.store(any_changed | changed, std::memory_order_relaxed);
224 ot->name =
"Vertex Paint Hue/Saturation/Value";
225 ot->idname =
"GREASE_PENCIL_OT_vertex_color_hsv";
226 ot->description =
"Adjust vertex color HSV values";
239 RNA_def_float(
ot->srna,
"s", 1.0f, 0.0f, 2.0f,
"Saturation",
"", 0.0f, 2.0f);
240 RNA_def_float(
ot->srna,
"v", 1.0f, 0.0f, 2.0f,
"Value",
"", 0.0f, 2.0f);
252 std::atomic<bool> any_changed;
268 any_changed.store(any_changed | changed, std::memory_order_relaxed);
281 ot->name =
"Vertex Paint Invert";
282 ot->idname =
"GREASE_PENCIL_OT_vertex_color_invert";
283 ot->description =
"Invert RGB values";
308 std::atomic<bool> any_changed;
324 any_changed.store(any_changed | changed, std::memory_order_relaxed);
337 ot->name =
"Vertex Paint Levels";
338 ot->idname =
"GREASE_PENCIL_OT_vertex_color_levels";
339 ot->description =
"Adjust levels of vertex colors";
353 ot->srna,
"offset", 0.0f, -1.0f, 1.0f,
"Offset",
"Value to add to colors", -1.0f, 1.0f);
355 ot->srna,
"gain", 1.0f, 0.0f,
FLT_MAX,
"Gain",
"Value to multiply colors by", 0.0f, 10.0f);
372 const ColorGeometry4f target_color(color_linear[0], color_linear[1], color_linear[2], 1.0f);
374 std::atomic<bool> any_changed;
399 any_changed.store(any_changed | changed, std::memory_order_relaxed);
412 ot->name =
"Vertex Paint Set Color";
413 ot->idname =
"GREASE_PENCIL_OT_vertex_color_set";
414 ot->description =
"Set active color to all selected vertex";
426 RNA_def_float(
ot->srna,
"factor", 1.0f, 0.0f, 1.0f,
"Factor",
"Mix Factor", 0.0f, 1.0f);
438 std::atomic<bool> any_changed;
446 bool changed =
false;
447 if (use_selection_mask) {
456 any_changed.store(any_changed | changed, std::memory_order_relaxed);
462 changed |=
curves.attributes_for_write().remove(
"vertex_color");
465 changed |=
curves.attributes_for_write().remove(
"fill_color");
467 any_changed.store(any_changed | changed, std::memory_order_relaxed);
480 ot->name =
"Reset Vertex Color";
481 ot->idname =
"GREASE_PENCIL_OT_stroke_reset_vertex_color";
482 ot->description =
"Reset vertex color for all or selected strokes";
const float * BKE_brush_color_get(const Scene *scene, const Paint *paint, const Brush *brush)
Object * CTX_data_active_object(const bContext *C)
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)
void hsv_to_rgb_v(const float hsv[3], float r_rgb[3])
void rgb_to_hsv_v(const float rgb[3], float r_hsv[3])
void srgb_to_linearrgb_v3_v3(float linear[3], const float srgb[3])
void DEG_id_tag_update(ID *id, unsigned int flags)
#define GPENCIL_ANY_VERTEX_MASK(flag)
eGP_vertex_SelectMaskFlag
bool contains(StringRef attribute_id) const
AttributeAccessor attributes() const
bke::CurvesGeometry & strokes_for_write()
const bke::CurvesGeometry & strokes() const
MutableSpan< ColorGeometry4f > fill_colors_for_write()
MutableSpan< ColorGeometry4f > vertex_colors_for_write()
void foreach_index(Fn &&fn) const
void ED_operatortypes_grease_pencil_vertex_paint()
IndexMask retrieve_editable_and_selected_strokes(Object &object, const bke::greasepencil::Drawing &drawing, int layer_index, IndexMaskMemory &memory)
IndexMask retrieve_editable_points(Object &object, const bke::greasepencil::Drawing &drawing, int layer_index, IndexMaskMemory &memory)
static const EnumPropertyItem prop_grease_pencil_vertex_mode[]
static void GREASE_PENCIL_OT_vertex_color_levels(wmOperatorType *ot)
bool grease_pencil_vertex_painting_poll(bContext *C)
static wmOperatorStatus grease_pencil_vertex_paint_set_exec(bContext *C, wmOperator *op)
static wmOperatorStatus grease_pencil_vertex_paint_invert_exec(bContext *C, wmOperator *op)
static wmOperatorStatus grease_pencil_vertex_paint_hsv_exec(bContext *C, wmOperator *op)
static void GREASE_PENCIL_OT_stroke_reset_vertex_color(wmOperatorType *ot)
static wmOperatorStatus grease_pencil_vertex_paint_brightness_contrast_exec(bContext *C, wmOperator *op)
IndexMask retrieve_editable_and_selected_points(Object &object, const bke::greasepencil::Drawing &drawing, int layer_index, IndexMaskMemory &memory)
static void GREASE_PENCIL_OT_vertex_color_brightness_contrast(wmOperatorType *ot)
static void GREASE_PENCIL_OT_vertex_color_set(wmOperatorType *ot)
static wmOperatorStatus grease_pencil_vertex_paint_reset_exec(bContext *C, wmOperator *op)
static wmOperatorStatus grease_pencil_vertex_paint_levels_exec(bContext *C, wmOperator *op)
static void GREASE_PENCIL_OT_vertex_color_invert(wmOperatorType *ot)
static void GREASE_PENCIL_OT_vertex_color_hsv(wmOperatorType *ot)
static bool apply_color_operation_for_mode(const VertexColorMode mode, Object &object, MutableDrawingInfo &info, const bool use_selection_mask, Fn &&fn)
IndexMask retrieve_editable_strokes(Object &object, const bke::greasepencil::Drawing &drawing, int layer_index, IndexMaskMemory &memory)
Vector< MutableDrawingInfo > retrieve_editable_drawings(const Scene &scene, GreasePencil &grease_pencil)
T interpolate(const T &a, const T &b, const FactorT &t)
T max(const T &a, const T &b)
void parallel_for_each(Range &&range, const Function &function)
ColorSceneLinear4f< eAlpha::Premultiplied > ColorGeometry4f
VecBase< float, 3 > float3
float RNA_float_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
struct ToolSettings * toolsettings
bke::greasepencil::Drawing & drawing
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_operatortype_append(void(*opfunc)(wmOperatorType *))