Skip to content
Snippets Groups Projects
space_view3d_align_tools.py 9.65 KiB
Newer Older
  • Learn to ignore specific revisions
  • # AlingTools.py (c) 2009, 2010 Gabriel Beaudin (gabhead)
    #
    # ***** BEGIN GPL LICENSE BLOCK *****
    #
    #
    # This program is free software; you can redistribute it and/or
    # modify it under the terms of the GNU General Public License
    # as published by the Free Software Foundation; either version 2
    # of the License, or (at your option) any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this program; if not, write to the Free Software Foundation,
    # Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    #
    # ***** END GPL LICENCE BLOCK *****
    
    
    """Align Selected Objects"""
    
    
    bl_addon_info = {
        'name': '3D View: Align Tools',
        'author': 'Gabriel Beaudin (gabhead)',
        'version': '0.1',
        'blender': (2, 5, 3),
        'location': 'Tool Shelf',
        'description': 'Align selected objects to the active object',
    
        'warning': '', # used for warning icon and text in addons panel
        'wiki_url': 'http://wiki.blender.org/index.php/Extensions:2.5/Py/' \
    
            'Scripts/3D interaction/Align_Tools',
        'tracker_url': 'https://projects.blender.org/tracker/index.php?'\
            'func=detail&aid==22389&group_id=153&atid=468',
        'category': '3D View'}
    
    import bpy
    
    ##interface
    ######################
    class View3DPanel(bpy.types.Panel):
        bl_space_type = 'VIEW_3D'
        bl_region_type = 'TOOLS'
    
    class AlignUi(View3DPanel):
        bl_label = "Align Tools"
        bl_context = "objectmode"
        
    
        def draw(self, context):
            layout = self.layout
            obj = context.object
    
            if obj != None:
                row = layout.row()
    
                row.label(text="Active object is: ", icon='OBJECT_DATA')
                row = layout.row()
                row.label(obj.name, icon='EDITMODE_HLT')
    
            col.label(text="Align Loc + Rot:", icon='MANIPUL')
    
    
            
            col = layout.column(align=False)
            col.operator("object.AlignObjects",text="XYZ")
            
            col = layout.column()
            col.label(text="Align Location:", icon='MAN_TRANS')
    
            col = layout.column_flow(columns=5,align=True)
            col.operator("object.AlignObjectsLocationX",text="X")
            col.operator("object.AlignObjectsLocationY",text="Y")
            col.operator("object.AlignObjectsLocationZ",text="Z")
            col.operator("object.AlignObjectsLocationAll",text="All")
    
            col = layout.column()
            col.label(text="Align Rotation:", icon='MAN_ROT')
    
            col = layout.column_flow(columns=5,align=True)
            col.operator("object.AlignObjectsRotationX",text="X")
            col.operator("object.AlignObjectsRotationY",text="Y")
            col.operator("object.AlignObjectsRotationZ",text="Z")
            col.operator("object.AlignObjectsRotationAll",text="All")
            
            col = layout.column()
            col.label(text="Align Scale:", icon='MAN_SCALE')
    
            col = layout.column_flow(columns=5,align=True)
            col.operator("object.AlignObjectsScaleX",text="X")
            col.operator("object.AlignObjectsScaleY",text="Y")
            col.operator("object.AlignObjectsScaleZ",text="Z")
            col.operator("object.AlignObjectsScaleAll",text="All")
    
    
            
        
    ##Ops
    ##################
    
    ## Def
    
    ##Align all
    def main(context):
        for i in bpy.context.selected_objects:
            i.location = bpy.context.active_object.location
            i.rotation_euler = bpy.context.active_object.rotation_euler
    
    ## Align Location
    
    def LocAll(context):
        for i in bpy.context.selected_objects:
            i.location = bpy.context.active_object.location
    
    def LocX(context):
        for i in bpy.context.selected_objects:
            i.location.x = bpy.context.active_object.location.x
    
    def LocY(context):
        for i in bpy.context.selected_objects:
            i.location.y = bpy.context.active_object.location.y
    
    def LocZ(context):
        for i in bpy.context.selected_objects:
            i.location.z = bpy.context.active_object.location.z
    
    ## Aling Rotation
    def RotAll(context):
        for i in bpy.context.selected_objects:
            i.rotation_euler = bpy.context.active_object.rotation_euler
    
    def RotX(context):
        for i in bpy.context.selected_objects:
            i.rotation_euler.x = bpy.context.active_object.rotation_euler.x
    
    def RotY(context):
        for i in bpy.context.selected_objects:
            i.rotation_euler.y = bpy.context.active_object.rotation_euler.y
    
    def RotZ(context):
        for i in bpy.context.selected_objects:
            i.rotation_euler.z = bpy.context.active_object.rotation_euler.z
    ## Aling Scale
    def ScaleAll(context):
        for i in bpy.context.selected_objects:
    
            i.scale = bpy.context.active_object.scale
    
    
    def ScaleX(context):
        for i in bpy.context.selected_objects:
    
            i.scale.x = bpy.context.active_object.scale.x
    
    
    def ScaleY(context):
        for i in bpy.context.selected_objects:
    
            i.scale.y = bpy.context.active_object.scale.y
    
    
    def ScaleZ(context):
        for i in bpy.context.selected_objects:
    
            i.scale.z = bpy.context.active_object.scale.z
    
    
    ## Classes
    
    ## Align All Rotation And Location
    class AlignOperator(bpy.types.Operator):
        ''''''
        bl_idname = "object.AlignObjects"
        bl_label = "Align Selected To Active"
    
        def poll(self, context):
            return context.active_object != None
    
        def execute(self, context):
            main(context)
            return {'FINISHED'}
    
    #######################Align Location########################
    ## Align LocationAll
    class AlignLocationOperator(bpy.types.Operator):
        ''''''
        bl_idname = "object.AlignObjectsLocationAll"
        bl_label = "Align Selected Location To Active"
    
        def poll(self, context):
            return context.active_object != None
    
        def execute(self, context):
            LocAll(context)
            return {'FINISHED'}
    ## Align LocationX
    class AlignLocationXOperator(bpy.types.Operator):
        ''''''
        bl_idname = "object.AlignObjectsLocationX"
        bl_label = "Align Selected Location X To Active"
    
        def poll(self, context):
            return context.active_object != None
    
        def execute(self, context):
            LocX(context)
            return {'FINISHED'}
    ## Align LocationY
    class AlignLocationYOperator(bpy.types.Operator):
        ''''''
        bl_idname = "object.AlignObjectsLocationY"
        bl_label = "Align Selected Location Y To Active"
    
        def poll(self, context):
            return context.active_object != None
    
        def execute(self, context):
            LocY(context)
            return {'FINISHED'}
    ## Align LocationZ
    class AlignLocationZOperator(bpy.types.Operator):
        ''''''
        bl_idname = "object.AlignObjectsLocationZ"
        bl_label = "Align Selected Location Z To Active"
    
        def poll(self, context):
            return context.active_object != None
    
        def execute(self, context):
            LocZ(context)
            return {'FINISHED'}
    
    #######################Align Rotation########################
    ## Align RotationAll
    class AlignRotationOperator(bpy.types.Operator):
        ''''''
        bl_idname = "object.AlignObjectsRotationAll"
        bl_label = "Align Selected Rotation To Active"
    
        def poll(self, context):
            return context.active_object != None
    
        def execute(self, context):
            RotAll(context)
            return {'FINISHED'}
    ## Align RotationX
    class AlignRotationXOperator(bpy.types.Operator):
        ''''''
        bl_idname = "object.AlignObjectsRotationX"
        bl_label = "Align Selected Rotation X To Active"
    
        def poll(self, context):
            return context.active_object != None
    
        def execute(self, context):
            RotX(context)
            return {'FINISHED'}
    ## Align RotationY
    class AlignRotationYOperator(bpy.types.Operator):
        ''''''
        bl_idname = "object.AlignObjectsRotationY"
        bl_label = "Align Selected Rotation Y To Active"
    
        def poll(self, context):
            return context.active_object != None
    
        def execute(self, context):
            RotY(context)
            return {'FINISHED'}
    ## Align RotationZ
    class AlignRotationZOperator(bpy.types.Operator):
        ''''''
        bl_idname = "object.AlignObjectsRotationZ"
        bl_label = "Align Selected Rotation Z To Active"
    
        def poll(self, context):
            return context.active_object != None
    
        def execute(self, context):
            RotZ(context)
            return {'FINISHED'}
    #######################Align Scale########################
    ## Scale All
    class AlignScaleOperator(bpy.types.Operator):
        ''''''
        bl_idname = "object.AlignObjectsScaleAll"
        bl_label = "Align Selected Scale To Active"
    
        def poll(self, context):
            return context.active_object != None
    
        def execute(self, context):
            ScaleAll(context)
            return {'FINISHED'}
    ## Align ScaleX
    class AlignScaleXOperator(bpy.types.Operator):
        ''''''
        bl_idname = "object.AlignObjectsScaleX"
        bl_label = "Align Selected Scale X To Active"
    
        def poll(self, context):
            return context.active_object != None
    
        def execute(self, context):
            ScaleX(context)
            return {'FINISHED'}
    ## Align ScaleY
    class AlignScaleYOperator(bpy.types.Operator):
        ''''''
        bl_idname = "object.AlignObjectsScaleY"
        bl_label = "Align Selected Scale Y To Active"
    
        def poll(self, context):
            return context.active_object != None
    
        def execute(self, context):
            ScaleY(context)
            return {'FINISHED'}
    ## Align ScaleZ
    class AlignScaleZOperator(bpy.types.Operator):
        ''''''
        bl_idname = "object.AlignObjectsScaleZ"
        bl_label = "Align Selected Scale Z To Active"
    
        def poll(self, context):
            return context.active_object != None
    
        def execute(self, context):
            ScaleZ(context)
            return {'FINISHED'}
    
    ## registring
    def register():