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;
109 if (contrast > 0.0f) {
110 gain = 1.0f - delta * 2.0f;
111 gain = 1.0f /
math::max(gain, FLT_EPSILON);
112 offset = gain * (brightness - delta);
116 gain =
math::max(1.0f - delta * 2.0f, 0.0f);
117 offset = gain * brightness + delta;
120 std::atomic<bool> any_changed;
136 any_changed.store(any_changed | changed, std::memory_order_relaxed);
149 ot->name =
"Vertex Paint Brightness/Contrast";
150 ot->idname =
"GREASE_PENCIL_OT_vertex_color_brightness_contrast";
151 ot->description =
"Adjust vertex color brightness/contrast";
164 RNA_def_float(
ot->srna,
"brightness", 0.0f, -1.0f, 1.0f,
"Brightness",
"", -1.0f, 1.0f);
165 RNA_def_float(
ot->srna,
"contrast", 0.0f, -1.0f, 1.0f,
"Contrast",
"", -1.0f, 1.0f);
179 std::atomic<bool> any_changed;
195 hsv[0] += (hue - 0.5f);
199 else if (hsv[0] < 0.0f) {
209 any_changed.store(any_changed | changed, std::memory_order_relaxed);
222 ot->name =
"Vertex Paint Hue/Saturation/Value";
223 ot->idname =
"GREASE_PENCIL_OT_vertex_color_hsv";
224 ot->description =
"Adjust vertex color HSV values";
237 RNA_def_float(
ot->srna,
"s", 1.0f, 0.0f, 2.0f,
"Saturation",
"", 0.0f, 2.0f);
238 RNA_def_float(
ot->srna,
"v", 1.0f, 0.0f, 2.0f,
"Value",
"", 0.0f, 2.0f);
249 std::atomic<bool> any_changed;
265 any_changed.store(any_changed | changed, std::memory_order_relaxed);
278 ot->name =
"Vertex Paint Invert";
279 ot->idname =
"GREASE_PENCIL_OT_vertex_color_invert";
280 ot->description =
"Invert RGB values";
304 std::atomic<bool> any_changed;
320 any_changed.store(any_changed | changed, std::memory_order_relaxed);
333 ot->name =
"Vertex Paint Levels";
334 ot->idname =
"GREASE_PENCIL_OT_vertex_color_levels";
335 ot->description =
"Adjust levels of vertex colors";
349 ot->srna,
"offset", 0.0f, -1.0f, 1.0f,
"Offset",
"Value to add to colors", -1.0f, 1.0f);
351 ot->srna,
"gain", 1.0f, 0.0f,
FLT_MAX,
"Gain",
"Value to multiply colors by", 0.0f, 10.0f);
366 const ColorGeometry4f target_color(color_linear[0], color_linear[1], color_linear[2], 1.0f);
368 std::atomic<bool> any_changed;
393 any_changed.store(any_changed | changed, std::memory_order_relaxed);
406 ot->name =
"Vertex Paint Set Color";
407 ot->idname =
"GREASE_PENCIL_OT_vertex_color_set";
408 ot->description =
"Set active color to all selected vertex";
420 RNA_def_float(
ot->srna,
"factor", 1.0f, 0.0f, 1.0f,
"Factor",
"Mix Factor", 0.0f, 1.0f);
431 std::atomic<bool> any_changed;
439 bool changed =
false;
440 if (use_selection_mask) {
449 any_changed.store(any_changed | changed, std::memory_order_relaxed);
455 changed |=
curves.attributes_for_write().remove(
"vertex_color");
458 changed |=
curves.attributes_for_write().remove(
"fill_color");
460 any_changed.store(any_changed | changed, std::memory_order_relaxed);
473 ot->name =
"Reset Vertex Color";
474 ot->idname =
"GREASE_PENCIL_OT_stroke_reset_vertex_color";
475 ot->description =
"Reset vertex color for all or selected strokes";
const float * BKE_brush_color_get(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 DEG_id_tag_update(ID *id, unsigned int flags)
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()
bool ED_grease_pencil_any_vertex_mask_selection(const ToolSettings *tool_settings)
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 *))