diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-03-14 12:55:57 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-03-14 12:55:57 +0400 |
commit | b745621038a0e66d1c9d1fd26e99b46a1538b054 (patch) | |
tree | 6f162b9c74c793603c853b14a8ee36ef9f4671ef /release | |
parent | bbb76ccb25f104764c70e0229ed503a4ccba9b4e (diff) |
Changes to python-defined add object operators:
- Reset rotation value when toggling Align to View property
which correctly re-alignes object on continuous property
toggling and fixes issue
#30510: [2.62] Add Mesh - Torus - "Align to View" cannot be switched back when toggling off
- Moves all generic object-add properties into a helper function
which might be easily re-used.
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/modules/bpy_extras/object_utils.py | 26 | ||||
-rw-r--r-- | release/scripts/startup/bl_operators/add_mesh_torus.py | 32 |
2 files changed, 34 insertions, 24 deletions
diff --git a/release/scripts/modules/bpy_extras/object_utils.py b/release/scripts/modules/bpy_extras/object_utils.py index 9175d1f9792..16e568dab99 100644 --- a/release/scripts/modules/bpy_extras/object_utils.py +++ b/release/scripts/modules/bpy_extras/object_utils.py @@ -21,12 +21,15 @@ __all__ = ( "add_object_align_init", "object_data_add", + "object_generic_transform_prop", ) import bpy import mathutils +from bpy.props import (BoolProperty, FloatVectorProperty) + def add_object_align_init(context, operator): """ @@ -120,7 +123,8 @@ def object_data_add(context, obdata, operator=None, use_active_layer=True): base.layers_from_view(context.space_data) base.layers[scene.active_layer] = True else: - base.layers = [True if i == scene.active_layer else False for i in range(len(scene.layers))] + base.layers = [True if i == scene.active_layer + else False for i in range(len(scene.layers))] if v3d: base.layers_from_view(context.space_data) @@ -163,3 +167,23 @@ def object_data_add(context, obdata, operator=None, use_active_layer=True): bpy.ops.object.mode_set(mode='EDIT') return base + + +class AddObjectHelper: + def view_align_update_callback(self, context): + if not self.view_align: + self.rotation.zero() + + view_align = BoolProperty( + name="Align to View", + default=False, + update=view_align_update_callback, + ) + location = FloatVectorProperty( + name="Location", + subtype='TRANSLATION', + ) + rotation = FloatVectorProperty( + name="Rotation", + subtype='EULER', + ) diff --git a/release/scripts/startup/bl_operators/add_mesh_torus.py b/release/scripts/startup/bl_operators/add_mesh_torus.py index 5b28cdf44ae..23e2ddfe209 100644 --- a/release/scripts/startup/bl_operators/add_mesh_torus.py +++ b/release/scripts/startup/bl_operators/add_mesh_torus.py @@ -21,6 +21,14 @@ import bpy from bpy.types import Operator import mathutils +from bpy.props import (FloatProperty, + IntProperty, + BoolProperty, + FloatVectorProperty, + ) + +from bpy_extras import object_utils + def add_torus(major_rad, minor_rad, major_seg, minor_seg): from math import cos, sin, pi @@ -75,14 +83,8 @@ def add_torus(major_rad, minor_rad, major_seg, minor_seg): return verts, faces -from bpy.props import (FloatProperty, - IntProperty, - BoolProperty, - FloatVectorProperty, - ) - -class AddTorus(Operator): +class AddTorus(Operator, object_utils.AddObjectHelper): '''Add a torus mesh''' bl_idname = "mesh.primitive_torus_add" bl_label = "Add Torus" @@ -131,22 +133,7 @@ class AddTorus(Operator): default=0.5, ) - # generic transform props - view_align = BoolProperty( - name="Align to View", - default=False, - ) - location = FloatVectorProperty( - name="Location", - subtype='TRANSLATION', - ) - rotation = FloatVectorProperty( - name="Rotation", - subtype='EULER', - ) - def execute(self, context): - if self.use_abso == True: extra_helper = (self.abso_major_rad - self.abso_minor_rad) * 0.5 self.major_radius = self.abso_minor_rad + extra_helper @@ -166,7 +153,6 @@ class AddTorus(Operator): mesh.faces.foreach_set("vertices_raw", faces) mesh.update() - from bpy_extras import object_utils object_utils.object_data_add(context, mesh, operator=self) return {'FINISHED'} |