diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/object/object_transform.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c index 05f98026e18..e29d49d00cb 100644 --- a/source/blender/editors/object/object_transform.c +++ b/source/blender/editors/object/object_transform.c @@ -35,6 +35,7 @@ #include "DNA_armature_types.h" #include "DNA_mesh_types.h" #include "DNA_meta_types.h" +#include "DNA_lamp_types.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" #include "DNA_group_types.h" @@ -472,6 +473,18 @@ static int apply_objects_internal( changed = false; } } + + if (ob->type == OB_LAMP) { + Lamp *la = ob->data; + if (la->type == LA_AREA) { + if (apply_rot || apply_loc) { + BKE_reportf(reports, RPT_ERROR, + "Area Lamps can only have scale applied: \"%s\"", + ob->id.name + 2); + changed = false; + } + } + } } CTX_DATA_END; @@ -601,6 +614,22 @@ static int apply_objects_internal( ob->empty_drawsize *= max_scale; } } + else if (ob->type == OB_LAMP) { + Lamp *la = ob->data; + if (la->type != LA_AREA) { + continue; + } + + bool keeps_aspect_ratio = compare_ff_relative(rsmat[0][0], rsmat[1][1], FLT_EPSILON, 64); + if ((la->area_shape == LA_AREA_SQUARE) && !keeps_aspect_ratio) { + la->area_shape = LA_AREA_RECT; + la->area_sizey = la->area_size; + } + + la->area_size *= rsmat[0][0]; + la->area_sizey *= rsmat[1][1]; + la->area_sizez *= rsmat[2][2]; + } else { continue; } |