From de3686ac25f5a8c19837ac3f79a5ff347dde68af Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 28 May 2013 23:07:16 +0000 Subject: fix [#34851] "UnitSettings.scale_length" not beeing calculated the same way for all objects --- release/scripts/modules/bpy_extras/object_utils.py | 18 ++++++++++++++++++ release/scripts/startup/bl_operators/add_mesh_torus.py | 17 ++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) (limited to 'release') diff --git a/release/scripts/modules/bpy_extras/object_utils.py b/release/scripts/modules/bpy_extras/object_utils.py index 838d22c1262..9381f49d408 100644 --- a/release/scripts/modules/bpy_extras/object_utils.py +++ b/release/scripts/modules/bpy_extras/object_utils.py @@ -22,6 +22,9 @@ __all__ = ( "add_object_align_init", "object_data_add", "AddObjectHelper", + "object_add_grid_scale", + "object_add_grid_scale_apply_operator", + "object_image_guess", ) @@ -210,6 +213,21 @@ def object_add_grid_scale(context): return 1.0 +def object_add_grid_scale_apply_operator(operator, context): + """ + Scale an operators distance values by the grid size. + """ + grid_scale = object_add_grid_scale(context) + + properties = operator.properties + properties_def = properties.bl_rna.properties + for prop_id in properties_def.keys(): + if not properties.is_property_set(prop_id): + prop_def = properties_def[prop_id] + if prop_def.unit == 'LENGTH' and prop_def.subtype == 'DISTANCE': + setattr(operator, prop_id, getattr(operator, prop_id) * grid_scale) + + def object_image_guess(obj, bm=None): """ Return a single image used by the object, diff --git a/release/scripts/startup/bl_operators/add_mesh_torus.py b/release/scripts/startup/bl_operators/add_mesh_torus.py index 948cb39f5b1..6b2f8be49d1 100644 --- a/release/scripts/startup/bl_operators/add_mesh_torus.py +++ b/release/scripts/startup/bl_operators/add_mesh_torus.py @@ -93,12 +93,16 @@ class AddTorus(Operator, object_utils.AddObjectHelper): "center of the cross sections"), min=0.01, max=100.0, default=1.0, + subtype='DISTANCE', + unit='LENGTH', ) minor_radius = FloatProperty( name="Minor Radius", description="Radius of the torus' cross section", min=0.01, max=100.0, default=0.25, + subtype='DISTANCE', + unit='LENGTH', ) major_segments = IntProperty( name="Major Segments", @@ -122,24 +126,31 @@ class AddTorus(Operator, object_utils.AddObjectHelper): description="Total Exterior Radius of the torus", min=0.01, max=100.0, default=1.0, + subtype='DISTANCE', + unit='LENGTH', ) abso_minor_rad = FloatProperty( name="Inside Radius", description="Total Interior Radius of the torus", min=0.01, max=100.0, default=0.5, + subtype='DISTANCE', + unit='LENGTH', ) + def invoke(self, context, event): + object_utils.object_add_grid_scale_apply_operator(self, context) + return self.execute(context) + def execute(self, context): - grid_scale = object_utils.object_add_grid_scale(context) if self.use_abso is True: extra_helper = (self.abso_major_rad - self.abso_minor_rad) * 0.5 self.major_radius = self.abso_minor_rad + extra_helper self.minor_radius = extra_helper - verts_loc, faces = add_torus(self.major_radius * grid_scale, - self.minor_radius * grid_scale, + verts_loc, faces = add_torus(self.major_radius, + self.minor_radius, self.major_segments, self.minor_segments) -- cgit v1.2.3