Added research data, testing blender mesh generation
This commit is contained in:
112
src_research_readme/blender_2.43_scripts/uvcopy.py
Normal file
112
src_research_readme/blender_2.43_scripts/uvcopy.py
Normal file
@@ -0,0 +1,112 @@
|
||||
#!BPY
|
||||
""" Registration info for Blender menus: <- these words are ignored
|
||||
Name: 'UV Copy from Active'
|
||||
Blender: 242
|
||||
Group: 'Object'
|
||||
Tip: 'Copy UV coords from a mesh to another that has same vertex indices'
|
||||
"""
|
||||
|
||||
__author__ = "Toni Alatalo, Martin Poirier et. al."
|
||||
__url__ = ("blender", "blenderartists.org")
|
||||
__version__ = "0.2 01/2006"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script copies UV coords from a mesh to another (version of the same mesh).
|
||||
All target meshes must have the same number of faces at the active
|
||||
"""
|
||||
|
||||
# ***** 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 *****
|
||||
|
||||
import Blender
|
||||
|
||||
def face_key(me):
|
||||
'''
|
||||
Returns the face lengths for this mesh
|
||||
only copy between meshes that have matching face_key's
|
||||
'''
|
||||
return tuple([len(f) for f in me.faces])
|
||||
|
||||
def main():
|
||||
scene = Blender.Scene.GetCurrent()
|
||||
|
||||
source_ob = scene.objects.active
|
||||
|
||||
if not source_ob or source_ob.type != 'Mesh':
|
||||
Blender.Draw.PupMenu("Error%t|No active object to copy UVs from.")
|
||||
return
|
||||
|
||||
source_me = source_ob.getData(mesh=1)
|
||||
|
||||
target_mes = [ ob.getData(mesh=1) for ob in scene.objects.context if ob != source_ob if ob.type == 'Mesh']
|
||||
|
||||
# remove double meshes
|
||||
target_mes = dict([(me.name, me) for me in target_mes])
|
||||
target_mes = target_mes.values()
|
||||
|
||||
if not target_mes:
|
||||
Blender.Draw.PupMenu("Error%t|No selected object(s) to copy UVs to.")
|
||||
return
|
||||
|
||||
source_me = source_ob.getData(mesh=1)
|
||||
|
||||
if not source_me.faceUV:
|
||||
Blender.Draw.PupMenu("Error%t|Active mesh has no UVs.")
|
||||
return
|
||||
|
||||
if not target_mes:
|
||||
Blender.Draw.PupMenu("Error%t|no selected object other than the source, hence no target defined.")
|
||||
return
|
||||
error = False
|
||||
|
||||
source_face_key = face_key(source_me)
|
||||
source_faces = source_me.faces
|
||||
|
||||
fail_count = 0
|
||||
|
||||
for target in target_mes:
|
||||
if len(source_me.faces) != len(target.faces):
|
||||
print '\ttarget "%s" facelen does not match "%s".' % (target.name, source_me.name)
|
||||
error = True
|
||||
fail_count +=1
|
||||
else:
|
||||
# slow but worth comparing
|
||||
if source_face_key != face_key(target):
|
||||
print '\t\terror, face len dosnt match for ob "%s" next mesh...' % target.name
|
||||
error = True
|
||||
fail_count +=1
|
||||
else:
|
||||
target_faces = target.faces
|
||||
|
||||
# Add uvs if there not there
|
||||
target.faceUV = True
|
||||
|
||||
for i, f_source in enumerate(source_faces):
|
||||
target_faces[i].uv = f_source.uv
|
||||
|
||||
target.update()
|
||||
|
||||
msg = 'Copied UVs to %d of %d mesh(s)' % (len(target_mes)-fail_count, len(target_mes))
|
||||
|
||||
if error:
|
||||
msg += "|Could not copy some UV's, see console."
|
||||
|
||||
Blender.Draw.PupMenu('UV Copy Finished%t|' + msg)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user