diff --git a/space_view3d_property_chart.py b/space_view3d_property_chart.py new file mode 100644 index 0000000000000000000000000000000000000000..cad8a1ec6b3c36f6fdcdc702cb1d7ce3c0f7368e --- /dev/null +++ b/space_view3d_property_chart.py @@ -0,0 +1,103 @@ +# +# ***** 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 ***** + +'''List properties of selected objects''' + +bl_addon_info = { + "name": "3D View: Object Property Chart", + "author": "Campbell Barton (ideasman42)", + "version": "0.1", + "blender": (2, 5, 3), + "location": "Tool Shelf", + "description": "Edit arbitrary selected properties for objects of the same type"} + +import bpy + + +class View3DEditProps(bpy.types.Panel): + bl_space_type = 'VIEW_3D' + bl_region_type = 'UI' + + bl_label = "Property Chart" + bl_context = "objectmode" + + _PROP_STORAGE_ID = "view3d_edit_props" + + def draw(self, context): + layout = self.layout + obj = context.object + + if obj is None: + return + + obj_type_sel = [obj_sel for obj_sel in context.selected_objects if obj.type == obj_sel.type] + + if not obj_type_sel: + return + + # box = layout.separator() + + col = layout.column() + + id_storage = context.scene + + strings = id_storage.get(self._PROP_STORAGE_ID) + + if strings is None: + strings = id_storage[self._PROP_STORAGE_ID] = "" + + if strings: + strings = strings.split() + + row = col.row(align=True) + for attr_string in strings: + row.label(text=attr_string.rsplit(".", 1)[-1]) + + for obj in obj_type_sel: + row = col.row(align=True) + for attr_string in strings: + + attrs = attr_string.split(".") + val_new = obj + for i, attr in enumerate(attrs): + val_old = val_new + val_new = getattr(val_old, attr, Ellipsis) + + if val_new == Ellipsis: + break + + if val_new is not Ellipsis: + row.prop(val_old, attrs[-1], text="") + else: + row.label(text="") + + col.label(text="Display Properties") + col.prop(id_storage, '["%s"]' % self._PROP_STORAGE_ID, text="") + + +def register(): + bpy.types.register(View3DEditProps) + + +def unregister(): + bpy.types.unregister(View3DEditProps) + +if __name__ == "__main__": + register()