blender/release/scripts/image_bake_wire.py

110 lines
2.9 KiB
Python
Raw Normal View History

#!BPY
"""
Name: 'Bake Wire Image from UVs'
Blender: 242
Group: 'Image'
Tooltip: 'Generate an image from the selected mesh objects UV coords and materials'
"""
__author__= ['Campbell Barton']
__url__= ('blender', 'elysiun', 'http://www.gametutorials.com')
__version__= '0.1'
__bpydoc__= '''\
Bake Wire Image from UVs
Write a wireframe image from the UV coords and the the material color
This is usefull for laying out UV images on an unwrapped mesh.
Make sure your UV Coordinates do not overlap.
LSCM Unwrapper or archimap unwrapper work well to automaticaly do this.
'''
import Blender
import BPyRender
#reload(BPyRender)
import BPyMessages
Vector= Blender.Mathutils.Vector
Create= Blender.Draw.Create
def main():
# Create the variables.
# Filename without path or extension.
# Big LC, gets all unique mesh objects from the selection that have UV coords.
me_s= dict([\
(ob.getData(name_only=1), ob.getData(mesh=1))\
for ob in Blender.Object.GetSelected()\
if ob.getType()=='Mesh' if ob.getData(mesh=1).faceUV]).values()
if not me_s:
BPyMessages.Error_NoMeshUvSelected()
return
newpath= Blender.Get('filename').split('/')[-1].split('\\')[-1].replace('.blend', '_wire.png')
PREF_IMAGE_PATH = Create('//%s_wire' % newpath)
PREF_IMAGE_SIZE = Create(512)
PREF_IMAGE_WIRE_INVERT = Create(0)
PREF_IMAGE_WIRE_UNDERLAY = Create(1)
PREF_IMAGE_SMOOTH= Create(1)
PREF_SEL_FACES_ONLY= Create(0)
pup_block = [\
###'Image Path: (no ext)',\
###('', PREF_IMAGE_PATH, 3, 100, 'Path to new Image. "//" for curent blend dir.'),\
###'Image Options',
('Pixel Size:', PREF_IMAGE_SIZE, 64, 4096, 'Image Width and Height.'),\
('White Wire', PREF_IMAGE_WIRE_INVERT, 'Sets the wire to white (otherwise its black).'),\
('Fill Faces', PREF_IMAGE_WIRE_UNDERLAY, 'Fill in faces with material color.'),\
('Smooth lines', PREF_IMAGE_SMOOTH, 'Render smooth lines.'),\
'',\
('Selected Faces only', PREF_SEL_FACES_ONLY, 'Only bake from selected faces.'),\
]
if not Blender.Draw.PupBlock('Wire Bake', pup_block):
return
# Defaults for VCol, user cant change
PREF_IMAGE_WIRE= True # of course we need this one
PREF_USE_IMAGE= False
PREF_IMAGE_BLEED= 0
PREF_USE_VCOL= False
PREF_USE_MATCOL= False
PREF_USE_NORMAL= False
PREF_USE_TEXTURE= False
def file_sel(PREF_IMAGE_PATH):
if not (BPyMessages.Warning_SaveOver(PREF_IMAGE_PATH) and \
BPyMessages.Warning_SaveOver(PREF_IMAGE_PATH+'.png')):
return
image = BPyRender.vcol2image(me_s,\
PREF_IMAGE_PATH,\
PREF_IMAGE_SIZE.val,\
PREF_IMAGE_BLEED,\
PREF_IMAGE_SMOOTH.val,\
PREF_IMAGE_WIRE,\
PREF_IMAGE_WIRE_INVERT.val,\
PREF_IMAGE_WIRE_UNDERLAY.val,\
PREF_USE_IMAGE,\
PREF_USE_VCOL,\
PREF_USE_MATCOL,\
PREF_USE_NORMAL,\
PREF_USE_TEXTURE,\
PREF_SEL_FACES_ONLY.val)
if image:
image.makeCurrent()
Blender.Window.RedrawAll()
Blender.Window.FileSelector(file_sel, 'SAVE PNG', newpath)
if __name__ == '__main__':
main()