From fe5b216030d7cf376f007ba797d72d04c43d65bd Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 4 Feb 2010 19:24:20 +0000 Subject: [PATCH] access spot size in radians from python. --- release/scripts/io/engine_render_pov.py | 4 ++-- release/scripts/io/export_fbx.py | 2 +- release/scripts/io/export_x3d.py | 2 +- source/blender/makesrna/intern/rna_lamp.c | 23 ++++++++++++++++++++--- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/release/scripts/io/engine_render_pov.py b/release/scripts/io/engine_render_pov.py index 7abb0c19cd7..8ce417a4fab 100644 --- a/release/scripts/io/engine_render_pov.py +++ b/release/scripts/io/engine_render_pov.py @@ -169,8 +169,8 @@ def write_pov(filename, scene=None, info_callback=None): file.write('\tspotlight\n') # Falloff is the main radius from the centre line - file.write('\tfalloff %.2f\n' % (lamp.spot_size / 2.0)) # 1 TO 179 FOR BOTH - file.write('\tradius %.6f\n' % ((lamp.spot_size / 2.0) * (1.0 - lamp.spot_blend))) + file.write('\tfalloff %.2f\n' % (degrees(lamp.spot_size) / 2.0)) # 1 TO 179 FOR BOTH + file.write('\tradius %.6f\n' % ((degrees(lamp.spot_size) / 2.0) * (1.0 - lamp.spot_blend))) # Blender does not have a tightness equivilent, 0 is most like blender default. file.write('\ttightness 0\n') # 0:10f diff --git a/release/scripts/io/export_fbx.py b/release/scripts/io/export_fbx.py index f8cc4bce4ac..97015833331 100644 --- a/release/scripts/io/export_fbx.py +++ b/release/scripts/io/export_fbx.py @@ -1142,7 +1142,7 @@ def write(filename, batch_objects = None, \ file.write('\n\t\t\tProperty: "Color", "Color", "A+",1,1,1') file.write('\n\t\t\tProperty: "Intensity", "Intensity", "A+",%.2f' % (min(light.energy*100, 200))) # clamp below 200 if light.type == 'SPOT': - file.write('\n\t\t\tProperty: "Cone angle", "Cone angle", "A+",%.2f' % (light.spot_size * scale)) + file.write('\n\t\t\tProperty: "Cone angle", "Cone angle", "A+",%.2f' % math.degrees(light.spot_size)) # file.write('\n\t\t\tProperty: "Cone angle", "Cone angle", "A+",%.2f' % (light.spotSize * scale)) file.write('\n\t\t\tProperty: "Fog", "Fog", "A+",50') file.write('\n\t\t\tProperty: "Color", "Color", "A",%.2f,%.2f,%.2f' % tuple(light.color)) diff --git a/release/scripts/io/export_x3d.py b/release/scripts/io/export_x3d.py index b95ed4bedb2..0f90593e756 100644 --- a/release/scripts/io/export_x3d.py +++ b/release/scripts/io/export_x3d.py @@ -291,7 +291,7 @@ class x3d_class: # compute cutoff and beamwidth intensity=min(lamp.energy/1.75,1.0) - beamWidth=((lamp.spot_size*math.pi)/180.0)*.37; + beamWidth=lamp.spot_size * 0.37; # beamWidth=((lamp.spotSize*math.pi)/180.0)*.37; cutOffAngle=beamWidth*1.3 diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c index 56913d6275c..e3780b1b66b 100644 --- a/source/blender/makesrna/intern/rna_lamp.c +++ b/source/blender/makesrna/intern/rna_lamp.c @@ -33,6 +33,8 @@ #include "DNA_material_types.h" #include "DNA_texture_types.h" +#include "BLI_math_base.h" + #ifdef RNA_RUNTIME #include "MEM_guardedalloc.h" @@ -124,6 +126,20 @@ static void rna_Lamp_sky_update(Main *bmain, Scene *scene, PointerRNA *ptr) WM_main_add_notifier(NC_LAMP|ND_SKY, la); } +/* only for rad/deg conversion! can remove later */ +static float rna_Lamp_spot_size_get(PointerRNA *ptr) +{ + Lamp *la= ptr->id.data; + return la->spotsize * (M_PI / 180.0); +} + +static void rna_Lamp_spot_size_set(PointerRNA *ptr, float value) +{ + Lamp *la= ptr->id.data; + la->spotsize= value * (180.0 / M_PI); +} + + #else static void rna_def_lamp_mtex(BlenderRNA *brna) @@ -640,10 +656,11 @@ static void rna_def_spot_lamp(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Spot Blend", "The softness of the spotlight edge."); RNA_def_property_update(prop, 0, "rna_Lamp_draw_update"); - prop= RNA_def_property(srna, "spot_size", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "spotsize"); - RNA_def_property_range(prop, 1.0f ,180.0f); + prop= RNA_def_property(srna, "spot_size", PROP_FLOAT, PROP_ANGLE); + // RNA_def_property_float_sdna(prop, NULL, "spotsize"); + RNA_def_property_range(prop, M_PI/180.0f, M_PI); RNA_def_property_ui_text(prop, "Spot Size", "Angle of the spotlight beam in degrees."); + RNA_def_property_float_funcs(prop, "rna_Lamp_spot_size_get", "rna_Lamp_spot_size_set", NULL); /* only for deg/rad conversion */ RNA_def_property_update(prop, 0, "rna_Lamp_draw_update"); prop= RNA_def_property(srna, "show_cone", PROP_BOOLEAN, PROP_NONE);