11#include <fmt/format.h>
146 const bool is_transfer_between_ids;
184 bool has_changes =
false;
191 : conversion_data(conversion_data),
196 is_transfer_between_ids(
false),
198 fcurve_convertors(fcurve_convertors)
206 : conversion_data(conversion_data),
211 is_transfer_between_ids(
true),
213 fcurve_convertors(fcurve_convertors)
219 using FCurveCallback = bool(
bAction *owner_action,
FCurve &fcurve);
220 using ActionCallback = bool(
bAction &action);
224 bool is_valid()
const
226 return this->animdata_src !=
nullptr;
230 bool legacy_fcurves_is_valid_for_root_path(
FCurve &fcurve,
StringRefNull legacy_root_path)
const
246 bool animation_fcurve_is_valid(
bAction *owner_action,
FCurve &fcurve)
const
248 if (!this->is_valid()) {
254 !
ELEM(owner_action, this->animdata_src->
action, this->animdata_src->tmpact))
258 if (!legacy_fcurves_is_valid_for_root_path(fcurve, this->root_path_src)) {
266 bool fcurve_foreach_in_action(
bAction *owner_action,
269 bool is_changed =
false;
271 const bool local_is_changed = callback(owner_action, fcurve);
272 is_changed = is_changed || local_is_changed;
278 bool fcurve_foreach_in_listbase(
ListBase &fcurves,
281 bool is_changed =
false;
283 const bool local_is_changed =
callback(
nullptr, *fcurve);
284 is_changed = is_changed || local_is_changed;
289 bool nla_strip_fcurve_foreach(
NlaStrip &nla_strip,
292 bool is_changed =
false;
294 if (this->fcurve_foreach_in_action(nla_strip.
act,
callback)) {
300 const bool local_is_changed = this->nla_strip_fcurve_foreach(*nla_strip_children,
callback);
301 is_changed = is_changed || local_is_changed;
306 bool animdata_fcurve_foreach(
AnimData &anim_data,
309 bool is_changed =
false;
324 const bool local_is_changed = this->fcurve_foreach_in_listbase(anim_data.
drivers,
callback);
325 is_changed = is_changed || local_is_changed;
331 if (this->skip_nla) {
337 const bool local_is_changed = this->nla_strip_fcurve_foreach(*nla_strip,
callback);
338 is_changed = is_changed || local_is_changed;
353 bool nla_strip_action_foreach(
NlaStrip &nla_strip,
356 bool is_changed =
false;
358 is_changed = action_process(*nla_strip.
act,
callback);
361 is_changed = is_changed || this->nla_strip_action_foreach(*nla_strip_children,
callback);
366 bool animdata_action_foreach(
AnimData &anim_data,
369 bool is_changed =
false;
372 is_changed = is_changed || action_process(*anim_data.
action,
callback);
375 is_changed = is_changed || action_process(*anim_data.
tmpact,
callback);
381 if (this->skip_nla) {
387 is_changed = is_changed || this->nla_strip_action_foreach(*nla_strip,
callback);
400 if (!this->is_valid()) {
408 bool has_animation =
false;
409 auto animation_detection_cb = [&](
bAction *owner_action,
FCurve &fcurve) ->
bool {
414 if (!this->animation_fcurve_is_valid(owner_action, fcurve)) {
417 if (this->fcurve_convertors.
is_empty()) {
418 has_animation =
true;
423 const std::string rna_path_src = fmt::format(
424 "{}{}", this->root_path_src, fcurve_convertor.relative_rna_path_src);
425 if (rna_path == rna_path_src) {
426 has_animation =
true;
433 this->animdata_fcurve_foreach(*this->animdata_src, animation_detection_cb);
434 return has_animation;
445 if (!this->is_valid()) {
452 const std::string &rna_path_dst) {
454 fcurve.rna_path =
BLI_strdupn(rna_path_dst.c_str(), rna_path_dst.size());
455 if (fcurve_convertor && fcurve_convertor->
convert_cb) {
458 this->has_changes =
true;
460 if (!this->is_transfer_between_ids) {
464 if (owner_action == this->animdata_src->
action) {
465 this->fcurves_from_src_main_action.
append(&fcurve);
467 else if (owner_action == this->animdata_src->
tmpact) {
468 this->fcurves_from_src_tmp_action.
append(&fcurve);
472 this->fcurves_from_src_drivers.
append(&fcurve);
477 if (this->fcurve_convertors.
is_empty()) {
478 auto fcurve_root_path_convert_cb = [&](
bAction *owner_action,
FCurve &fcurve) ->
bool {
479 if (!legacy_fcurves_is_valid_for_root_path(fcurve, this->root_path_src)) {
483 const std::string rna_path_dst = fmt::format(
484 "{}{}", this->root_path_dst, rna_path.
substr(
int64_t(this->root_path_src.size())));
485 fcurve_convert_cb(
nullptr, owner_action, fcurve, rna_path_dst);
489 this->animdata_fcurve_foreach(*(this->animdata_src), fcurve_root_path_convert_cb);
495 auto fcurve_full_path_convert_cb = [&](
bAction *owner_action,
FCurve &fcurve) ->
bool {
496 if (!animation_fcurve_is_valid(owner_action, fcurve)) {
501 const std::string rna_path_src = fmt::format(
503 if (rna_path == rna_path_src) {
504 const std::string rna_path_dst = fmt::format(
506 fcurve_convert_cb(&fcurve_convertor, owner_action, fcurve, rna_path_dst);
513 this->animdata_fcurve_foreach(*(this->animdata_src), fcurve_full_path_convert_cb);
528 if (!this->is_valid()) {
535 if (!this->animdata_dst) {
538 auto actions_idroot_ensure = [&](
bAction &action) ->
bool {
542 this->animdata_action_foreach(*this->animdata_dst, actions_idroot_ensure);
545 if (&id_src == &id_dst) {
546 if (this->has_changes) {
553 if (this->fcurves_from_src_main_action.
is_empty() &&
554 this->fcurves_from_src_tmp_action.is_empty() && this->fcurves_from_src_drivers.is_empty())
558 if (!this->animdata_dst) {
562 auto fcurves_move = [&](
bAction *action_dst,
566 for (
FCurve *fcurve : fcurves) {
568 action_dst->wrap(), slot_handle_dst, action_src->wrap(), *fcurve);
572 auto fcurves_move_between_listbases =
574 for (
FCurve *fcurve : fcurves) {
581 if (!this->fcurves_from_src_main_action.
is_empty()) {
582 if (!this->animdata_dst->
action) {
585 this->conversion_data.
bmain,
586 this->animdata_src->action ? this->animdata_src->action->id.name + 2 :
nullptr);
591 BLI_assert_msg(ok,
"Expecting action assignment to work when converting Grease Pencil");
594 fcurves_move(this->animdata_dst->
action,
595 this->animdata_dst->slot_handle,
596 this->animdata_src->action,
597 this->fcurves_from_src_main_action);
598 this->fcurves_from_src_main_action.
clear();
600 if (!this->fcurves_from_src_tmp_action.
is_empty()) {
601 if (!this->animdata_dst->
tmpact) {
604 this->conversion_data.
bmain,
605 this->animdata_src->tmpact ? this->animdata_src->tmpact->id.name + 2 :
nullptr);
610 BLI_assert_msg(ok,
"Expecting tmpact assignment to work when converting Grease Pencil");
613 fcurves_move(this->animdata_dst->
tmpact,
614 this->animdata_dst->tmp_slot_handle,
615 this->animdata_src->tmpact,
616 this->fcurves_from_src_tmp_action);
617 this->fcurves_from_src_tmp_action.
clear();
619 if (!this->fcurves_from_src_drivers.
is_empty()) {
620 fcurves_move_between_listbases(this->animdata_dst->
drivers,
621 this->animdata_src->drivers,
622 this->fcurves_from_src_drivers);
623 this->fcurves_from_src_drivers.
clear();
646 Array<int> is_group_used(num_vertex_groups,
false);
654 if (weight.def_nr >= dvert.totweight) {
658 is_group_used[weight.def_nr] =
true;
667 if (!is_group_used[old_group_i]) {
668 r_indices[old_group_i] = -1;
671 r_indices[old_group_i] = new_group_i++;
674 BLI_addtail(&r_vertex_group_names, def_group_copy);
682 const float uv_rotation,
694 const float2 diagonal = maxv - minv;
695 const float sin_rotation = sin(uv_rotation);
696 const float cos_rotation =
cos(uv_rotation);
698 float2(-sin_rotation, cos_rotation));
703 texture_matrix[2] -= minv;
707 texture_matrix[2] += uv_translation;
710 texture_matrix[2] -= center;
711 texture_matrix = rotation * texture_matrix;
712 texture_matrix[2] += center;
717 return texture_matrix;
747 const float3 local_3 = (totpoints == 2) ? (pt3 * 0.001f) - pt0 : pt3 - pt0;
779 strokemat4x3[2][2] = 0.0f;
780 strokemat4x3[3][2] = 1.0f;
782 return texture_matrix * strokemat4x3;
797 bool has_bezier_stroke =
false;
803 if (gps->editcurve->tot_curve_points == 0) {
806 has_bezier_stroke =
true;
807 num_points += gps->editcurve->tot_curve_points;
811 if (gps->totpoints == 0) {
814 num_points += gps->totpoints;
818 offsets.
append(num_points);
822 if (num_strokes == 0) {
828 curves.
resize(num_points, num_strokes);
829 curves.offsets_for_write().copy_from(offsets);
834 if (!has_bezier_stroke) {
839 curves.curve_types_for_write().copy_from(curve_types);
840 curves.update_curve_types();
848 curves.vertex_group_names = stroke_vertex_group_names;
853 dst_dvert = src_dvert;
857 if (weight.def_nr >= dst_dvert.totweight) {
862 weight.def_nr = stroke_def_nr_map[weight.def_nr];
869 curves.handle_positions_left_for_write() :
872 curves.handle_positions_right_for_write() :
898 attributes.lookup_or_add_for_write_span<
float>(
"aspect_ratio",
AttrDomain::Curve);
910 if (gps->totpoints == 0 ||
911 (gps->editcurve !=
nullptr && gps->editcurve->tot_curve_points == 0))
918 stroke_init_times.span[stroke_i] =
float(
uint32_t(gps->inittime *
double(1e3))) /
float(1e3);
919 stroke_start_caps.span[stroke_i] =
int8_t(gps->caps[0]);
920 stroke_end_caps.span[stroke_i] =
int8_t(gps->caps[1]);
921 stroke_softness.span[stroke_i] = 1.0f - gps->hardness;
922 stroke_point_aspect_ratios.span[stroke_i] = gps->aspect_ratio[0] /
923 max_ff(gps->aspect_ratio[1], 1
e-8);
925 stroke_materials.
span[stroke_i] = gps->mat_nr;
927 const IndexRange points = points_by_curve[stroke_i];
932 handle_positions_left.
slice(points) :
935 handle_positions_right.
slice(points) :
950 for (const int point_i : range) {
951 const bGPDspoint &pt = src_points[point_i];
952 dst_positions[point_i] = float3(pt.x, pt.y, pt.z);
953 dst_radii[point_i] = stroke_thickness * pt.pressure;
954 dst_opacities[point_i] = pt.strength;
955 dst_deltatimes[point_i] = pt.time;
956 dst_rotations[point_i] = pt.uv_rot;
957 dst_vertex_colors[point_i] = ColorGeometry4f(pt.vert_color);
958 dst_selection[point_i] = (pt.flag & GP_SPOINT_SELECT) != 0;
959 if (use_dverts && gps->dvert) {
960 copy_dvert(gps->dvert[point_i], dst_dverts[point_i]);
967 BLI_assert(points.size() == gps->editcurve->tot_curve_points);
969 gps->editcurve->tot_curve_points};
972 for (const int point_i : range) {
973 const bGPDcurve_point &cpt = src_curve_points[point_i];
974 dst_positions[point_i] = float3(cpt.bezt.vec[1]);
975 dst_handle_positions_left[point_i] = float3(cpt.bezt.vec[0]);
976 dst_handle_positions_right[point_i] = float3(cpt.bezt.vec[2]);
977 dst_radii[point_i] = stroke_thickness * cpt.pressure;
978 dst_opacities[point_i] = cpt.strength;
979 dst_rotations[point_i] = cpt.uv_rot;
980 dst_vertex_colors[point_i] = ColorGeometry4f(cpt.vert_color);
981 dst_selection[point_i] = (cpt.flag & GP_CURVE_POINT_SELECT) != 0;
982 if (use_dverts && gps->dvert) {
983 copy_dvert(gps->dvert[point_i], dst_dverts[point_i]);
994 legacy_texture_matrices[stroke_i] = legacy_texture_matrix;
1000 curves.tag_normals_changed();
1001 drawing.set_texture_matrices(legacy_texture_matrices.as_span(), curves.curves_range());
1003 delta_times.finish();
1007 stroke_cyclic.finish();
1008 stroke_init_times.finish();
1009 stroke_start_caps.finish();
1010 stroke_end_caps.finish();
1011 stroke_softness.finish();
1012 stroke_point_aspect_ratios.finish();
1013 stroke_materials.finish();
1045 Layer &new_layer = grease_pencil.add_layer(
1083 LayerMask *new_mask = MEM_new<LayerMask>(__func__, mask->name);
1084 new_mask->
flag = mask->flag;
1087 new_layer.
opacity = gpl->opacity;
1090 Drawing *dst_drawing = grease_pencil.insert_frame(
1092 if (dst_drawing ==
nullptr) {
1107 grease_pencil.set_active_layer(&new_layer);
1117 "pass_index", bke::AttrDomain::Layer);
1121 layer_passes.
span[layer_idx] =
int(gpl->pass_index);
1149 settings.num_frames_before = gpd.
gstep;
1166 conversion_data, grease_pencil.
id, gpd.
id, {{
".location",
".translation"}});
1167 for (
const Layer *layer_iter : grease_pencil.layers()) {
1169 char layer_name_esc[
sizeof((
bGPDlayer{}).info) * 2];
1170 BLI_str_escape(layer_name_esc, layer_iter->name().c_str(),
sizeof(layer_name_esc));
1171 std::string layer_root_path = fmt::format(
"layers[\"{}\"]", layer_name_esc);
1172 animdata_gpdata_transfer.root_path_dst = layer_root_path;
1173 animdata_gpdata_transfer.root_path_src = layer_root_path;
1174 animdata_gpdata_transfer.fcurves_convert();
1176 animdata_gpdata_transfer.fcurves_convert_finalize();
1186 bNodeTree *group = bke::node_tree_add_in_lib(
1189 if (!group->geometry_node_asset_traits) {
1190 group->geometry_node_asset_traits = MEM_cnew<GeometryNodeAssetTraits>(__func__);
1194 group->tree_interface.add_socket(
1196 group->tree_interface.add_socket(
1203 radius_offset_data.min = -
FLT_MAX;
1204 radius_offset_data.max =
FLT_MAX;
1206 group->tree_interface.add_socket(
1209 bNode *group_output = bke::node_add_node(
nullptr, group,
"NodeGroupOutput");
1210 group_output->
locx = 800;
1211 group_output->
locy = 160;
1212 bNode *group_input = bke::node_add_node(
nullptr, group,
"NodeGroupInput");
1213 group_input->
locx = 0;
1214 group_input->
locy = 160;
1216 bNode *set_curve_radius = bke::node_add_node(
nullptr, group,
"GeometryNodeSetCurveRadius");
1217 set_curve_radius->
locx = 600;
1218 set_curve_radius->
locy = 160;
1219 bNode *named_layer_selection = bke::node_add_node(
1220 nullptr, group,
"GeometryNodeInputNamedLayerSelection");
1221 named_layer_selection->
locx = 200;
1222 named_layer_selection->
locy = 100;
1223 bNode *input_radius = bke::node_add_node(
nullptr, group,
"GeometryNodeInputRadius");
1224 input_radius->
locx = 0;
1225 input_radius->
locy = 0;
1227 bNode *add = bke::node_add_node(
nullptr, group,
"ShaderNodeMath");
1232 bNode *clamp_radius = bke::node_add_node(
nullptr, group,
"ShaderNodeClamp");
1233 clamp_radius->
locx = 400;
1234 clamp_radius->
locy = 0;
1238 bke::node_add_link(group,
1240 bke::node_find_socket(group_input,
SOCK_OUT,
"Socket_0"),
1242 bke::node_find_socket(set_curve_radius,
SOCK_IN,
"Curve"));
1243 bke::node_add_link(group,
1245 bke::node_find_socket(set_curve_radius,
SOCK_OUT,
"Curve"),
1247 bke::node_find_socket(group_output,
SOCK_IN,
"Socket_1"));
1249 bke::node_add_link(group,
1251 bke::node_find_socket(group_input,
SOCK_OUT,
"Socket_3"),
1252 named_layer_selection,
1253 bke::node_find_socket(named_layer_selection,
SOCK_IN,
"Name"));
1254 bke::node_add_link(group,
1255 named_layer_selection,
1256 bke::node_find_socket(named_layer_selection,
SOCK_OUT,
"Selection"),
1258 bke::node_find_socket(set_curve_radius,
SOCK_IN,
"Selection"));
1260 bke::node_add_link(group,
1262 bke::node_find_socket(group_input,
SOCK_OUT,
"Socket_2"),
1264 bke::node_find_socket(add,
SOCK_IN,
"Value"));
1265 bke::node_add_link(group,
1267 bke::node_find_socket(input_radius,
SOCK_OUT,
"Radius"),
1269 bke::node_find_socket(add,
SOCK_IN,
"Value_001"));
1270 bke::node_add_link(group,
1272 bke::node_find_socket(add,
SOCK_OUT,
"Value"),
1274 bke::node_find_socket(clamp_radius,
SOCK_IN,
"Value"));
1275 bke::node_add_link(group,
1277 bke::node_find_socket(clamp_radius,
SOCK_OUT,
"Result"),
1279 bke::node_find_socket(set_curve_radius,
SOCK_IN,
"Radius"));
1282 bke::node_set_selected(node,
false);
1293 conversion_data, dst_object.
id, src_object_data.
id, {{
"pixel_factor",
".thickness_factor"}});
1296 const float thickness_factor = src_object_data.pixfactor;
1297 const bool has_thickness_factor_animation =
1298 animdata_thickness_transfer.source_has_animation_to_convert();
1299 const bool has_thickness_factor = thickness_factor != 1.0f || has_thickness_factor_animation;
1301 if (!has_thickness_factor) {
1316 if (has_thickness_factor_animation) {
1317 char modifier_name_esc[
MAX_NAME * 2];
1319 animdata_thickness_transfer.root_path_dst = fmt::format(
"modifiers[\"{}\"]",
1322 animdata_thickness_transfer.fcurves_convert();
1325 animdata_thickness_transfer.fcurves_convert_finalize();
1344 fcurve.
flag &= ~FCURVE_INT_VALUES;
1370 animdata_convert_thickness.root_path_src = fmt::format(
"modifiers[\"{}\"]",
modifier_name);
1371 animdata_convert_thickness.root_path_dst = fmt::format(
"modifiers[\"{}\"]",
modifier_name);
1373 if (!animdata_convert_thickness.source_has_animation_to_convert()) {
1376 animdata_convert_thickness.fcurves_convert();
1379 animdata_convert_thickness.fcurves_convert_finalize();
1393 {{
".tint_color",
".color"}, {
".tint_factor",
".factor"}});
1395 AnimDataConvertor animdata_thickness_transfer(
1399 {{
".line_change",
"[\"Socket_2\"]", fcurve_convert_thickness_cb}});
1404 const float tint_factor = gpl->tintcolor[3];
1405 const int thickness_px = gpl->line_change;
1407 char layer_name_esc[
sizeof(gpl->info) * 2];
1408 BLI_str_escape(layer_name_esc, gpl->info,
sizeof(layer_name_esc));
1409 animdata_tint_transfer.root_path_src = fmt::format(
"layers[\"{}\"]", layer_name_esc);
1410 animdata_thickness_transfer.root_path_src = fmt::format(
"layers[\"{}\"]", layer_name_esc);
1412 const bool has_tint_adjustment_animation =
1413 animdata_tint_transfer.source_has_animation_to_convert();
1414 const bool has_thickness_adjustment_animation =
1415 animdata_thickness_transfer.source_has_animation_to_convert();
1418 const bool has_tint_adjustment = tint_factor > 0.0f || has_tint_adjustment_animation;
1419 const bool has_thickness_adjustment = thickness_px != 0 || has_thickness_adjustment_animation;
1422 if (has_tint_adjustment) {
1427 tmd->
factor = tint_factor;
1438 if (has_tint_adjustment_animation) {
1439 char modifier_name_esc[
MAX_NAME * 2];
1441 animdata_tint_transfer.root_path_dst = fmt::format(
"modifiers[\"{}\"]", modifier_name_esc);
1443 animdata_tint_transfer.fcurves_convert();
1447 if (has_thickness_adjustment) {
1453 float(thickness_px) * LEGACY_RADIUS_CONVERSION_FACTOR, uniform_object_scale);
1455 const auto offset_radius_ntree_ensure = [&](
Library *owner_library) {
1465 if (ntree_iter->id.lib != owner_library) {
1468 if (
STREQ(ntree_iter->id.name + 2, OFFSET_RADIUS_NODETREE_NAME)) {
1480 bNodeTree *offset_radius_node_tree = offset_radius_ntree_ensure(dst_object.id.lib);
1488 md->node_group = offset_radius_node_tree;
1493 md->settings.properties = bke::idprop::create_group(
"Nodes Modifier Settings").release();
1495 bke::idprop::create(
DATA_(
"Socket_2"), radius_offset).release();
1502 bke::idprop::create(
DATA_(
"Socket_3"), gpl->info).release());
1504 if (has_thickness_adjustment_animation) {
1505 char modifier_name_esc[
MAX_NAME * 2];
1507 animdata_thickness_transfer.root_path_dst = fmt::format(
"modifiers[\"{}\"]",
1510 animdata_thickness_transfer.fcurves_convert();
1515 animdata_tint_transfer.fcurves_convert_finalize();
1516 animdata_thickness_transfer.fcurves_convert_finalize();
1534 for (md =
static_cast<ModifierData *
>(
object.modifiers.first);
1546 if (legacy_md.
name[0]) {
1562 char legacy_name_esc[
MAX_NAME * 2];
1564 anim_convertor.
root_path_src = fmt::format(
"grease_pencil_modifiers[\"{}\"]", legacy_name_esc);
1568 anim_convertor.
root_path_dst = fmt::format(
"modifiers[\"{}\"]", new_name_esc);
1579 const int layer_pass,
1580 const bool invert_layer,
1581 const bool invert_layer_pass,
1583 const int material_pass,
1584 const bool invert_material,
1585 const bool invert_material_pass,
1587 const bool invert_vertex_group,
1589 const bool use_custom_curve)
1598 if (layer_pass > 0) {
1601 if (invert_layer_pass) {
1607 *material =
nullptr;
1609 if (invert_material) {
1613 if (material_pass > 0) {
1616 if (invert_material_pass) {
1621 if (invert_vertex_group) {
1630 *custom_curve =
nullptr;
1632 if (use_custom_curve) {
1646 md_armature.
object = legacy_md_armature.object;
1647 legacy_md_armature.object =
nullptr;
1648 md_armature.deformflag = legacy_md_armature.deformflag;
1659 legacy_md_armature.vgname,
1674 md_array.
object = legacy_md_array.object;
1675 legacy_md_array.object =
nullptr;
1676 md_array.count = legacy_md_array.count;
1690 copy_v3_v3(md_array.offset, legacy_md_array.offset);
1691 copy_v3_v3(md_array.shift, legacy_md_array.shift);
1692 copy_v3_v3(md_array.rnd_offset, legacy_md_array.rnd_offset);
1693 copy_v3_v3(md_array.rnd_rot, legacy_md_array.rnd_rot);
1694 copy_v3_v3(md_array.rnd_scale, legacy_md_array.rnd_scale);
1695 md_array.seed = legacy_md_array.seed;
1696 md_array.mat_rpl = legacy_md_array.mat_rpl;
1699 legacy_md_array.layername,
1700 legacy_md_array.layer_pass,
1703 &legacy_md_array.material,
1704 legacy_md_array.pass_index,
1736 copy_v3_v3(md_color.hsv, legacy_md_color.hsv);
1739 legacy_md_color.layername,
1740 legacy_md_color.layer_pass,
1743 &legacy_md_color.material,
1744 legacy_md_color.pass_index,
1749 &legacy_md_color.curve_intensity,
1763 md_dash.segment_active_index = legacy_md_dash.segment_active_index;
1764 md_dash.segments_num = legacy_md_dash.segments_len;
1766 md_dash.segments_array = MEM_cnew_array<GreasePencilDashModifierSegment>(
1767 legacy_md_dash.segments_len, __func__);
1768 for (
const int i :
IndexRange(md_dash.segments_num)) {
1772 dst_segment.
flag = 0;
1776 dst_segment.
dash = src_segment.
dash;
1777 dst_segment.
gap = src_segment.
gap;
1784 legacy_md_dash.layername,
1785 legacy_md_dash.layer_pass,
1788 &legacy_md_dash.material,
1789 legacy_md_dash.pass_index,
1818 md_envelope.mat_nr = legacy_md_envelope.mat_nr;
1819 md_envelope.thickness = legacy_md_envelope.thickness;
1820 md_envelope.strength = legacy_md_envelope.strength;
1821 md_envelope.skip = legacy_md_envelope.skip;
1822 md_envelope.spread = legacy_md_envelope.spread;
1825 legacy_md_envelope.layername,
1826 legacy_md_envelope.layer_pass,
1829 &legacy_md_envelope.material,
1830 legacy_md_envelope.pass_index,
1833 legacy_md_envelope.vgname,
1881 md_hook.object = legacy_md_hook.object;
1882 legacy_md_hook.object =
nullptr;
1883 STRNCPY(md_hook.subtarget, legacy_md_hook.subtarget);
1884 copy_m4_m4(md_hook.parentinv, legacy_md_hook.parentinv);
1885 copy_v3_v3(md_hook.cent, legacy_md_hook.cent);
1886 md_hook.falloff = legacy_md_hook.falloff;
1887 md_hook.force = legacy_md_hook.force;
1890 legacy_md_hook.layername,
1891 legacy_md_hook.layer_pass,
1894 &legacy_md_hook.material,
1895 legacy_md_hook.pass_index,
1898 legacy_md_hook.vgname,
1900 &legacy_md_hook.curfalloff,
1913 md_lattice.
object = legacy_md_lattice.object;
1914 legacy_md_lattice.object =
nullptr;
1915 md_lattice.strength = legacy_md_lattice.strength;
1918 legacy_md_lattice.layername,
1919 legacy_md_lattice.layer_pass,
1922 &legacy_md_lattice.material,
1923 legacy_md_lattice.pass_index,
1926 legacy_md_lattice.vgname,
1941 md_length.
flag = legacy_md_length.flag;
1942 md_length.start_fac = legacy_md_length.start_fac;
1943 md_length.end_fac = legacy_md_length.end_fac;
1944 md_length.rand_start_fac = legacy_md_length.rand_start_fac;
1945 md_length.rand_end_fac = legacy_md_length.rand_end_fac;
1946 md_length.rand_offset = legacy_md_length.rand_offset;
1947 md_length.overshoot_fac = legacy_md_length.overshoot_fac;
1948 md_length.seed = legacy_md_length.seed;
1949 md_length.step = legacy_md_length.step;
1950 md_length.mode = legacy_md_length.mode;
1951 md_length.point_density = legacy_md_length.point_density;
1952 md_length.segment_influence = legacy_md_length.segment_influence;
1953 md_length.max_angle = legacy_md_length.max_angle;
1956 legacy_md_length.layername,
1957 legacy_md_length.layer_pass,
1960 &legacy_md_length.material,
1961 legacy_md_length.pass_index,
1979 md_mirror.
object = legacy_md_mirror.object;
1980 legacy_md_mirror.object =
nullptr;
1993 legacy_md_mirror.layername,
1994 legacy_md_mirror.layer_pass,
1997 &legacy_md_mirror.material,
1998 legacy_md_mirror.pass_index,
2016 md_multiply.
flag = 0;
2020 md_multiply.duplications = legacy_md_multiply.duplications;
2021 md_multiply.distance = legacy_md_multiply.distance;
2022 md_multiply.offset = legacy_md_multiply.offset;
2023 md_multiply.fading_center = legacy_md_multiply.fading_center;
2024 md_multiply.fading_thickness = legacy_md_multiply.fading_thickness;
2025 md_multiply.fading_opacity = legacy_md_multiply.fading_opacity;
2030 legacy_md_multiply.layername,
2031 legacy_md_multiply.layer_pass,
2034 &legacy_md_multiply.material,
2035 legacy_md_multiply.pass_index,
2053 md_noise.
flag = legacy_md_noise.flag;
2054 md_noise.factor = legacy_md_noise.factor;
2055 md_noise.factor_strength = legacy_md_noise.factor_strength;
2056 md_noise.factor_thickness = legacy_md_noise.factor_thickness;
2057 md_noise.factor_uvs = legacy_md_noise.factor_uvs;
2058 md_noise.noise_scale = legacy_md_noise.noise_scale;
2059 md_noise.noise_offset = legacy_md_noise.noise_offset;
2060 md_noise.noise_mode = legacy_md_noise.noise_mode;
2061 md_noise.step = legacy_md_noise.step;
2062 md_noise.seed = legacy_md_noise.seed;
2065 legacy_md_noise.layername,
2066 legacy_md_noise.layer_pass,
2069 &legacy_md_noise.material,
2070 legacy_md_noise.pass_index,
2073 legacy_md_noise.vgname,
2075 &legacy_md_noise.curve_intensity,
2106 copy_v3_v3(md_offset.loc, legacy_md_offset.loc);
2107 copy_v3_v3(md_offset.rot, legacy_md_offset.rot);
2108 copy_v3_v3(md_offset.scale, legacy_md_offset.scale);
2109 copy_v3_v3(md_offset.stroke_loc, legacy_md_offset.rnd_offset);
2110 copy_v3_v3(md_offset.stroke_rot, legacy_md_offset.rnd_rot);
2111 copy_v3_v3(md_offset.stroke_scale, legacy_md_offset.rnd_scale);
2112 md_offset.seed = legacy_md_offset.seed;
2113 md_offset.stroke_step = legacy_md_offset.stroke_step;
2114 md_offset.stroke_start_offset = legacy_md_offset.stroke_start_offset;
2117 legacy_md_offset.layername,
2118 legacy_md_offset.layer_pass,
2121 &legacy_md_offset.material,
2122 legacy_md_offset.pass_index,
2125 legacy_md_offset.vgname,
2140 md_opacity.
flag = 0;
2161 md_opacity.color_factor = legacy_md_opacity.factor;
2162 md_opacity.hardness_factor = legacy_md_opacity.hardness;
2165 legacy_md_opacity.layername,
2166 legacy_md_opacity.layer_pass,
2169 &legacy_md_opacity.material,
2170 legacy_md_opacity.pass_index,
2173 legacy_md_opacity.vgname,
2175 &legacy_md_opacity.curve_intensity,
2188 md_outline.
flag = 0;
2192 md_outline.object = legacy_md_outline.object;
2193 legacy_md_outline.object =
nullptr;
2194 md_outline.outline_material = legacy_md_outline.outline_material;
2195 legacy_md_outline.outline_material =
nullptr;
2196 md_outline.sample_length = legacy_md_outline.sample_length;
2197 md_outline.subdiv = legacy_md_outline.subdiv;
2198 md_outline.thickness = legacy_md_outline.thickness;
2201 legacy_md_outline.layername,
2202 legacy_md_outline.layer_pass,
2205 &legacy_md_outline.material,
2206 legacy_md_outline.pass_index,
2226 md_shrinkwrap.
shrink_type = legacy_md_shrinkwrap.shrink_type;
2228 md_shrinkwrap.shrink_opts = legacy_md_shrinkwrap.shrink_opts;
2230 md_shrinkwrap.shrink_mode = legacy_md_shrinkwrap.shrink_mode;
2232 md_shrinkwrap.proj_axis = legacy_md_shrinkwrap.proj_axis;
2234 md_shrinkwrap.target = legacy_md_shrinkwrap.target;
2235 legacy_md_shrinkwrap.target =
nullptr;
2236 md_shrinkwrap.aux_target = legacy_md_shrinkwrap.aux_target;
2237 legacy_md_shrinkwrap.aux_target =
nullptr;
2238 md_shrinkwrap.keep_dist = legacy_md_shrinkwrap.keep_dist;
2239 md_shrinkwrap.proj_limit = legacy_md_shrinkwrap.proj_limit;
2240 md_shrinkwrap.subsurf_levels = legacy_md_shrinkwrap.subsurf_levels;
2241 md_shrinkwrap.smooth_factor = legacy_md_shrinkwrap.smooth_factor;
2242 md_shrinkwrap.smooth_step = legacy_md_shrinkwrap.smooth_step;
2245 legacy_md_shrinkwrap.layername,
2246 legacy_md_shrinkwrap.layer_pass,
2249 &legacy_md_shrinkwrap.material,
2250 legacy_md_shrinkwrap.pass_index,
2253 legacy_md_shrinkwrap.vgname,
2284 md_smooth.factor = legacy_md_smooth.factor;
2285 md_smooth.step = legacy_md_smooth.step;
2288 legacy_md_smooth.layername,
2289 legacy_md_smooth.layer_pass,
2292 &legacy_md_smooth.material,
2293 legacy_md_smooth.pass_index,
2296 legacy_md_smooth.vgname,
2298 &legacy_md_smooth.curve_intensity,
2319 md_subdiv.level = legacy_md_subdiv.level;
2322 legacy_md_subdiv.layername,
2323 legacy_md_subdiv.layer_pass,
2326 &legacy_md_subdiv.material,
2327 legacy_md_subdiv.pass_index,
2364 md_texture.uv_offset = legacy_md_texture.uv_offset;
2365 md_texture.uv_scale = legacy_md_texture.uv_scale;
2366 md_texture.fill_rotation = legacy_md_texture.fill_rotation;
2367 copy_v2_v2(md_texture.fill_offset, legacy_md_texture.fill_offset);
2368 md_texture.fill_scale = legacy_md_texture.fill_scale;
2369 md_texture.layer_pass = legacy_md_texture.layer_pass;
2370 md_texture.alignment_rotation = legacy_md_texture.alignment_rotation;
2373 legacy_md_texture.layername,
2374 legacy_md_texture.layer_pass,
2377 &legacy_md_texture.material,
2378 legacy_md_texture.pass_index,
2381 legacy_md_texture.vgname,
2396 md_thickness.
flag = 0;
2403 md_thickness.thickness_fac = legacy_md_thickness.thickness_fac;
2407 legacy_md_thickness.layername,
2408 legacy_md_thickness.layer_pass,
2411 &legacy_md_thickness.material,
2412 legacy_md_thickness.pass_index,
2415 legacy_md_thickness.vgname,
2417 &legacy_md_thickness.curve_thickness,
2454 md_time.offset = legacy_md_time.offset;
2455 md_time.frame_scale = legacy_md_time.frame_scale;
2456 md_time.sfra = legacy_md_time.sfra;
2457 md_time.efra = legacy_md_time.efra;
2458 md_time.segment_active_index = legacy_md_time.segment_active_index;
2459 md_time.segments_num = legacy_md_time.segments_len;
2461 md_time.segments_array = MEM_cnew_array<GreasePencilTimeModifierSegment>(
2462 legacy_md_time.segments_len, __func__);
2463 for (
const int i :
IndexRange(md_time.segments_num)) {
2485 legacy_md_time.layername,
2486 legacy_md_time.layer_pass,
2531 md_tint.factor = legacy_md_tint.factor;
2532 md_tint.radius = legacy_md_tint.radius;
2533 copy_v3_v3(md_tint.color, legacy_md_tint.rgb);
2534 md_tint.object = legacy_md_tint.object;
2535 legacy_md_tint.object =
nullptr;
2537 md_tint.color_ramp = legacy_md_tint.colorband;
2538 legacy_md_tint.colorband =
nullptr;
2541 legacy_md_tint.layername,
2542 legacy_md_tint.layer_pass,
2545 &legacy_md_tint.material,
2546 legacy_md_tint.pass_index,
2549 legacy_md_tint.vgname,
2551 &legacy_md_tint.curve_intensity,
2564 md_weight_angle.
flag = 0;
2579 md_weight_angle.axis = legacy_md_weight_angle.axis;
2580 STRNCPY(md_weight_angle.target_vgname, legacy_md_weight_angle.target_vgname);
2581 md_weight_angle.min_weight = legacy_md_weight_angle.min_weight;
2582 md_weight_angle.angle = legacy_md_weight_angle.angle;
2585 legacy_md_weight_angle.layername,
2586 legacy_md_weight_angle.layer_pass,
2589 &legacy_md_weight_angle.material,
2590 legacy_md_weight_angle.pass_index,
2593 legacy_md_weight_angle.vgname,
2608 md_weight_prox.
flag = 0;
2615 STRNCPY(md_weight_prox.target_vgname, legacy_md_weight_prox.target_vgname);
2616 md_weight_prox.min_weight = legacy_md_weight_prox.min_weight;
2617 md_weight_prox.dist_start = legacy_md_weight_prox.dist_start;
2618 md_weight_prox.dist_end = legacy_md_weight_prox.dist_end;
2619 md_weight_prox.object = legacy_md_weight_prox.object;
2620 legacy_md_weight_prox.object =
nullptr;
2623 legacy_md_weight_prox.layername,
2624 legacy_md_weight_prox.layer_pass,
2627 &legacy_md_weight_prox.material,
2628 legacy_md_weight_prox.pass_index,
2631 legacy_md_weight_prox.vgname,
2646 greasepencil::convert::lineart_wrap_v3(&legacy_md_lineart, &md_lineart);
2666 switch (legacy_md_build.mode) {
2679 switch (legacy_md_build.time_alignment) {
2689 switch (legacy_md_build.time_mode) {
2702 switch (legacy_md_build.transition) {
2715 md_build.start_frame = legacy_md_build.start_frame;
2716 md_build.end_frame = legacy_md_build.end_frame;
2717 md_build.start_delay = legacy_md_build.start_delay;
2718 md_build.length = legacy_md_build.length;
2719 md_build.fade_fac = legacy_md_build.fade_fac;
2720 md_build.fade_opacity_strength = legacy_md_build.fade_opacity_strength;
2721 md_build.fade_thickness_strength = legacy_md_build.fade_thickness_strength;
2722 md_build.percentage_fac = legacy_md_build.percentage_fac;
2723 md_build.speed_fac = legacy_md_build.speed_fac;
2724 md_build.speed_maxgap = legacy_md_build.speed_maxgap;
2725 md_build.object = legacy_md_build.object;
2726 STRNCPY(md_build.target_vgname, legacy_md_build.target_vgname);
2729 legacy_md_build.layername,
2730 legacy_md_build.layer_pass,
2733 &legacy_md_build.material,
2734 legacy_md_build.pass_index,
2737 legacy_md_build.target_vgname,
2752 switch (legacy_md_simplify.mode) {
2767 md_simplify.step = legacy_md_simplify.step;
2768 md_simplify.factor = legacy_md_simplify.factor;
2769 md_simplify.length = legacy_md_simplify.length;
2770 md_simplify.sharp_threshold = legacy_md_simplify.sharp_threshold;
2771 md_simplify.distance = legacy_md_simplify.distance;
2774 legacy_md_simplify.layername,
2775 legacy_md_simplify.layer_pass,
2778 &legacy_md_simplify.material,
2779 legacy_md_simplify.pass_index,
2795 switch (gpd_md->type) {
2920 legacy_gpd->
flag &= ~GP_DATA_ANNOTATIONS;
2922 object_gpv2.
add(legacy_gpd);
2928 auto sanitize_gpv2_annotation = [&](
bGPdata **legacy_gpd_p) {
2929 bGPdata *legacy_gpd = *legacy_gpd_p;
2935 if (!object_gpv2.
contains(legacy_gpd)) {
2947 if (!new_annotation_gpd) {
2952 annotations_gpv2.
add_overwrite(legacy_gpd, new_annotation_gpd);
2958 *legacy_gpd_p = new_annotation_gpd;
2963 sanitize_gpv2_annotation(&scene->gpd);
2969 sanitize_gpv2_annotation(&
node_tree->gpd);
2974 sanitize_gpv2_annotation(&
node_tree->gpd);
2978 sanitize_gpv2_annotation(&movie_clip->gpd);
2982 sanitize_gpv2_annotation(&mvc_track->gpd);
2987 for (
int i = 0; i < mvc_plane_track->point_tracksnr; i++) {
2988 sanitize_gpv2_annotation(&mvc_plane_track->point_tracks[i]->gpd);
3000 sanitize_gpv2_annotation(&space_sequencer->
gpd);
3005 sanitize_gpv2_annotation(&space_image->
gpd);
3010 sanitize_gpv2_annotation(&space_node->
gpd);
3046 const bool do_gpencil_data_conversion = (new_grease_pencil ==
nullptr);
3048 if (!new_grease_pencil) {
3054 object.data = new_grease_pencil;
3061 if (do_gpencil_data_conversion) {
3108 legacy_gpd,
nullptr);
3109 if (!new_grease_pencil) {
3116 gpd_remapper.
add(&legacy_gpd->id, &new_grease_pencil->
id);
3126 ID *item_new_id = BKE_blendfile_link_append_context_item_newid_get(lapp_context, item);
3127 if (!item_new_id || GS(item_new_id->name) != ID_GD_LEGACY) {
3132 reinterpret_cast<bGPdata *
>(item_new_id));
3133 if (item_grease_pencil && *item_grease_pencil) {
3135 lapp_context, item, &(*item_grease_pencil)->id);
Functions and classes to work with Actions.
Functionality to iterate an Action in various ways.
Functions for backward compatibility with the legacy Action API.
Blender kernel action and pose functionality.
AnimData * BKE_animdata_copy_in_lib(Main *bmain, std::optional< Library * > owner_library, AnimData *adt, int flag)
AnimData * BKE_animdata_ensure_id(ID *id)
AnimData * BKE_animdata_from_id(const ID *id)
void BKE_blendfile_link_append_context_item_foreach(BlendfileLinkAppendContext *lapp_context, blender::FunctionRef< bool(BlendfileLinkAppendContext *lapp_context, BlendfileLinkAppendContextItem *item)> callback_function, eBlendfileLinkAppendForeachItemFlag flag)
void BKE_blendfile_link_append_context_item_newid_set(BlendfileLinkAppendContext *lapp_context, BlendfileLinkAppendContextItem *item, ID *new_id)
eBlendfileLinkAppendForeachItemFlag
@ BKE_BLENDFILE_LINK_APPEND_FOREACH_ITEM_FLAG_DO_DIRECT
@ BKE_BLENDFILE_LINK_APPEND_FOREACH_ITEM_FLAG_DO_INDIRECT
Low-level operations for curves.
void BKE_fcurve_handles_recalc(FCurve *fcu)
void BKE_gpencil_modifier_free_ex(struct GpencilModifierData *md, int flag)
Low-level operations for grease pencil.
bool IDP_AddToGroup(IDProperty *group, IDProperty *prop) ATTR_NONNULL()
IDProperty * IDP_CopyProperty(const IDProperty *prop) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
IDPropertyUIData * IDP_ui_data_ensure(IDProperty *prop)
void * BKE_id_new_in_lib(Main *bmain, std::optional< Library * > owner_library, short type, const char *name)
void id_fake_user_set(ID *id)
struct ID * BKE_id_copy_in_lib(Main *bmain, std::optional< Library * > owner_library, const ID *id, const ID *new_owner_id, ID **new_id_p, int flag)
void id_us_plus_no_lib(ID *id)
@ ID_REMAP_ALLOW_IDTYPE_MISMATCH
void BKE_libblock_remap_multiple(Main *bmain, blender::bke::id::IDRemapper &mappings, const int remap_flags)
#define FOREACH_MAIN_ID_END
#define FOREACH_MAIN_ID_BEGIN(_bmain, _id)
General operations, lookup, etc. for materials.
void BKE_id_materials_copy(struct Main *bmain, struct ID *id_src, struct ID *id_dst)
const ModifierTypeInfo * BKE_modifier_get_info(ModifierType type)
void BKE_modifiers_persistent_uid_init(const Object &object, ModifierData &md)
@ eModifierTypeFlag_RequiresOriginalData
void BKE_modifier_unique_name(ListBase *modifiers, ModifierData *md)
ModifierData * BKE_modifier_new(int type)
void BKE_ntree_update_main_tree(Main *bmain, bNodeTree *ntree, NodeTreeUpdateExtraParams *params)
General operations, lookup, etc. for blender objects.
void BKE_object_free_derived_caches(Object *ob)
#define BLI_assert_unreachable()
#define BLI_assert_msg(a, msg)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
#define LISTBASE_FOREACH_INDEX(type, var, list, index_var)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_insertlinkbefore(struct ListBase *listbase, void *vnextlink, void *vnewlink) ATTR_NONNULL(1)
void * BLI_pophead(ListBase *listbase) ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE float max_ff(float a, float b)
void copy_m4_m4(float m1[4][4], const float m2[4][4])
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void copy_v3_v3(float r[3], const float a[3])
#define STRNCPY(dst, src)
char * BLI_strdupn(const char *str, size_t len) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define SNPRINTF(dst, format,...)
int char char int int int int size_t BLI_strnlen(const char *str, size_t maxlen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define STRNCPY_UTF8(dst, src)
#define UNUSED_VARS_NDEBUG(...)
#define SET_FLAG_FROM_TEST(value, test, flag)
external readfile function prototypes.
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
@ GP_CURVE_NEEDS_STROKE_UPDATE
@ GP_LAYER_DISABLE_MASKS_IN_VIEWLAYER
@ GP_DATA_AUTOLOCK_LAYERS
@ GP_OUTLINE_INVERT_MATERIAL
@ GP_OUTLINE_INVERT_LAYER
@ GP_OUTLINE_INVERT_LAYERPASS
@ GP_LENGTH_INVERT_MATERIAL
@ GP_LENGTH_INVERT_LAYERPASS
@ GP_TIME_SEG_MODE_PINGPONG
@ GP_TIME_SEG_MODE_REVERSE
@ GP_TIME_SEG_MODE_NORMAL
@ GP_SUBDIV_INVERT_MATERIAL
@ GP_SUBDIV_INVERT_LAYERPASS
@ GP_LATTICE_INVERT_LAYERPASS
@ GP_LATTICE_INVERT_LAYER
@ GP_LATTICE_INVERT_VGROUP
@ GP_LATTICE_INVERT_MATERIAL
@ GP_BUILD_TRANSITION_SHRINK
@ GP_BUILD_TRANSITION_VANISH
@ GP_BUILD_TRANSITION_GROW
@ GP_WEIGHT_INVERT_VGROUP
@ GP_WEIGHT_INVERT_OUTPUT
@ GP_WEIGHT_INVERT_MATERIAL
@ GP_WEIGHT_INVERT_LAYERPASS
@ GP_WEIGHT_MULTIPLY_DATA
@ GP_BUILD_MODE_SEQUENTIAL
@ GP_BUILD_MODE_CONCURRENT
@ GP_ENVELOPE_INVERT_LAYERPASS
@ GP_ENVELOPE_INVERT_LAYER
@ GP_ENVELOPE_INVERT_PASS
@ GP_ENVELOPE_INVERT_VGROUP
@ GP_ENVELOPE_INVERT_MATERIAL
@ GP_SIMPLIFY_INVERT_LAYER
@ GP_SIMPLIFY_INVERT_PASS
@ GP_SIMPLIFY_INVERT_MATERIAL
@ GP_SIMPLIFY_INVERT_LAYERPASS
@ GP_HOOK_INVERT_MATERIAL
@ GP_HOOK_INVERT_LAYERPASS
@ GP_TIME_INVERT_LAYERPASS
@ GP_COLOR_INVERT_LAYERPASS
@ GP_COLOR_INVERT_MATERIAL
@ GP_SMOOTH_INVERT_LAYERPASS
@ GP_SMOOTH_MOD_THICKNESS
@ GP_SMOOTH_INVERT_MATERIAL
@ GP_SMOOTH_INVERT_VGROUP
@ GP_BUILD_TIMEALIGN_START
@ GP_OPACITY_WEIGHT_FACTOR
@ GP_OPACITY_INVERT_LAYER
@ GP_OPACITY_INVERT_VGROUP
@ GP_OPACITY_CUSTOM_CURVE
@ GP_OPACITY_INVERT_MATERIAL
@ GP_OPACITY_INVERT_LAYERPASS
@ GP_THICK_INVERT_MATERIAL
@ GP_THICK_INVERT_LAYERPASS
@ GP_MULTIPLY_ENABLE_FADING
@ GP_BUILD_TIMEMODE_FRAMES
@ GP_BUILD_TIMEMODE_PERCENTAGE
@ GP_BUILD_TIMEMODE_DRAWSPEED
@ eGPHook_Falloff_InvSquare
@ GP_ARRAY_UNIFORM_RANDOM_SCALE
@ GP_ARRAY_INVERT_MATERIAL
@ GP_ARRAY_INVERT_LAYERPASS
@ GP_OFFSET_INVERT_MATERIAL
@ GP_OFFSET_UNIFORM_RANDOM_SCALE
@ GP_OFFSET_INVERT_VGROUP
@ GP_OFFSET_INVERT_LAYERPASS
@ GP_TINT_INVERT_LAYERPASS
@ GP_TINT_INVERT_MATERIAL
@ GP_MIRROR_INVERT_MATERIAL
@ GP_MIRROR_INVERT_LAYERPASS
@ GP_DASH_INVERT_LAYERPASS
@ GP_DASH_INVERT_MATERIAL
@ GP_MODIFY_COLOR_HARDNESS
@ GP_SHRINKWRAP_INVERT_LAYER
@ GP_SHRINKWRAP_INVERT_VGROUP
@ GP_SHRINKWRAP_INVERT_LAYERPASS
@ GP_SHRINKWRAP_INVERT_PASS
@ GP_SHRINKWRAP_INVERT_MATERIAL
@ GP_TEX_INVERT_LAYERPASS
@ eGpencilModifierType_Dash
@ eGpencilModifierType_Array
@ eGpencilModifierType_Noise
@ eGpencilModifierType_Mirror
@ eGpencilModifierType_Color
@ eGpencilModifierType_Multiply
@ eGpencilModifierType_Texture
@ eGpencilModifierType_Subdiv
@ eGpencilModifierType_Length
@ eGpencilModifierType_Lattice
@ eGpencilModifierType_Opacity
@ eGpencilModifierType_Hook
@ eGpencilModifierType_Simplify
@ eGpencilModifierType_Shrinkwrap
@ eGpencilModifierType_WeightProximity
@ eGpencilModifierType_Armature
@ eGpencilModifierType_WeightAngle
@ eGpencilModifierType_Lineart
@ eGpencilModifierType_None
@ eGpencilModifierType_Smooth
@ eGpencilModifierType_Tint
@ eGpencilModifierType_Outline
@ eGpencilModifierType_Envelope
@ eGpencilModifierType_Time
@ eGpencilModifierType_Thick
@ eGpencilModifierType_Build
@ eGpencilModifierType_Offset
@ GP_NOISE_INVERT_MATERIAL
@ GP_NOISE_INVERT_LAYERPASS
@ GP_LAYER_TREE_NODE_MUTE
@ GP_LAYER_TREE_NODE_HIDE_ONION_SKINNING
@ GP_LAYER_TREE_NODE_USE_LIGHTS
@ GP_LAYER_TREE_NODE_HIDE_MASKS
@ GP_LAYER_TREE_NODE_DISABLE_MASKS_IN_VIEWLAYER
@ GREASE_PENCIL_AUTOLOCK_LAYERS
@ GREASE_PENCIL_ANIM_CHANNEL_EXPANDED
@ GREASE_PENCIL_STROKE_ORDER_3D
@ GP_ONION_SKINNING_USE_FADE
@ GP_ONION_SKINNING_SHOW_LOOP
@ GP_ONION_SKINNING_USE_CUSTOM_COLORS
#define GREASE_PENCIL_ONION_SKINNING_FILTER_ALL
@ eModifierFlag_OverrideLibrary_Local
@ MOD_GREASE_PENCIL_MULTIPLY_ENABLE_FADING
@ MOD_GREASE_PENCIL_SMOOTH_MOD_LOCATION
@ MOD_GREASE_PENCIL_SMOOTH_MOD_STRENGTH
@ MOD_GREASE_PENCIL_SMOOTH_KEEP_SHAPE
@ MOD_GREASE_PENCIL_SMOOTH_MOD_UV
@ MOD_GREASE_PENCIL_SMOOTH_MOD_THICKNESS
@ GREASE_PENCIL_INFLUENCE_INVERT_VERTEX_GROUP
@ GREASE_PENCIL_INFLUENCE_USE_MATERIAL_PASS_FILTER
@ GREASE_PENCIL_INFLUENCE_USE_LAYER_PASS_FILTER
@ GREASE_PENCIL_INFLUENCE_INVERT_LAYER_FILTER
@ GREASE_PENCIL_INFLUENCE_USE_CUSTOM_CURVE
@ GREASE_PENCIL_INFLUENCE_INVERT_MATERIAL_PASS_FILTER
@ GREASE_PENCIL_INFLUENCE_INVERT_MATERIAL_FILTER
@ GREASE_PENCIL_INFLUENCE_INVERT_LAYER_PASS_FILTER
@ MOD_GREASE_PENCIL_WEIGHT_ANGLE_SPACE_WORLD
@ MOD_GREASE_PENCIL_WEIGHT_ANGLE_SPACE_LOCAL
@ MOD_GREASE_PENCIL_HOOK_UNIFORM_SPACE
@ MOD_GREASE_PENCIL_OFFSET_UNIFORM_RANDOM_SCALE
@ MOD_GREASE_PENCIL_MIRROR_AXIS_Z
@ MOD_GREASE_PENCIL_MIRROR_AXIS_X
@ MOD_GREASE_PENCIL_MIRROR_AXIS_Y
@ MOD_GREASE_PENCIL_WEIGHT_ANGLE_MULTIPLY_DATA
@ MOD_GREASE_PENCIL_WEIGHT_ANGLE_INVERT_OUTPUT
@ MOD_GREASE_PENCIL_OPACITY_USE_WEIGHT_AS_FACTOR
@ MOD_GREASE_PENCIL_OPACITY_USE_UNIFORM_OPACITY
@ MOD_GREASE_PENCIL_ARRAY_USE_OFFSET
@ MOD_GREASE_PENCIL_ARRAY_USE_RELATIVE
@ MOD_GREASE_PENCIL_ARRAY_USE_OB_OFFSET
@ MOD_GREASE_PENCIL_ARRAY_UNIFORM_RANDOM_SCALE
@ MOD_GREASE_PENCIL_BUILD_TIMEMODE_PERCENTAGE
@ MOD_GREASE_PENCIL_BUILD_TIMEMODE_DRAWSPEED
@ MOD_GREASE_PENCIL_BUILD_TIMEMODE_FRAMES
@ MOD_GREASE_PENCIL_BUILD_TIMEALIGN_START
@ MOD_GREASE_PENCIL_BUILD_TIMEALIGN_END
@ MOD_GREASE_PENCIL_THICK_WEIGHT_FACTOR
@ MOD_GREASE_PENCIL_THICK_NORMALIZE
@ MOD_GREASE_PENCIL_SIMPLIFY_FIXED
@ MOD_GREASE_PENCIL_SIMPLIFY_MERGE
@ MOD_GREASE_PENCIL_SIMPLIFY_ADAPTIVE
@ MOD_GREASE_PENCIL_SIMPLIFY_SAMPLE
@ MOD_GREASE_PENCIL_TIME_MODE_FIX
@ MOD_GREASE_PENCIL_TIME_MODE_CHAIN
@ MOD_GREASE_PENCIL_TIME_MODE_PINGPONG
@ MOD_GREASE_PENCIL_TIME_MODE_NORMAL
@ MOD_GREASE_PENCIL_TIME_MODE_REVERSE
@ MOD_GREASE_PENCIL_SUBDIV_CATMULL
@ MOD_GREASE_PENCIL_SUBDIV_SIMPLE
@ MOD_GREASE_PENCIL_COLOR_FILL
@ MOD_GREASE_PENCIL_COLOR_STROKE
@ MOD_GREASE_PENCIL_COLOR_BOTH
@ MOD_GREASE_PENCIL_COLOR_HARDNESS
@ MOD_GREASE_PENCIL_BUILD_MODE_SEQUENTIAL
@ MOD_GREASE_PENCIL_BUILD_MODE_ADDITIVE
@ MOD_GREASE_PENCIL_BUILD_MODE_CONCURRENT
@ MOD_GREASE_PENCIL_TIME_KEEP_LOOP
@ MOD_GREASE_PENCIL_TIME_CUSTOM_RANGE
@ MOD_GREASE_PENCIL_BUILD_RESTRICT_TIME
@ MOD_GREASE_PENCIL_BUILD_USE_FADING
@ MOD_GREASE_PENCIL_DASH_USE_CYCLIC
@ MOD_GREASE_PENCIL_TINT_UNIFORM
@ MOD_GREASE_PENCIL_TINT_GRADIENT
@ MOD_GREASE_PENCIL_OUTLINE_KEEP_SHAPE
@ MOD_GREASE_PENCIL_TINT_USE_WEIGHT_AS_FACTOR
@ eModifierType_GreasePencilSmooth
@ eModifierType_GreasePencilWeightProximity
@ eModifierType_GreasePencilMirror
@ eModifierType_GreasePencilOffset
@ eModifierType_GreasePencilThickness
@ eModifierType_GreasePencilEnvelope
@ eModifierType_GreasePencilArmature
@ eModifierType_GreasePencilSubdiv
@ eModifierType_GreasePencilTint
@ eModifierType_GreasePencilNoise
@ eModifierType_GreasePencilMultiply
@ eModifierType_GreasePencilBuild
@ eModifierType_GreasePencilTime
@ eModifierType_GreasePencilTexture
@ eModifierType_GreasePencilSimplify
@ eModifierType_GreasePencilColor
@ eModifierType_GreasePencilDash
@ eModifierType_GreasePencilLineart
@ eModifierType_GreasePencilOutline
@ eModifierType_GreasePencilWeightAngle
@ eModifierType_GreasePencilOpacity
@ eModifierType_GreasePencilLength
@ eModifierType_GreasePencilShrinkwrap
@ eModifierType_GreasePencilLattice
@ eModifierType_GreasePencilHook
@ eModifierType_GreasePencilArray
@ MOD_GREASE_PENCIL_HOOK_Falloff_None
@ MOD_GREASE_PENCIL_HOOK_Falloff_Root
@ MOD_GREASE_PENCIL_HOOK_Falloff_InvSquare
@ MOD_GREASE_PENCIL_HOOK_Falloff_Const
@ MOD_GREASE_PENCIL_HOOK_Falloff_Linear
@ MOD_GREASE_PENCIL_HOOK_Falloff_Sphere
@ MOD_GREASE_PENCIL_HOOK_Falloff_Smooth
@ MOD_GREASE_PENCIL_HOOK_Falloff_Curve
@ MOD_GREASE_PENCIL_HOOK_Falloff_Sharp
@ MOD_GREASE_PENCIL_TEXTURE_STROKE_AND_FILL
@ MOD_GREASE_PENCIL_TEXTURE_FILL
@ MOD_GREASE_PENCIL_TEXTURE_STROKE
@ MOD_GREASE_PENCIL_WEIGHT_PROXIMITY_INVERT_OUTPUT
@ MOD_GREASE_PENCIL_WEIGHT_PROXIMITY_MULTIPLY_DATA
@ MOD_GREASE_PENCIL_ENVELOPE_SEGMENTS
@ MOD_GREASE_PENCIL_ENVELOPE_FILLS
@ MOD_GREASE_PENCIL_ENVELOPE_DEFORM
@ MOD_GREASE_PENCIL_BUILD_TRANSITION_VANISH
@ MOD_GREASE_PENCIL_BUILD_TRANSITION_SHRINK
@ MOD_GREASE_PENCIL_BUILD_TRANSITION_GROW
@ MOD_GREASE_PENCIL_TEXTURE_FIT_STROKE
@ MOD_GREASE_PENCIL_TEXTURE_CONSTANT_LENGTH
@ MOD_GREASE_PENCIL_OFFSET_STROKE
@ MOD_GREASE_PENCIL_OFFSET_MATERIAL
@ MOD_GREASE_PENCIL_OFFSET_LAYER
@ MOD_GREASE_PENCIL_OFFSET_RANDOM
@ MOD_GREASE_PENCIL_TIME_SEG_MODE_NORMAL
@ MOD_GREASE_PENCIL_TIME_SEG_MODE_REVERSE
@ MOD_GREASE_PENCIL_TIME_SEG_MODE_PINGPONG
@ NODE_INTERFACE_SOCKET_OUTPUT
@ NODE_INTERFACE_SOCKET_INPUT
@ GEO_NODE_ASSET_MODIFIER
#define USER_EXPERIMENTAL_TEST(userdef, member)
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
btMatrix3x3 transpose() const
Return the transpose of the matrix.
SIMD_FORCE_INLINE btVector3 & normalize()
Normalize this vector x^2 + y^2 + z^2 = 1.
void reinitialize(const int64_t new_size)
const Value * lookup_ptr(const Key &key) const
bool add_overwrite(const Key &key, const Value &value)
bool add(const Key &key, const Value &value)
Value lookup_default(const Key &key, const Value &default_value) const
void add_new(const Key &key, const Value &value)
Value & lookup_or_add(const Key &key, const Value &value)
constexpr MutableSpan slice(const int64_t start, const int64_t size) const
bool contains(const Key &key) const
constexpr StringRef substr(int64_t start, int64_t size) const
constexpr bool startswith(StringRef prefix) const
constexpr const char * data() const
void append(const T &value)
Slot & slot_add_for_id(const ID &animated_id)
void resize(int points_num, int curves_num)
GSpanAttributeWriter lookup_or_add_for_write_span(StringRef attribute_id, AttrDomain domain, eCustomDataType data_type, const AttributeInit &initializer=AttributeInitDefaultValue())
MutableSpan< float > opacities_for_write()
MutableSpan< float > radii_for_write()
bke::CurvesGeometry & strokes_for_write()
MutableSpan< ColorGeometry4f > fill_colors_for_write()
MutableSpan< ColorGeometry4f > vertex_colors_for_write()
void set_parent_bone_name(const char *new_name)
void set_view_layer_name(const char *new_name)
const GreasePencilFrame * frame_at(const int frame_number) const
std::string root_path_src
AnimDataConvertor(ConversionData &conversion_data, ID &id_dst, ID &id_src, const Array< AnimDataFCurveConvertor > fcurve_convertors={})
void fcurves_convert_finalize()
AnimDataConvertor(ConversionData &conversion_data, ID &id_src, const Array< AnimDataFCurveConvertor > fcurve_convertors={})
bool source_has_animation_to_convert() const
std::string root_path_dst
AnimDataConvertor()=delete
bool allow_idtype_mismatch
void add(ID *old_id, ID *new_id)
DEGForeachIDComponentCallback callback
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
static const char * modifier_name[LS_MODIFIER_NUM]
void MEM_freeN(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
ccl_device_inline float cross(const float2 a, const float2 b)
ccl_device_inline float3 cos(float3 v)
void action_fcurve_move(Action &action_dst, slot_handle_t action_slot_dst, Action &action_src, FCurve &fcurve)
Action & action_add(Main &bmain, StringRefNull name)
void foreach_fcurve_in_action(Action &action, FunctionRef< void(FCurve &fcurve)> callback)
decltype(::ActionSlot::handle) slot_handle_t
bool assign_tmpaction(bAction *action, OwnedAnimData owned_adt)
bool assign_action(bAction *action, ID &animated_id)
static void fcurve_convert_thickness_cb(FCurve &fcurve)
static void legacy_object_modifier_subdiv(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
void(FCurve &fcurve) FCurveConvertCB
static void legacy_object_modifier_mirror(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
constexpr const char * OFFSET_RADIUS_NODETREE_NAME
static bNodeTree * offset_radius_node_tree_add(ConversionData &conversion_data, Library *library)
static void legacy_object_modifier_time(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_object_modifier_color(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static ModifierData & legacy_object_modifier_common(ConversionData &conversion_data, Object &object, const ModifierType type, GpencilModifierData &legacy_md)
static void legacy_object_modifier_offset(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_object_modifier_opacity(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_object_modifier_lineart(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_object_modifier_armature(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_object_modifier_shrinkwrap(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void thickness_factor_to_modifier(ConversionData &conversion_data, bGPdata &src_object_data, Object &dst_object)
static void legacy_object_modifier_envelope(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_object_modifier_outline(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_object_modifier_thickness(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_gpencil_to_grease_pencil(ConversionData &conversion_data, GreasePencil &grease_pencil, bGPdata &gpd)
static void legacy_object_modifier_weight_angle(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_object_modifier_tint(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
void lineart_unwrap_v3(LineartGpencilModifierData *lmd_legacy, const GreasePencilLineartModifierData *lmd)
static void legacy_object_modifier_noise(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
void legacy_main(Main &bmain, BlendfileLinkAppendContext *lapp_context, BlendFileReadReport &reports)
static blender::float4x2 get_legacy_texture_matrix(bGPDstroke *gps)
static void legacy_object_thickness_modifier_thickness_anim(ConversionData &conversion_data, Object &object)
static void layer_adjustments_to_modifiers(ConversionData &conversion_data, bGPdata &src_object_data, Object &dst_object)
static void legacy_object_modifier_texture(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_object_modifiers(ConversionData &conversion_data, Object &object)
static Drawing legacy_gpencil_frame_to_grease_pencil_drawing(const bGPDframe &gpf, const ListBase &vertex_group_names)
static float3x2 get_legacy_stroke_to_texture_matrix(const float2 uv_translation, const float uv_rotation, const float2 uv_scale)
static void legacy_object_modifier_dash(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_object_modifier_build(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_object_modifier_array(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_object_modifier_multiply(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_object_modifier_smooth(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_gpencil_sanitize_annotations(Main &bmain)
static blender::float4x2 get_legacy_layer_to_stroke_matrix(bGPDstroke *gps)
void lineart_wrap_v3(const LineartGpencilModifierData *lmd_legacy, GreasePencilLineartModifierData *lmd)
static void legacy_object_modifier_lattice(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_object_modifier_weight_proximity(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void find_used_vertex_groups(const bGPDframe &gpf, const ListBase &all_names, ListBase &r_vertex_group_names, Array< int > &r_indices)
static void legacy_object_modifier_influence(GreasePencilModifierInfluenceData &influence, StringRef layername, const int layer_pass, const bool invert_layer, const bool invert_layer_pass, Material **material, const int material_pass, const bool invert_material, const bool invert_material_pass, StringRef vertex_group_name, const bool invert_vertex_group, CurveMapping **custom_curve, const bool use_custom_curve)
static void legacy_object_modifier_hook(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_gpencil_object(ConversionData &conversion_data, Object &object)
static void legacy_object_modifier_length(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
static void legacy_object_modifier_simplify(ConversionData &conversion_data, Object &object, GpencilModifierData &legacy_md)
constexpr float LEGACY_RADIUS_CONVERSION_FACTOR
T safe_divide(const T &a, const T &b)
T average(const VecBase< T, Size > &a)
MatT from_scale(const VecBase< typename MatT::base_type, ScaleDim > &scale)
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
MatBase< float, 2, 2 > float2x2
MatBase< float, 2, 4 > float2x4
VecBase< float, 4 > float4
VecBase< float, 2 > float2
MatBase< float, 4, 3 > float4x3
ColorSceneLinear4f< eAlpha::Premultiplied > ColorGeometry4f
VecBase< float, 3 > float3
GreasePencilLayerTreeNode base
unsigned char shadow_selection
unsigned char material_mask_bits
struct Object * source_object
float chaining_image_threshold
struct LineartCache * cache
char level_start_override
char source_vertex_group[64]
struct Material * target_material
float angle_splitting_threshold
struct LineartData * la_data_ptr
unsigned char mask_switches
struct Collection * source_collection
struct Object * source_camera
char shadow_use_silhouette_override
unsigned char intersection_mask
float stroke_depth_offset
short edge_types_override
char shadow_selection_override
unsigned char silhouette_selection
struct Object * light_contour_object
float chain_smooth_tolerance
struct Material * material
char vertex_group_name[64]
struct CurveMapping * custom_curve
GreasePencilModifierInfluenceData influence
int vertex_group_active_index
ListBase vertex_group_names
GreasePencilOnionSkinningSettings onion_skinning_settings
struct Collection * source_collection
char shadow_use_silhouette_override
struct Object * light_contour_object
float angle_splitting_threshold
unsigned char mask_switches
short edge_types_override
char shadow_selection_override
struct LineartCache * cache
struct Object * source_camera
char source_vertex_group[64]
unsigned char shadow_selection
float chain_smooth_tolerance
float chaining_image_threshold
struct LineartData * la_data_ptr
unsigned char intersection_mask
char level_start_override
struct Material * target_material
unsigned char material_mask_bits
unsigned char silhouette_selection
struct Object * source_object
float stroke_depth_offset
struct ModifierData * next
ListBase vertex_group_names
int vertex_group_active_index
static MatBase identity()
MutableVArraySpan< T > span
blender::FunctionRef< FCurveConvertCB > convert_cb
const char * relative_rna_path_src
AnimDataFCurveConvertor(const char *relative_rna_path_src, const char *relative_rna_path_dst, blender::FunctionRef< FCurveConvertCB > convert_cb={nullptr})
const char * relative_rna_path_dst
Map< Library *, bNodeTree * > offset_radius_ntree_by_library
Map< bGPdata *, GreasePencil * > legacy_to_greasepencil_data
ConversionData(Main &bmain, BlendfileLinkAppendContext *lapp_context)
BlendfileLinkAppendContext * lapp_context