# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # ***** END GPL LICENCE BLOCK ***** bl_addon_info = { "name": "Align Tools", "author": "Gabriel Beaudin (gabhead)", "version": (0,1), "blender": (2, 5, 3), "api": 32411, "location": "Tool Shelf", "description": "Align selected objects to the active object", "warning": "", "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"} """Align Selected Objects""" import bpy class AlignUi(bpy.types.Panel): bl_space_type = 'VIEW_3D' bl_region_type = 'TOOLS' 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') box = layout.separator() col = layout.column() 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") ##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" @classmethod def poll(cls, 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" @classmethod def poll(cls, 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" @classmethod def poll(cls, 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" @classmethod def poll(cls, 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" @classmethod def poll(cls, 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" @classmethod def poll(cls, 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" @classmethod def poll(cls, 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" @classmethod def poll(cls, 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" @classmethod def poll(cls, 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" @classmethod def poll(cls, 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" @classmethod def poll(cls, 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" @classmethod def poll(cls, 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" @classmethod def poll(cls, context): return context.active_object != None def execute(self, context): ScaleZ(context) return {'FINISHED'} ## registring def register(): pass def unregister(): pass if __name__ == "__main__": register()