Merge branch 'blender-v4.4-release'

This commit is contained in:
Bastien Montagne
2025-02-13 13:02:08 +01:00
4 changed files with 22 additions and 15 deletions

View File

@@ -7931,7 +7931,7 @@ def km_3d_view_tool_paint_grease_pencil_primitive_line(params):
"3D View Tool: Paint Grease Pencil, Line",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": [
("grease_pencil.primitive_line", params.tool_maybe_tweak_event,
("grease_pencil.primitive_line", {"type": 'LEFTMOUSE', "value": 'PRESS'},
{"properties": []}),
("grease_pencil.primitive_line", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True},
{"properties": []}),
@@ -7965,7 +7965,7 @@ def km_3d_view_tool_paint_grease_pencil_primitive_box(params):
"3D View Tool: Paint Grease Pencil, Box",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": [
("grease_pencil.primitive_box", params.tool_maybe_tweak_event,
("grease_pencil.primitive_box", {"type": 'LEFTMOUSE', "value": 'PRESS'},
{"properties": []}),
("grease_pencil.primitive_box", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True},
{"properties": []}),
@@ -7983,7 +7983,7 @@ def km_3d_view_tool_paint_grease_pencil_primitive_circle(params):
"3D View Tool: Paint Grease Pencil, Circle",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": [
("grease_pencil.primitive_circle", params.tool_maybe_tweak_event,
("grease_pencil.primitive_circle", {"type": 'LEFTMOUSE', "value": 'PRESS'},
{"properties": []}),
("grease_pencil.primitive_circle", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True},
{"properties": []}),
@@ -8001,7 +8001,7 @@ def km_3d_view_tool_paint_grease_pencil_primitive_arc(params):
"3D View Tool: Paint Grease Pencil, Arc",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": [
("grease_pencil.primitive_arc", params.tool_maybe_tweak_event,
("grease_pencil.primitive_arc", {"type": 'LEFTMOUSE', "value": 'PRESS'},
{"properties": []}),
("grease_pencil.primitive_arc", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True},
{"properties": []}),
@@ -8019,7 +8019,7 @@ def km_3d_view_tool_paint_grease_pencil_primitive_curve(params):
"3D View Tool: Paint Grease Pencil, Curve",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": [
("grease_pencil.primitive_curve", params.tool_maybe_tweak_event,
("grease_pencil.primitive_curve", {"type": 'LEFTMOUSE', "value": 'PRESS'},
{"properties": []}),
# Lasso select
("grease_pencil.select_lasso",

View File

@@ -1464,7 +1464,7 @@ static tGPsdata *annotation_session_initpaint(bContext *C)
tGPsdata *p = nullptr;
/* create new context data */
p = static_cast<tGPsdata *>(MEM_callocN(sizeof(tGPsdata), "Annotation Drawing Data"));
p = MEM_new<tGPsdata>("Annotation Drawing Data");
/* Try to initialize context data
* WARNING: This may not always succeed (e.g. using GP in an annotation-only context)
@@ -1474,7 +1474,7 @@ static tGPsdata *annotation_session_initpaint(bContext *C)
* NOTE: It should be safe to just free the data, since failing context checks should
* only happen when no data has been allocated.
*/
MEM_freeN(p);
MEM_delete(p);
return nullptr;
}
@@ -1519,7 +1519,7 @@ static void annotation_session_free(tGPsdata *p)
if (p->depths) {
ED_view3d_depths_free(p->depths);
}
MEM_freeN(p);
MEM_delete(p);
}
/* init new stroke */

View File

@@ -287,10 +287,10 @@ static bool find_curve_mapping_from_index(const GreasePencil &grease_pencil,
}
/* Discard additional elements of the larger selection. */
if (from_selection.size() > to_selection.size()) {
from_selection.slice(0, to_selection.size());
from_selection = from_selection.slice(0, to_selection.size());
}
else if (to_selection.size() > from_selection.size()) {
to_selection.slice(0, from_selection.size());
to_selection = to_selection.slice(0, from_selection.size());
}
/* By default: copy the "from" curve and ignore the "to" curve. */

View File

@@ -455,17 +455,24 @@ void interpolate_curves_with_samples(const CurvesGeometry &from_curves,
CD_PROP_FLOAT2,
CD_PROP_FLOAT3);
if (can_mix_attribute && !src_from.is_empty() && !src_to.is_empty()) {
const int max_curves = std::min(dst_curve_mask.min_array_size(),
std::min(src_from.size(), src_to.size()));
const IndexMask safe_dst_curve_mask = dst_curve_mask.slice_content(0, max_curves);
GArray<> from_samples(dst.type(), dst.size());
GArray<> to_samples(dst.type(), dst.size());
array_utils::copy(GVArray::ForSpan(src_from), dst_curve_mask, from_samples);
array_utils::copy(GVArray::ForSpan(src_to), dst_curve_mask, to_samples);
mix_arrays(from_samples, to_samples, mix_factors, dst_curve_mask, dst);
array_utils::copy(GVArray::ForSpan(src_from), safe_dst_curve_mask, from_samples);
array_utils::copy(GVArray::ForSpan(src_to), safe_dst_curve_mask, to_samples);
mix_arrays(from_samples, to_samples, mix_factors, safe_dst_curve_mask, dst);
}
else if (!src_from.is_empty()) {
array_utils::copy(GVArray::ForSpan(src_from), dst_curve_mask, dst);
const int max_curves = std::min(dst_curve_mask.min_array_size(), src_from.size());
const IndexMask safe_dst_curve_mask = dst_curve_mask.slice_content(0, max_curves);
array_utils::copy(GVArray::ForSpan(src_from), safe_dst_curve_mask, dst);
}
else if (!src_to.is_empty()) {
array_utils::copy(GVArray::ForSpan(src_to), dst_curve_mask, dst);
const int max_curves = std::min(dst_curve_mask.min_array_size(), src_to.size());
const IndexMask safe_dst_curve_mask = dst_curve_mask.slice_content(0, max_curves);
array_utils::copy(GVArray::ForSpan(src_to), safe_dst_curve_mask, dst);
}
}