diff options
Diffstat (limited to 'release/scripts/object_find.py')
-rw-r--r-- | release/scripts/object_find.py | 222 |
1 files changed, 0 insertions, 222 deletions
diff --git a/release/scripts/object_find.py b/release/scripts/object_find.py deleted file mode 100644 index f12af07e3e4..00000000000 --- a/release/scripts/object_find.py +++ /dev/null @@ -1,222 +0,0 @@ -#!BPY -""" -Name: 'Find by Data Use' -Blender: 242 -Group: 'Object' -Tooltip: 'Find an object by the data it uses' -""" -__author__= "Campbell Barton" -__url__= ["blender.org", "blenderartists.org"] -__version__= "1.0" - -__bpydoc__= """ -""" - -# -------------------------------------------------------------------------- -# Find by Data Use v0.1 by Campbell Barton (AKA Ideasman42) -# -------------------------------------------------------------------------- -# ***** 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 ***** -# -------------------------------------------------------------------------- - -from Blender import Image, sys, Draw, Window, Scene, Group -import bpy -import BPyMessages - - -def get_object_images(ob): - # Could optimize this - if ob.type != 'Mesh': - return [] - - me = ob.getData(mesh=1) - - if not me.faceUV: - return [] - - unique_images = {} - - orig_uvlayer = me.activeUVLayer - - for uvlayer in me.getUVLayerNames(): - me.activeUVLayer = uvlayer - for f in me.faces: - i = f.image - if i: unique_images[i.name] = i - - me.activeUVLayer = orig_uvlayer - - - # Now get material images - for mat in me.materials: - if mat: - for mtex in mat.getTextures(): - if mtex: - tex = mtex.tex - i = tex.getImage() - if i: unique_images[i.name] = i - - return unique_images.values() - - - - # Todo, support other object types, materials - return [] - - - -def main(): - - NAME_DATA= Draw.Create('') - NAME_INGROUP= Draw.Create('') - NAME_DUPGROUP= Draw.Create('') - NAME_IMAGE= Draw.Create('') - NAME_MATERIAL= Draw.Create('') - NAME_TEXTURE= Draw.Create('') - - - PREF_CASESENS= Draw.Create(False) - PREF_PART_MATCH= Draw.Create(True) - - - # Get USER Options - pup_block= [\ - ('ObData:', NAME_DATA, 0, 32, 'Match with the objects data name'),\ - ('InGroup:', NAME_INGROUP, 0, 32, 'Match with the group name to find one of its objects'),\ - ('DupGroup:', NAME_DUPGROUP, 0, 32, 'Match with the group name to find an object that instances this group'),\ - ('Image:', NAME_IMAGE, 0, 32, 'Match with the image name to find an object that uses this image'),\ - ('Material:', NAME_MATERIAL, 0, 32, 'Match with the material name to find an object that uses this material'),\ - ('Texture:', NAME_TEXTURE, 0, 32, 'Match with the texture name to find an object that uses this texture'),\ - ('Case Sensitive', PREF_CASESENS, 'Do a case sensitive comparison?'),\ - ('Partial Match', PREF_PART_MATCH, 'Match when only a part of the text is in the data name'),\ - ] - - if not Draw.PupBlock('Find object using dataname...', pup_block): - return - - NAME_DATA = NAME_DATA.val - NAME_INGROUP = NAME_INGROUP.val - NAME_DUPGROUP = NAME_DUPGROUP.val - NAME_IMAGE = NAME_IMAGE.val - NAME_MATERIAL = NAME_MATERIAL.val - NAME_TEXTURE = NAME_TEXTURE.val - - PREF_CASESENS = PREF_CASESENS.val - PREF_PART_MATCH = PREF_PART_MATCH.val - - if not PREF_CASESENS: - NAME_DATA = NAME_DATA.lower() - NAME_INGROUP = NAME_INGROUP.lower() - NAME_DUPGROUP = NAME_DUPGROUP.lower() - NAME_IMAGE = NAME_IMAGE.lower() - NAME_MATERIAL = NAME_MATERIAL.lower() - NAME_TEXTURE = NAME_TEXTURE.lower() - - def activate(ob, scn): - bpy.data.scenes.active = scn - scn.objects.selected = [] - scn.Layers = ob.Layers & (1<<20)-1 - ob.sel = 1 - - def name_cmp(name_search, name_found): - if name_found == None: return False - if not PREF_CASESENS: name_found = name_found.lower() - if PREF_PART_MATCH: - if name_search in name_found: - # print name_found, name_search - return True - else: - if name_found == name_search: - # print name_found, name_search - return True - - return False - - - if NAME_INGROUP: - # Best we speed this up. - bpy.data.objects.tag = False - - ok = False - for group in bpy.data.groups: - if name_cmp(NAME_INGROUP, group.name): - for ob in group.objects: - ob.tag = True - ok = True - if not ok: - Draw.PupMenu('No Objects Found') - return - - for scn in bpy.data.scenes: - for ob in scn.objects: - if NAME_DATA: - if name_cmp(NAME_DATA, ob.getData(1)): - activate(ob, scn) - return - if NAME_INGROUP: - # Crap and slow but not much we can do about that - ''' - for group in bpy.data.groups: - if name_cmp(NAME_INGROUP, group.name): - for ob_group in group.objects: - if ob == ob_group: - activate(ob, scn) - return - ''' - # Use speedup, this is in a group whos name matches. - if ob.tag: - activate(ob, scn) - return - - if NAME_DUPGROUP: - if ob.DupGroup and name_cmp(NAME_DUPGROUP, ob.DupGroup.name): - activate(ob, scn) - return - - if NAME_IMAGE: - for img in get_object_images(ob): - if name_cmp(NAME_IMAGE, img.name) or name_cmp(NAME_IMAGE, img.filename.split('\\')[-1].split('/')[-1]): - activate(ob, scn) - return - if NAME_MATERIAL or NAME_TEXTURE: - try: materials = ob.getData(mesh=1).materials - except: materials = [] - - # Add object materials - materials.extend(ob.getMaterials()) - - for mat in materials: - if mat: - if NAME_MATERIAL: - if name_cmp(NAME_MATERIAL, mat.name): - activate(ob, scn) - return - if NAME_TEXTURE: - for mtex in mat.getTextures(): - if mtex: - tex = mtex.tex - if tex: - if name_cmp(NAME_TEXTURE, tex.name): - activate(ob, scn) - return - - - Draw.PupMenu('No Objects Found') - -if __name__ == '__main__': - main() |