From 80fe21fa844ded105a36f55eaa4aff34b03bf65f Mon Sep 17 00:00:00 2001 From: Pratik Borhade Date: Tue, 26 Mar 2024 16:37:08 +0530 Subject: [PATCH 1/9] GPv3: Lock material layer property --- .../bl_ui/properties_data_grease_pencil.py | 2 ++ .../intern/draw_cache_impl_grease_pencil.cc | 4 +-- .../intern/grease_pencil_edit.cc | 31 ++++++++++--------- .../intern/grease_pencil_material.cc | 2 +- .../intern/grease_pencil_select.cc | 12 +++---- .../intern/grease_pencil_utils.cc | 24 +++++++++----- .../editors/include/ED_grease_pencil.hh | 7 +++-- .../editors/space_view3d/view3d_select.cc | 10 +++--- .../transform_convert_grease_pencil.cc | 2 +- .../makesdna/DNA_grease_pencil_types.h | 1 + .../makesrna/intern/rna_grease_pencil.cc | 8 +++++ 11 files changed, 62 insertions(+), 41 deletions(-) diff --git a/scripts/startup/bl_ui/properties_data_grease_pencil.py b/scripts/startup/bl_ui/properties_data_grease_pencil.py index 9f374a7d6dc..7f52a464718 100644 --- a/scripts/startup/bl_ui/properties_data_grease_pencil.py +++ b/scripts/startup/bl_ui/properties_data_grease_pencil.py @@ -83,6 +83,7 @@ class GREASE_PENCIL_MT_grease_pencil_add_layer_extra(Menu): def draw(self, context): layout = self.layout grease_pencil = context.object.data + layer = grease_pencil.layers.active space = context.space_data if space.type == 'PROPERTIES': @@ -102,6 +103,7 @@ class GREASE_PENCIL_MT_grease_pencil_add_layer_extra(Menu): layout.separator() layout.prop(grease_pencil, "use_autolock_layers", text="Autolock Inactive Layers") + layout.prop(layer, "lock_material") class DATA_PT_grease_pencil_layers(DataButtonsPanel, Panel): diff --git a/source/blender/draw/intern/draw_cache_impl_grease_pencil.cc b/source/blender/draw/intern/draw_cache_impl_grease_pencil.cc index 41690c54f19..8104bb5d038 100644 --- a/source/blender/draw/intern/draw_cache_impl_grease_pencil.cc +++ b/source/blender/draw/intern/draw_cache_impl_grease_pencil.cc @@ -277,7 +277,7 @@ static void grease_pencil_edit_batch_ensure(Object &object, const VArray cyclic = curves.cyclic(); IndexMaskMemory memory; const IndexMask editable_strokes = ed::greasepencil::retrieve_editable_strokes( - object, info.drawing, memory); + object, info.drawing, info.layer_index, memory); /* Assumes that if the ".selection" attribute does not exist, all points are selected. */ const VArray selection_float = *attributes.lookup_or_default( @@ -347,7 +347,7 @@ static void grease_pencil_edit_batch_ensure(Object &object, const VArray cyclic = curves.cyclic(); IndexMaskMemory memory; const IndexMask editable_strokes = ed::greasepencil::retrieve_editable_strokes( - object, info.drawing, memory); + object, info.drawing, info.layer_index, memory); /* Fill line indices. */ editable_strokes.foreach_index([&](const int curve_i) { diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc index 3524274ef81..3639a2541ef 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc @@ -80,7 +80,7 @@ static int grease_pencil_stroke_smooth_exec(bContext *C, wmOperator *op) IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info.drawing, memory); + *object, info, memory); if (strokes.is_empty()) { return; } @@ -242,7 +242,7 @@ static int grease_pencil_stroke_simplify_exec(bContext *C, wmOperator *op) IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info.drawing, memory); + *object, info, memory); if (strokes.is_empty()) { return; } @@ -452,7 +452,7 @@ static int grease_pencil_delete_exec(bContext *C, wmOperator * /*op*/) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask elements = ed::greasepencil::retrieve_editable_and_selected_elements( - *object, info.drawing, selection_domain, memory); + *object, info, selection_domain, memory); if (elements.is_empty()) { return; } @@ -768,7 +768,7 @@ static int grease_pencil_stroke_material_set_exec(bContext *C, wmOperator *op) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info.drawing, memory); + *object, info, memory); if (strokes.is_empty()) { return; } @@ -843,7 +843,7 @@ static int grease_pencil_cyclical_set_exec(bContext *C, wmOperator *op) IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info.drawing, memory); + *object, info, memory); if (strokes.is_empty()) { return; } @@ -918,7 +918,7 @@ static int grease_pencil_set_active_material_exec(bContext *C, wmOperator * /*op for (const MutableDrawingInfo &info : drawings) { IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info.drawing, memory); + *object, info, memory); if (strokes.is_empty()) { continue; } @@ -966,7 +966,7 @@ static int grease_pencil_set_uniform_thickness_exec(bContext *C, wmOperator *op) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info.drawing, memory); + *object, info, memory); if (strokes.is_empty()) { return; } @@ -1023,7 +1023,7 @@ static int grease_pencil_set_uniform_opacity_exec(bContext *C, wmOperator *op) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info.drawing, memory); + *object, info, memory); if (strokes.is_empty()) { return; } @@ -1078,7 +1078,7 @@ static int grease_pencil_stroke_switch_direction_exec(bContext *C, wmOperator * threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info.drawing, memory); + *object, info, memory); if (strokes.is_empty()) { return; } @@ -1155,7 +1155,7 @@ static int grease_pencil_caps_set_exec(bContext *C, wmOperator *op) bke::CurvesGeometry &curves = info.drawing.strokes_for_write(); IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info.drawing, memory); + *object, info, memory); if (strokes.is_empty()) { return; } @@ -1330,7 +1330,7 @@ static int grease_pencil_duplicate_exec(bContext *C, wmOperator * /*op*/) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask elements = retrieve_editable_and_selected_elements( - *object, info.drawing, selection_domain, memory); + *object, info, selection_domain, memory); if (elements.is_empty()) { return; } @@ -1382,7 +1382,7 @@ static int grease_pencil_clean_loose_exec(bContext *C, wmOperator *op) IndexMaskMemory memory; const IndexMask editable_strokes = ed::greasepencil::retrieve_editable_strokes( - *object, info.drawing, memory); + *object, info.drawing, info.layer_index, memory); const IndexMask curves_to_delete = IndexMask::from_predicate( editable_strokes, GrainSize(4096), memory, [&](const int i) { @@ -1445,7 +1445,7 @@ static int gpencil_stroke_subdivide_exec(bContext *C, wmOperator *op) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info.drawing, memory); + *object, info, memory); if (strokes.is_empty()) { return; } @@ -1641,7 +1641,7 @@ static int grease_pencil_stroke_reorder_exec(bContext *C, wmOperator *op) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info.drawing, memory); + *object, info, memory); if (strokes.is_empty()) { return; } @@ -1986,7 +1986,8 @@ static bool grease_pencil_separate_layer(bContext &C, for (const MutableDrawingInfo &info : drawings_src) { bke::CurvesGeometry &curves_src = info.drawing.strokes_for_write(); IndexMaskMemory memory; - const IndexMask strokes = retrieve_editable_strokes(object_src, info.drawing, memory); + const IndexMask strokes = retrieve_editable_strokes( + object_src, info.drawing, info.layer_index, memory); if (strokes.is_empty()) { continue; } diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_material.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_material.cc index 74529d95aba..85692239844 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_material.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_material.cc @@ -278,7 +278,7 @@ static int grease_pencil_material_lock_unselected_exec(bContext *C, wmOperator * for (const MutableDrawingInfo &info : drawings) { IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info.drawing, memory); + *object, info, memory); if (strokes.is_empty()) { return OPERATOR_CANCELLED; } diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_select.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_select.cc index 0cd63427e17..8785272ca2c 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_select.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_select.cc @@ -40,7 +40,7 @@ static int select_all_exec(bContext *C, wmOperator *op) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask selectable_elements = retrieve_editable_elements( - *object, info.drawing, selection_domain, memory); + *object, info, selection_domain, memory); if (selectable_elements.is_empty()) { return; } @@ -80,7 +80,7 @@ static int select_more_exec(bContext *C, wmOperator * /*op*/) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask selectable_strokes = ed::greasepencil::retrieve_editable_strokes( - *object, info.drawing, memory); + *object, info.drawing, info.layer_index, memory); if (selectable_strokes.is_empty()) { return; } @@ -118,7 +118,7 @@ static int select_less_exec(bContext *C, wmOperator * /*op*/) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask selectable_strokes = ed::greasepencil::retrieve_editable_strokes( - *object, info.drawing, memory); + *object, info.drawing, info.layer_index, memory); if (selectable_strokes.is_empty()) { return; } @@ -156,7 +156,7 @@ static int select_linked_exec(bContext *C, wmOperator * /*op*/) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask selectable_strokes = ed::greasepencil::retrieve_editable_strokes( - *object, info.drawing, memory); + *object, info.drawing, info.layer_index, memory); if (selectable_strokes.is_empty()) { return; } @@ -199,7 +199,7 @@ static int select_random_exec(bContext *C, wmOperator *op) IndexMaskMemory memory; const IndexMask selectable_elements = retrieve_editable_elements( - *object, info.drawing, selection_domain, memory); + *object, info, selection_domain, memory); if (selectable_elements.is_empty()) { return; } @@ -298,7 +298,7 @@ static int select_ends_exec(bContext *C, wmOperator *op) IndexMaskMemory memory; const IndexMask selectable_strokes = ed::greasepencil::retrieve_editable_strokes( - *object, info.drawing, memory); + *object, info.drawing, info.layer_index, memory); if (selectable_strokes.is_empty()) { return; } diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc index 310ffa5afa9..2df486e15c5 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc @@ -414,6 +414,7 @@ static VectorSet get_hidden_material_indices(Object &object) IndexMask retrieve_editable_strokes(Object &object, const bke::greasepencil::Drawing &drawing, + int layer_index, IndexMaskMemory &memory) { using namespace blender; @@ -427,6 +428,8 @@ IndexMask retrieve_editable_strokes(Object &object, const bke::CurvesGeometry &curves = drawing.strokes(); const IndexRange curves_range = drawing.strokes().curves_range(); const bke::AttributeAccessor attributes = curves.attributes(); + GreasePencil &grease_pencil = *static_cast(object.data); + const bke::greasepencil::Layer &layer = *grease_pencil.layers()[layer_index]; const VArray materials = *attributes.lookup("material_index", bke::AttrDomain::Curve); if (!materials) { @@ -440,7 +443,8 @@ IndexMask retrieve_editable_strokes(Object &object, return IndexMask::from_predicate( curves_range, GrainSize(4096), memory, [&](const int64_t curve_i) { const int material_index = materials[curve_i]; - return editable_material_indices.contains(material_index); + return editable_material_indices.contains(material_index) || + !(layer.as_node().flag & GP_LAYER_TREE_NODE_LOCK_MATERIAL); }); } @@ -512,12 +516,14 @@ IndexMask retrieve_editable_points(Object &object, } IndexMask retrieve_editable_elements(Object &object, - const bke::greasepencil::Drawing &drawing, + const MutableDrawingInfo &info, const bke::AttrDomain selection_domain, IndexMaskMemory &memory) { + + const bke::greasepencil::Drawing &drawing = info.drawing; if (selection_domain == bke::AttrDomain::Curve) { - return ed::greasepencil::retrieve_editable_strokes(object, drawing, memory); + return ed::greasepencil::retrieve_editable_strokes(object, drawing, info.layer_index, memory); } else if (selection_domain == bke::AttrDomain::Point) { return ed::greasepencil::retrieve_editable_points(object, drawing, memory); @@ -553,15 +559,16 @@ IndexMask retrieve_visible_strokes(Object &object, } IndexMask retrieve_editable_and_selected_strokes(Object &object, - const bke::greasepencil::Drawing &drawing, + const MutableDrawingInfo &info, IndexMaskMemory &memory) { using namespace blender; - + const bke::greasepencil::Drawing &drawing = info.drawing; const bke::CurvesGeometry &curves = drawing.strokes(); const IndexRange curves_range = drawing.strokes().curves_range(); - const IndexMask editable_strokes = retrieve_editable_strokes(object, drawing, memory); + const IndexMask editable_strokes = retrieve_editable_strokes( + object, drawing, info.layer_index, memory); const IndexMask selected_strokes = ed::curves::retrieve_selected_curves(curves, memory); BitVector<> editable_strokes_bits(curves.curves_num(), false); @@ -593,12 +600,13 @@ IndexMask retrieve_editable_and_selected_points(Object &object, } IndexMask retrieve_editable_and_selected_elements(Object &object, - const bke::greasepencil::Drawing &drawing, + const MutableDrawingInfo &info, const bke::AttrDomain selection_domain, IndexMaskMemory &memory) { + const bke::greasepencil::Drawing &drawing = info.drawing; if (selection_domain == bke::AttrDomain::Curve) { - return ed::greasepencil::retrieve_editable_and_selected_strokes(object, drawing, memory); + return ed::greasepencil::retrieve_editable_and_selected_strokes(object, info, memory); } else if (selection_domain == bke::AttrDomain::Point) { return ed::greasepencil::retrieve_editable_and_selected_points(object, drawing, memory); diff --git a/source/blender/editors/include/ED_grease_pencil.hh b/source/blender/editors/include/ED_grease_pencil.hh index db2e62493e2..ae5fa38c971 100644 --- a/source/blender/editors/include/ED_grease_pencil.hh +++ b/source/blender/editors/include/ED_grease_pencil.hh @@ -196,6 +196,7 @@ Vector retrieve_visible_drawings(const Scene &scene, IndexMask retrieve_editable_strokes(Object &grease_pencil_object, const bke::greasepencil::Drawing &drawing, + int layer_index, IndexMaskMemory &memory); IndexMask retrieve_editable_strokes_by_material(Object &object, const bke::greasepencil::Drawing &drawing, @@ -205,7 +206,7 @@ IndexMask retrieve_editable_points(Object &object, const bke::greasepencil::Drawing &drawing, IndexMaskMemory &memory); IndexMask retrieve_editable_elements(Object &object, - const bke::greasepencil::Drawing &drawing, + const MutableDrawingInfo &info, bke::AttrDomain selection_domain, IndexMaskMemory &memory); @@ -214,13 +215,13 @@ IndexMask retrieve_visible_strokes(Object &grease_pencil_object, IndexMaskMemory &memory); IndexMask retrieve_editable_and_selected_strokes(Object &grease_pencil_object, - const bke::greasepencil::Drawing &drawing, + const MutableDrawingInfo &info, IndexMaskMemory &memory); IndexMask retrieve_editable_and_selected_points(Object &object, const bke::greasepencil::Drawing &drawing, IndexMaskMemory &memory); IndexMask retrieve_editable_and_selected_elements(Object &object, - const bke::greasepencil::Drawing &drawing, + const MutableDrawingInfo &info, bke::AttrDomain selection_domain, IndexMaskMemory &memory); diff --git a/source/blender/editors/space_view3d/view3d_select.cc b/source/blender/editors/space_view3d/view3d_select.cc index 41f4dc886a7..8b97e5e36e6 100644 --- a/source/blender/editors/space_view3d/view3d_select.cc +++ b/source/blender/editors/space_view3d/view3d_select.cc @@ -1200,7 +1200,7 @@ static bool do_lasso_select_grease_pencil(const ViewContext *vc, IndexMaskMemory memory; const IndexMask elements = ed::greasepencil::retrieve_editable_elements( - *vc->obedit, info.drawing, selection_domain, memory); + *vc->obedit, info, selection_domain, memory); if (elements.is_empty()) { continue; } @@ -3221,7 +3221,7 @@ static bool ed_grease_pencil_select_pick(bContext *C, IndexMaskMemory memory; const IndexMask elements = ed::greasepencil::retrieve_editable_elements( - *vc.obedit, info.drawing, selection_domain, memory); + *vc.obedit, info, selection_domain, memory); if (elements.is_empty()) { continue; } @@ -3255,7 +3255,7 @@ static bool ed_grease_pencil_select_pick(bContext *C, ed::greasepencil::MutableDrawingInfo info = drawings[i]; IndexMaskMemory memory; const IndexMask elements = ed::greasepencil::retrieve_editable_elements( - *vc.obedit, info.drawing, selection_domain, memory); + *vc.obedit, info, selection_domain, memory); if (elements.is_empty()) { continue; } @@ -4233,7 +4233,7 @@ static bool do_grease_pencil_box_select(const ViewContext *vc, ob_eval, *vc->obedit, info.layer_index, info.frame_number); IndexMaskMemory memory; const IndexMask elements = ed::greasepencil::retrieve_editable_elements( - *vc->obedit, info.drawing, selection_domain, memory); + *vc->obedit, info, selection_domain, memory); if (elements.is_empty()) { continue; } @@ -5101,7 +5101,7 @@ static bool grease_pencil_circle_select(const ViewContext *vc, ob_eval, *vc->obedit, info.layer_index, info.frame_number); IndexMaskMemory memory; const IndexMask elements = ed::greasepencil::retrieve_editable_elements( - *vc->obedit, info.drawing, selection_domain, memory); + *vc->obedit, info, selection_domain, memory); if (elements.is_empty()) { continue; } diff --git a/source/blender/editors/transform/transform_convert_grease_pencil.cc b/source/blender/editors/transform/transform_convert_grease_pencil.cc index 17c83baa0c8..9f1cbf24e5b 100644 --- a/source/blender/editors/transform/transform_convert_grease_pencil.cc +++ b/source/blender/editors/transform/transform_convert_grease_pencil.cc @@ -105,7 +105,7 @@ static void createTransGreasePencilVerts(bContext *C, TransInfo *t) if (use_proportional_edit) { const IndexMask affected_strokes = ed::greasepencil::retrieve_editable_strokes( - *object, info.drawing, memory); + *object, info.drawing, info.layer_index, memory); curve_populate_trans_data_structs(tc, curves, layer_space_to_world_space, diff --git a/source/blender/makesdna/DNA_grease_pencil_types.h b/source/blender/makesdna/DNA_grease_pencil_types.h index 646ca37c3b2..32e4137746a 100644 --- a/source/blender/makesdna/DNA_grease_pencil_types.h +++ b/source/blender/makesdna/DNA_grease_pencil_types.h @@ -241,6 +241,7 @@ typedef enum GreasePencilLayerTreeNodeFlag { GP_LAYER_TREE_NODE_USE_ONION_SKINNING = (1 << 5), GP_LAYER_TREE_NODE_EXPANDED = (1 << 6), GP_LAYER_TREE_NODE_HIDE_MASKS = (1 << 7), + GP_LAYER_TREE_NODE_LOCK_MATERIAL = (1 << 8), } GreasePencilLayerTreeNodeFlag; struct GreasePencilLayerTreeGroup; diff --git a/source/blender/makesrna/intern/rna_grease_pencil.cc b/source/blender/makesrna/intern/rna_grease_pencil.cc index bf0d580c7fb..e05539f8f07 100644 --- a/source/blender/makesrna/intern/rna_grease_pencil.cc +++ b/source/blender/makesrna/intern/rna_grease_pencil.cc @@ -472,6 +472,14 @@ static void rna_def_grease_pencil_layer(BlenderRNA *brna) RNA_def_property_enum_items(prop, rna_enum_layer_blend_modes_items); RNA_def_property_ui_text(prop, "Blend Mode", "Blend mode"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_grease_pencil_update"); + + prop = RNA_def_property(srna, "lock_material", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna( + prop, "GreasePencilLayerTreeNode", "flag", GP_LAYER_TREE_NODE_LOCK_MATERIAL); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_ui_text( + prop, "Disallow Locked Materials Editing", "Avoids editing locked materials in the layer"); + RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, nullptr); } static void rna_def_grease_pencil_layers_api(BlenderRNA *brna, PropertyRNA *cprop) -- 2.30.2 From 463a3143846eb162427f6b7062dce39f3304b616 Mon Sep 17 00:00:00 2001 From: Pratik Borhade Date: Tue, 26 Mar 2024 17:00:39 +0530 Subject: [PATCH 2/9] Support points --- .../grease_pencil/intern/grease_pencil_edit.cc | 2 +- .../grease_pencil/intern/grease_pencil_select.cc | 2 +- .../grease_pencil/intern/grease_pencil_utils.cc | 16 ++++++++++------ .../blender/editors/include/ED_grease_pencil.hh | 3 ++- .../transform/transform_convert_grease_pencil.cc | 4 ++-- .../blender/makesrna/intern/rna_grease_pencil.cc | 2 +- 6 files changed, 17 insertions(+), 12 deletions(-) diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc index 3639a2541ef..8d6430b138f 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc @@ -600,7 +600,7 @@ static int grease_pencil_dissolve_exec(bContext *C, wmOperator *op) IndexMaskMemory memory; const IndexMask points = ed::greasepencil::retrieve_editable_and_selected_points( - *object, info.drawing, memory); + *object, info, memory); if (points.is_empty()) { return; } diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_select.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_select.cc index 8785272ca2c..d3601b7031a 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_select.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_select.cc @@ -306,7 +306,7 @@ static int select_ends_exec(bContext *C, wmOperator *op) curves, selectable_strokes, amount_start, amount_end, true, memory); const IndexMask selectable_points = ed::greasepencil::retrieve_editable_points( - *object, info.drawing, memory); + *object, info.drawing, info.layer_index, memory); const bool was_anything_selected = ed::curves::has_anything_selected(curves, selectable_points); bke::GSpanAttributeWriter selection = ed::curves::ensure_selection_attribute( diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc index 2df486e15c5..38470398b52 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc @@ -486,6 +486,7 @@ IndexMask retrieve_editable_strokes_by_material(Object &object, IndexMask retrieve_editable_points(Object &object, const bke::greasepencil::Drawing &drawing, + int layer_index, IndexMaskMemory &memory) { /* Get all the editable material indices */ @@ -497,6 +498,8 @@ IndexMask retrieve_editable_points(Object &object, const bke::CurvesGeometry &curves = drawing.strokes(); const IndexRange points_range = drawing.strokes().points_range(); const bke::AttributeAccessor attributes = curves.attributes(); + GreasePencil &grease_pencil = *static_cast(object.data); + const bke::greasepencil::Layer &layer = *grease_pencil.layers()[layer_index]; /* Propagate the material index to the points. */ const VArray materials = *attributes.lookup("material_index", bke::AttrDomain::Point); @@ -511,7 +514,8 @@ IndexMask retrieve_editable_points(Object &object, return IndexMask::from_predicate( points_range, GrainSize(4096), memory, [&](const int64_t point_i) { const int material_index = materials[point_i]; - return editable_material_indices.contains(material_index); + return editable_material_indices.contains(material_index) || + !(layer.as_node().flag & GP_LAYER_TREE_NODE_LOCK_MATERIAL); }); } @@ -526,7 +530,7 @@ IndexMask retrieve_editable_elements(Object &object, return ed::greasepencil::retrieve_editable_strokes(object, drawing, info.layer_index, memory); } else if (selection_domain == bke::AttrDomain::Point) { - return ed::greasepencil::retrieve_editable_points(object, drawing, memory); + return ed::greasepencil::retrieve_editable_points(object, drawing, info.layer_index, memory); } return {}; } @@ -581,13 +585,14 @@ IndexMask retrieve_editable_and_selected_strokes(Object &object, } IndexMask retrieve_editable_and_selected_points(Object &object, - const bke::greasepencil::Drawing &drawing, + const MutableDrawingInfo &info, IndexMaskMemory &memory) { + const bke::greasepencil::Drawing &drawing = info.drawing; const bke::CurvesGeometry &curves = drawing.strokes(); const IndexRange points_range = drawing.strokes().points_range(); - const IndexMask editable_points = retrieve_editable_points(object, drawing, memory); + const IndexMask editable_points = retrieve_editable_points(object, drawing, info.layer_index, memory); const IndexMask selected_points = ed::curves::retrieve_selected_points(curves, memory); BitVector<> editable_points_bits(curves.points_num(), false); @@ -604,12 +609,11 @@ IndexMask retrieve_editable_and_selected_elements(Object &object, const bke::AttrDomain selection_domain, IndexMaskMemory &memory) { - const bke::greasepencil::Drawing &drawing = info.drawing; if (selection_domain == bke::AttrDomain::Curve) { return ed::greasepencil::retrieve_editable_and_selected_strokes(object, info, memory); } else if (selection_domain == bke::AttrDomain::Point) { - return ed::greasepencil::retrieve_editable_and_selected_points(object, drawing, memory); + return ed::greasepencil::retrieve_editable_and_selected_points(object, info, memory); } return {}; } diff --git a/source/blender/editors/include/ED_grease_pencil.hh b/source/blender/editors/include/ED_grease_pencil.hh index ae5fa38c971..95465745d85 100644 --- a/source/blender/editors/include/ED_grease_pencil.hh +++ b/source/blender/editors/include/ED_grease_pencil.hh @@ -204,6 +204,7 @@ IndexMask retrieve_editable_strokes_by_material(Object &object, IndexMaskMemory &memory); IndexMask retrieve_editable_points(Object &object, const bke::greasepencil::Drawing &drawing, + int layer_index, IndexMaskMemory &memory); IndexMask retrieve_editable_elements(Object &object, const MutableDrawingInfo &info, @@ -218,7 +219,7 @@ IndexMask retrieve_editable_and_selected_strokes(Object &grease_pencil_object, const MutableDrawingInfo &info, IndexMaskMemory &memory); IndexMask retrieve_editable_and_selected_points(Object &object, - const bke::greasepencil::Drawing &drawing, + const MutableDrawingInfo &info, IndexMaskMemory &memory); IndexMask retrieve_editable_and_selected_elements(Object &object, const MutableDrawingInfo &info, diff --git a/source/blender/editors/transform/transform_convert_grease_pencil.cc b/source/blender/editors/transform/transform_convert_grease_pencil.cc index 9f1cbf24e5b..d53619fadb1 100644 --- a/source/blender/editors/transform/transform_convert_grease_pencil.cc +++ b/source/blender/editors/transform/transform_convert_grease_pencil.cc @@ -55,12 +55,12 @@ static void createTransGreasePencilVerts(bContext *C, TransInfo *t) for (ed::greasepencil::MutableDrawingInfo info : drawings) { if (use_proportional_edit) { points_per_layer_per_object[layer_offset] = ed::greasepencil::retrieve_editable_points( - *object, info.drawing, memory); + *object, info.drawing, info.layer_index, memory); tc.data_len += points_per_layer_per_object[layer_offset].size(); } else { points_per_layer_per_object[layer_offset] = - ed::greasepencil::retrieve_editable_and_selected_points(*object, info.drawing, memory); + ed::greasepencil::retrieve_editable_and_selected_points(*object, info, memory); tc.data_len += points_per_layer_per_object[layer_offset].size(); } diff --git a/source/blender/makesrna/intern/rna_grease_pencil.cc b/source/blender/makesrna/intern/rna_grease_pencil.cc index e05539f8f07..f0ce081e2e7 100644 --- a/source/blender/makesrna/intern/rna_grease_pencil.cc +++ b/source/blender/makesrna/intern/rna_grease_pencil.cc @@ -474,7 +474,7 @@ static void rna_def_grease_pencil_layer(BlenderRNA *brna) RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_grease_pencil_update"); prop = RNA_def_property(srna, "lock_material", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna( + RNA_def_property_boolean_negative_sdna( prop, "GreasePencilLayerTreeNode", "flag", GP_LAYER_TREE_NODE_LOCK_MATERIAL); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_ui_text( -- 2.30.2 From 8561171c584a77215de95eee4e78b62d46556e22 Mon Sep 17 00:00:00 2001 From: Pratik Borhade Date: Sat, 6 Apr 2024 17:09:33 +0530 Subject: [PATCH 3/9] Rename property and flag --- scripts/startup/bl_ui/properties_data_grease_pencil.py | 2 +- .../editors/grease_pencil/intern/grease_pencil_utils.cc | 4 ++-- source/blender/makesdna/DNA_grease_pencil_types.h | 2 +- source/blender/makesrna/intern/rna_grease_pencil.cc | 8 ++++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/startup/bl_ui/properties_data_grease_pencil.py b/scripts/startup/bl_ui/properties_data_grease_pencil.py index e01fba31b70..b96bda50d62 100644 --- a/scripts/startup/bl_ui/properties_data_grease_pencil.py +++ b/scripts/startup/bl_ui/properties_data_grease_pencil.py @@ -104,7 +104,7 @@ class GREASE_PENCIL_MT_grease_pencil_add_layer_extra(Menu): layout.separator() layout.prop(grease_pencil, "use_autolock_layers", text="Autolock Inactive Layers") - layout.prop(layer, "lock_material") + layout.prop(layer, "use_locked_material") class DATA_PT_grease_pencil_layers(DataButtonsPanel, Panel): diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc index d89d47d5f89..bb6784e2969 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc @@ -568,7 +568,7 @@ IndexMask retrieve_editable_strokes(Object &object, curves_range, GrainSize(4096), memory, [&](const int64_t curve_i) { const int material_index = materials[curve_i]; return editable_material_indices.contains(material_index) || - !(layer.as_node().flag & GP_LAYER_TREE_NODE_LOCK_MATERIAL); + (layer.as_node().flag & GP_LAYER_TREE_NODE_USE_LOCKED_MATERIAL); }); } @@ -639,7 +639,7 @@ IndexMask retrieve_editable_points(Object &object, points_range, GrainSize(4096), memory, [&](const int64_t point_i) { const int material_index = materials[point_i]; return editable_material_indices.contains(material_index) || - !(layer.as_node().flag & GP_LAYER_TREE_NODE_LOCK_MATERIAL); + (layer.as_node().flag & GP_LAYER_TREE_NODE_USE_LOCKED_MATERIAL); }); } diff --git a/source/blender/makesdna/DNA_grease_pencil_types.h b/source/blender/makesdna/DNA_grease_pencil_types.h index 93617fd861f..b495055effb 100644 --- a/source/blender/makesdna/DNA_grease_pencil_types.h +++ b/source/blender/makesdna/DNA_grease_pencil_types.h @@ -241,7 +241,7 @@ typedef enum GreasePencilLayerTreeNodeFlag { GP_LAYER_TREE_NODE_HIDE_ONION_SKINNING = (1 << 5), GP_LAYER_TREE_NODE_EXPANDED = (1 << 6), GP_LAYER_TREE_NODE_HIDE_MASKS = (1 << 7), - GP_LAYER_TREE_NODE_LOCK_MATERIAL = (1 << 8), + GP_LAYER_TREE_NODE_USE_LOCKED_MATERIAL = (1 << 8), } GreasePencilLayerTreeNodeFlag; struct GreasePencilLayerTreeGroup; diff --git a/source/blender/makesrna/intern/rna_grease_pencil.cc b/source/blender/makesrna/intern/rna_grease_pencil.cc index 799bf2f9778..f3ac6da7120 100644 --- a/source/blender/makesrna/intern/rna_grease_pencil.cc +++ b/source/blender/makesrna/intern/rna_grease_pencil.cc @@ -474,12 +474,12 @@ static void rna_def_grease_pencil_layer(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Blend Mode", "Blend mode"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_grease_pencil_update"); - prop = RNA_def_property(srna, "lock_material", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_negative_sdna( - prop, "GreasePencilLayerTreeNode", "flag", GP_LAYER_TREE_NODE_LOCK_MATERIAL); + prop = RNA_def_property(srna, "use_locked_material", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna( + prop, "GreasePencilLayerTreeNode", "flag", GP_LAYER_TREE_NODE_USE_LOCKED_MATERIAL); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_ui_text( - prop, "Disallow Locked Materials Editing", "Avoids editing locked materials in the layer"); + prop, "Use Locked Materials Editing", "Allow editing locked materials in the layer"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, nullptr); } -- 2.30.2 From c1e9d3e8b69e96d55cb2749a8ad172d7570df16b Mon Sep 17 00:00:00 2001 From: Pratik Borhade Date: Fri, 26 Apr 2024 17:01:13 +0530 Subject: [PATCH 4/9] make format --- .../editors/grease_pencil/intern/grease_pencil_utils.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc index 698ca81563a..f9d76f4e0cb 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc @@ -879,7 +879,8 @@ IndexMask retrieve_editable_and_selected_points(Object &object, const bke::greasepencil::Drawing &drawing = info.drawing; const bke::CurvesGeometry &curves = drawing.strokes(); - const IndexMask editable_points = retrieve_editable_points(object, drawing, info.layer_index, memory); + const IndexMask editable_points = retrieve_editable_points( + object, drawing, info.layer_index, memory); const IndexMask selected_points = ed::curves::retrieve_selected_points(curves, memory); return IndexMask::from_intersection(editable_points, selected_points, memory); -- 2.30.2 From 49972eab1e7332e3ab68737e190740cf5317f4ce Mon Sep 17 00:00:00 2001 From: Pratik Borhade Date: Thu, 16 May 2024 15:18:48 +0530 Subject: [PATCH 5/9] Pass drawing and layer instead of drawinginfo --- .../bl_ui/properties_data_grease_pencil.py | 2 +- .../intern/grease_pencil_edit.cc | 39 ++++++++++--------- .../intern/grease_pencil_material.cc | 2 +- .../intern/grease_pencil_utils.cc | 19 ++++----- .../editors/include/ED_grease_pencil.hh | 9 +++-- .../grease_pencil_sculpt_common.cc | 2 +- .../transform_convert_grease_pencil.cc | 2 +- 7 files changed, 40 insertions(+), 35 deletions(-) diff --git a/scripts/startup/bl_ui/properties_data_grease_pencil.py b/scripts/startup/bl_ui/properties_data_grease_pencil.py index dfbc363883a..0893db1cf6f 100644 --- a/scripts/startup/bl_ui/properties_data_grease_pencil.py +++ b/scripts/startup/bl_ui/properties_data_grease_pencil.py @@ -174,7 +174,7 @@ class GREASE_PENCIL_MT_grease_pencil_add_layer_extra(Menu): layout = self.layout ob = context.object grease_pencil = ob.data - layer = grease_pencil.layers.active + layer = grease_pencil.layers.active_layer space = context.space_data if space.type == 'PROPERTIES': diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc index 80746b135f0..95479b7fa11 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc @@ -92,7 +92,7 @@ static int grease_pencil_stroke_smooth_exec(bContext *C, wmOperator *op) IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info, memory); + *object, info.drawing, info.layer_index, memory); if (strokes.is_empty()) { return; } @@ -254,7 +254,7 @@ static int grease_pencil_stroke_simplify_exec(bContext *C, wmOperator *op) IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info, memory); + *object, info.drawing, info.layer_index, memory); if (strokes.is_empty()) { return; } @@ -460,7 +460,7 @@ static int grease_pencil_delete_exec(bContext *C, wmOperator * /*op*/) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask elements = ed::greasepencil::retrieve_editable_and_selected_elements( - *object, info, selection_domain, memory); + *object, info.drawing, info.layer_index, selection_domain, memory); if (elements.is_empty()) { return; } @@ -607,7 +607,7 @@ static int grease_pencil_dissolve_exec(bContext *C, wmOperator *op) IndexMaskMemory memory; const IndexMask points = ed::greasepencil::retrieve_editable_and_selected_points( - *object, info, memory); + *object, info.drawing, info.layer_index, memory); if (points.is_empty()) { return; } @@ -776,7 +776,7 @@ static int grease_pencil_stroke_material_set_exec(bContext *C, wmOperator *op) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info, memory); + *object, info.drawing, info.layer_index, memory); if (strokes.is_empty()) { return; } @@ -851,7 +851,7 @@ static int grease_pencil_cyclical_set_exec(bContext *C, wmOperator *op) IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info, memory); + *object, info.drawing, info.layer_index, memory); if (strokes.is_empty()) { return; } @@ -926,7 +926,7 @@ static int grease_pencil_set_active_material_exec(bContext *C, wmOperator * /*op for (const MutableDrawingInfo &info : drawings) { IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info, memory); + *object, info.drawing, info.layer_index, memory); if (strokes.is_empty()) { continue; } @@ -974,7 +974,7 @@ static int grease_pencil_set_uniform_thickness_exec(bContext *C, wmOperator *op) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info, memory); + *object, info.drawing, info.layer_index, memory); if (strokes.is_empty()) { return; } @@ -1031,7 +1031,7 @@ static int grease_pencil_set_uniform_opacity_exec(bContext *C, wmOperator *op) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info, memory); + *object, info.drawing, info.layer_index, memory); if (strokes.is_empty()) { return; } @@ -1086,7 +1086,7 @@ static int grease_pencil_stroke_switch_direction_exec(bContext *C, wmOperator * threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info, memory); + *object, info.drawing, info.layer_index, memory); if (strokes.is_empty()) { return; } @@ -1163,7 +1163,7 @@ static int grease_pencil_caps_set_exec(bContext *C, wmOperator *op) bke::CurvesGeometry &curves = info.drawing.strokes_for_write(); IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info, memory); + *object, info.drawing, info.layer_index, memory); if (strokes.is_empty()) { return; } @@ -1338,7 +1338,7 @@ static int grease_pencil_duplicate_exec(bContext *C, wmOperator * /*op*/) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask elements = retrieve_editable_and_selected_elements( - *object, info, selection_domain, memory); + *object, info.drawing, info.layer_index, selection_domain, memory); if (elements.is_empty()) { return; } @@ -1459,7 +1459,7 @@ static int gpencil_stroke_subdivide_exec(bContext *C, wmOperator *op) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info, memory); + *object, info.drawing, info.layer_index, memory); if (strokes.is_empty()) { return; } @@ -1655,7 +1655,7 @@ static int grease_pencil_stroke_reorder_exec(bContext *C, wmOperator *op) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info, memory); + *object, info.drawing, info.layer_index, memory); if (strokes.is_empty()) { return; } @@ -2513,10 +2513,11 @@ static int grease_pencil_stroke_merge_by_distance_exec(bContext *C, wmOperator * threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { bke::greasepencil::Drawing &drawing = info.drawing; IndexMaskMemory memory; - const IndexMask points = - use_unselected ? - ed::greasepencil::retrieve_editable_points(*object, drawing, memory) : - ed::greasepencil::retrieve_editable_and_selected_points(*object, drawing, memory); + const IndexMask points = use_unselected ? + ed::greasepencil::retrieve_editable_points( + *object, drawing, info.layer_index, memory) : + ed::greasepencil::retrieve_editable_and_selected_points( + *object, info.drawing, info.layer_index, memory); if (points.is_empty()) { return; } @@ -2677,7 +2678,7 @@ static int grease_pencil_extrude_exec(bContext *C, wmOperator * /*op*/) threading::parallel_for_each(drawings, [&](const MutableDrawingInfo &info) { IndexMaskMemory memory; const IndexMask points_to_extrude = retrieve_editable_and_selected_points( - *object, info.drawing, memory); + *object, info.drawing, info.layer_index, memory); if (points_to_extrude.is_empty()) { return; } diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_material.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_material.cc index 85692239844..a408d84a300 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_material.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_material.cc @@ -278,7 +278,7 @@ static int grease_pencil_material_lock_unselected_exec(bContext *C, wmOperator * for (const MutableDrawingInfo &info : drawings) { IndexMaskMemory memory; const IndexMask strokes = ed::greasepencil::retrieve_editable_and_selected_strokes( - *object, info, memory); + *object, info.drawing, info.layer_index, memory); if (strokes.is_empty()) { return OPERATOR_CANCELLED; } diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc index 338f8d44dec..8d0bb31724d 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc @@ -865,44 +865,45 @@ IndexMask retrieve_visible_points(Object &object, } IndexMask retrieve_editable_and_selected_strokes(Object &object, - const MutableDrawingInfo &info, + const bke::greasepencil::Drawing &drawing, + int layer_index, IndexMaskMemory &memory) { using namespace blender; - const bke::greasepencil::Drawing &drawing = info.drawing; const bke::CurvesGeometry &curves = drawing.strokes(); const IndexMask editable_strokes = retrieve_editable_strokes( - object, drawing, info.layer_index, memory); + object, drawing, layer_index, memory); const IndexMask selected_strokes = ed::curves::retrieve_selected_curves(curves, memory); return IndexMask::from_intersection(editable_strokes, selected_strokes, memory); } IndexMask retrieve_editable_and_selected_points(Object &object, - const MutableDrawingInfo &info, + const bke::greasepencil::Drawing &drawing, + int layer_index, IndexMaskMemory &memory) { - const bke::greasepencil::Drawing &drawing = info.drawing; const bke::CurvesGeometry &curves = drawing.strokes(); const IndexMask editable_points = retrieve_editable_points( - object, drawing, info.layer_index, memory); + object, drawing, layer_index, memory); const IndexMask selected_points = ed::curves::retrieve_selected_points(curves, memory); return IndexMask::from_intersection(editable_points, selected_points, memory); } IndexMask retrieve_editable_and_selected_elements(Object &object, - const MutableDrawingInfo &info, + const bke::greasepencil::Drawing &drawing, + int layer_index, const bke::AttrDomain selection_domain, IndexMaskMemory &memory) { if (selection_domain == bke::AttrDomain::Curve) { - return ed::greasepencil::retrieve_editable_and_selected_strokes(object, info, memory); + return ed::greasepencil::retrieve_editable_and_selected_strokes(object, drawing, layer_index, memory); } else if (selection_domain == bke::AttrDomain::Point) { - return ed::greasepencil::retrieve_editable_and_selected_points(object, info, memory); + return ed::greasepencil::retrieve_editable_and_selected_points(object, drawing, layer_index, memory); } return {}; } diff --git a/source/blender/editors/include/ED_grease_pencil.hh b/source/blender/editors/include/ED_grease_pencil.hh index b3e6757253d..0deb3fcc28c 100644 --- a/source/blender/editors/include/ED_grease_pencil.hh +++ b/source/blender/editors/include/ED_grease_pencil.hh @@ -295,13 +295,16 @@ IndexMask retrieve_visible_points(Object &object, IndexMaskMemory &memory); IndexMask retrieve_editable_and_selected_strokes(Object &grease_pencil_object, - const MutableDrawingInfo &info, + const bke::greasepencil::Drawing &drawing, + int layer_index, IndexMaskMemory &memory); IndexMask retrieve_editable_and_selected_points(Object &object, - const MutableDrawingInfo &info, + const bke::greasepencil::Drawing &drawing, + int layer_index, IndexMaskMemory &memory); IndexMask retrieve_editable_and_selected_elements(Object &object, - const MutableDrawingInfo &info, + const bke::greasepencil::Drawing &drawing, + int layer_index, bke::AttrDomain selection_domain, IndexMaskMemory &memory); diff --git a/source/blender/editors/sculpt_paint/grease_pencil_sculpt_common.cc b/source/blender/editors/sculpt_paint/grease_pencil_sculpt_common.cc index 9517570bb96..93b4a0bff09 100644 --- a/source/blender/editors/sculpt_paint/grease_pencil_sculpt_common.cc +++ b/source/blender/editors/sculpt_paint/grease_pencil_sculpt_common.cc @@ -184,7 +184,7 @@ IndexMask point_selection_mask(const GreasePencilStrokeParams ¶ms, IndexMask const bool is_masking = GPENCIL_ANY_SCULPT_MASK( eGP_Sculpt_SelectMaskFlag(params.toolsettings.gpencil_selectmode_sculpt)); return (is_masking ? ed::greasepencil::retrieve_editable_and_selected_points( - params.ob_eval, params.drawing, memory) : + params.ob_eval, params.drawing, params.layer_index, memory) : params.drawing.strokes().points_range()); } diff --git a/source/blender/editors/transform/transform_convert_grease_pencil.cc b/source/blender/editors/transform/transform_convert_grease_pencil.cc index 34bba43772f..407ba2583ec 100644 --- a/source/blender/editors/transform/transform_convert_grease_pencil.cc +++ b/source/blender/editors/transform/transform_convert_grease_pencil.cc @@ -62,7 +62,7 @@ static void createTransGreasePencilVerts(bContext *C, TransInfo *t) else { points_per_layer_per_object[layer_offset] = ed::greasepencil::retrieve_editable_and_selected_points( - *object, info, curves_transform_data->memory); + *object, info.drawing, info.layer_index, curves_transform_data->memory); tc.data_len += points_per_layer_per_object[layer_offset].size(); } -- 2.30.2 From dec12f86b56a29f91b8330976c33337e205a85ca Mon Sep 17 00:00:00 2001 From: Pratik Borhade Date: Thu, 16 May 2024 16:03:40 +0530 Subject: [PATCH 6/9] inline use_locked_material() function and fix formatting --- source/blender/blenkernel/BKE_grease_pencil.hh | 9 +++++++++ .../grease_pencil/intern/grease_pencil_utils.cc | 15 +++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/source/blender/blenkernel/BKE_grease_pencil.hh b/source/blender/blenkernel/BKE_grease_pencil.hh index ec03e82ff47..045af7d74e0 100644 --- a/source/blender/blenkernel/BKE_grease_pencil.hh +++ b/source/blender/blenkernel/BKE_grease_pencil.hh @@ -185,6 +185,7 @@ class Layer; void set_selected(bool selected); \ bool use_onion_skinning() const; \ bool use_masks() const; \ + bool use_locked_material() const; \ bool is_child_of(const LayerGroup &group) const; /* Implements the forwarding of the methods defined by #TREENODE_COMMON_METHODS. */ @@ -233,6 +234,10 @@ class Layer; { \ return this->as_node().use_masks(); \ } \ + inline bool class_name::use_locked_material() const \ + { \ + return this->as_node().use_locked_material(); \ + } \ inline bool class_name::is_child_of(const LayerGroup &group) const \ { \ return this->as_node().is_child_of(group); \ @@ -741,6 +746,10 @@ inline bool TreeNode::use_masks() const return ((this->flag & GP_LAYER_TREE_NODE_HIDE_MASKS) == 0) && (!this->parent_group() || this->parent_group()->as_node().use_masks()); } +bool TreeNode::use_locked_material() const +{ + return this->flag & GP_LAYER_TREE_NODE_USE_LOCKED_MATERIAL; +} inline bool TreeNode::is_child_of(const LayerGroup &group) const { if (const LayerGroup *parent = this->parent_group()) { diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc index 8d0bb31724d..98013ec7192 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc @@ -707,8 +707,7 @@ IndexMask retrieve_editable_strokes(Object &object, return IndexMask::from_predicate( curves_range, GrainSize(4096), memory, [&](const int64_t curve_i) { const int material_index = materials[curve_i]; - return editable_material_indices.contains(material_index) || - (layer.as_node().flag & GP_LAYER_TREE_NODE_USE_LOCKED_MATERIAL); + return editable_material_indices.contains(material_index) || layer.use_locked_material(); }); } @@ -783,8 +782,7 @@ IndexMask retrieve_editable_points(Object &object, return IndexMask::from_predicate( points_range, GrainSize(4096), memory, [&](const int64_t point_i) { const int material_index = materials[point_i]; - return editable_material_indices.contains(material_index) || - (layer.as_node().flag & GP_LAYER_TREE_NODE_USE_LOCKED_MATERIAL); + return editable_material_indices.contains(material_index) || layer.use_locked_material(); }); } @@ -886,8 +884,7 @@ IndexMask retrieve_editable_and_selected_points(Object &object, { const bke::CurvesGeometry &curves = drawing.strokes(); - const IndexMask editable_points = retrieve_editable_points( - object, drawing, layer_index, memory); + const IndexMask editable_points = retrieve_editable_points(object, drawing, layer_index, memory); const IndexMask selected_points = ed::curves::retrieve_selected_points(curves, memory); return IndexMask::from_intersection(editable_points, selected_points, memory); @@ -900,10 +897,12 @@ IndexMask retrieve_editable_and_selected_elements(Object &object, IndexMaskMemory &memory) { if (selection_domain == bke::AttrDomain::Curve) { - return ed::greasepencil::retrieve_editable_and_selected_strokes(object, drawing, layer_index, memory); + return ed::greasepencil::retrieve_editable_and_selected_strokes( + object, drawing, layer_index, memory); } else if (selection_domain == bke::AttrDomain::Point) { - return ed::greasepencil::retrieve_editable_and_selected_points(object, drawing, layer_index, memory); + return ed::greasepencil::retrieve_editable_and_selected_points( + object, drawing, layer_index, memory); } return {}; } -- 2.30.2 From 68e23a063db38d4cf4ea1700e6bba924446346ed Mon Sep 17 00:00:00 2001 From: Pratik Borhade Date: Thu, 16 May 2024 16:16:01 +0530 Subject: [PATCH 7/9] Fix missing keyword --- source/blender/blenkernel/BKE_grease_pencil.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/blenkernel/BKE_grease_pencil.hh b/source/blender/blenkernel/BKE_grease_pencil.hh index 045af7d74e0..f4a7755d597 100644 --- a/source/blender/blenkernel/BKE_grease_pencil.hh +++ b/source/blender/blenkernel/BKE_grease_pencil.hh @@ -746,7 +746,7 @@ inline bool TreeNode::use_masks() const return ((this->flag & GP_LAYER_TREE_NODE_HIDE_MASKS) == 0) && (!this->parent_group() || this->parent_group()->as_node().use_masks()); } -bool TreeNode::use_locked_material() const +inline bool TreeNode::use_locked_material() const { return this->flag & GP_LAYER_TREE_NODE_USE_LOCKED_MATERIAL; } -- 2.30.2 From 399f0cc2288e6b5c8a6a3dc7f9b0bdc2e7c1ddfe Mon Sep 17 00:00:00 2001 From: Pratik Borhade Date: Fri, 17 May 2024 15:41:42 +0530 Subject: [PATCH 8/9] make return value more readable and comments added --- source/blender/blenkernel/BKE_grease_pencil.hh | 2 +- .../editors/grease_pencil/intern/grease_pencil_utils.cc | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/source/blender/blenkernel/BKE_grease_pencil.hh b/source/blender/blenkernel/BKE_grease_pencil.hh index f4a7755d597..87c5c51215f 100644 --- a/source/blender/blenkernel/BKE_grease_pencil.hh +++ b/source/blender/blenkernel/BKE_grease_pencil.hh @@ -748,7 +748,7 @@ inline bool TreeNode::use_masks() const } inline bool TreeNode::use_locked_material() const { - return this->flag & GP_LAYER_TREE_NODE_USE_LOCKED_MATERIAL; + return (this->flag & GP_LAYER_TREE_NODE_USE_LOCKED_MATERIAL) != 0; } inline bool TreeNode::is_child_of(const LayerGroup &group) const { diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc index 98013ec7192..313452391a5 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_utils.cc @@ -707,6 +707,8 @@ IndexMask retrieve_editable_strokes(Object &object, return IndexMask::from_predicate( curves_range, GrainSize(4096), memory, [&](const int64_t curve_i) { const int material_index = materials[curve_i]; + /* The stroke is editable if the material is editable. If the material is not editable, + * then the stroke is only editable if the layer disables the locked material option. */ return editable_material_indices.contains(material_index) || layer.use_locked_material(); }); } @@ -782,6 +784,8 @@ IndexMask retrieve_editable_points(Object &object, return IndexMask::from_predicate( points_range, GrainSize(4096), memory, [&](const int64_t point_i) { const int material_index = materials[point_i]; + /* The stroke is editable if the material is editable. If the material is not editable, + * then the stroke is only editable if the layer disables the locked material option. */ return editable_material_indices.contains(material_index) || layer.use_locked_material(); }); } -- 2.30.2 From f42af4c5773791890cf5e78be97c9907081329e4 Mon Sep 17 00:00:00 2001 From: Pratik Borhade Date: Thu, 30 May 2024 18:11:54 +0530 Subject: [PATCH 9/9] Fix merge conflicts --- source/blender/makesrna/intern/rna_grease_pencil.cc | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/blender/makesrna/intern/rna_grease_pencil.cc b/source/blender/makesrna/intern/rna_grease_pencil.cc index c07ba862c5d..820a196c86b 100644 --- a/source/blender/makesrna/intern/rna_grease_pencil.cc +++ b/source/blender/makesrna/intern/rna_grease_pencil.cc @@ -761,7 +761,6 @@ static void rna_def_grease_pencil_layer(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Blend Mode", "Blend mode"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_grease_pencil_update"); -<<<<<<< HEAD prop = RNA_def_property(srna, "use_locked_material", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna( prop, "GreasePencilLayerTreeNode", "flag", GP_LAYER_TREE_NODE_USE_LOCKED_MATERIAL); @@ -769,7 +768,6 @@ static void rna_def_grease_pencil_layer(BlenderRNA *brna) RNA_def_property_ui_text( prop, "Use Locked Materials Editing", "Allow editing locked materials in the layer"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, nullptr); -======= /* Local transformation matrix. */ prop = RNA_def_property(srna, "matrix_local", PROP_FLOAT, PROP_MATRIX); RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4); @@ -794,7 +792,6 @@ static void rna_def_grease_pencil_layer(BlenderRNA *brna) prop, "rna_GreasePencilLayer_parent_layer_group_get", nullptr, nullptr, nullptr); RNA_def_property_ui_text( prop, "Parent Layer Group", "The parent layer group this layer is part of"); ->>>>>>> main } static void rna_def_grease_pencil_layers_api(BlenderRNA *brna, PropertyRNA *cprop) -- 2.30.2