When you run the script, which only takes a couple of seconds, you end up with a neat little document ready to edit:
![]() |
| I added a part at the end of the script to make sure the diffuse layer was active. It's a little touch, but makes it nice to know the script leaves off somewhere useful rather than some random layer. |
The script is pretty straightforward, but has a couple of interesting little bits, like how it moves groups. I had to trawl around for a while to get that one working. I'm also becoming a big fan of minimizing console feedback. As long as it's all working I don't think it should spit too many "I'm doing this!" messages out at you. It's annoying.
##############################################################################
#
# ps_newdoc.py
#
# Photoshop doc setup
# (C) Pete Hanshaw, 2012
# http://peterhanshawart.blogspot.com.au/
#
##############################################################################
#
# Creates a new PSD document and sets up placeholder groups and layers
# ready for texture work.
#
# Creates:
# -'n' group for normal map
# -'s' group for specular map
# -'d' group for diffuse map
#
#
# Requires the Win32 Extensions:
# http://python.net/crew/mhammond/win32/
#
##############################################################################
#Import required modules
from win32com.client.dynamic import Dispatch
from sys import exit
import pythoncom
#Set up the document. More groups can be added easily by creating more dict keys
group_names = {}
group_names['d'] = 'dif_base'
group_names['s'] = 'spec_base'
group_names['n'] = 'nrm_base'
#Begin the script
if (__name__ == '__main__'):
#COM dispatch for Photoshop
try:
psApp = Dispatch('Photoshop.Application')
except:
os.system("color 0c")
print "The dispatch to Photoshop did not work"
os.system("PAUSE")
exit(0)
#Define the fill colors
#Normal base
nrm_SolidColor = Dispatch('Photoshop.SolidColor')
nrm_SolidColor.rgb.red = 128
nrm_SolidColor.rgb.green = 128
nrm_SolidColor.rgb.blue = 255
#Define the fill colors
#Spec base
spec_SolidColor = Dispatch('Photoshop.SolidColor')
spec_SolidColor.rgb.red = 0
spec_SolidColor.rgb.green = 0
spec_SolidColor.rgb.blue = 0
#Define the fill colors
#Diffuse base
dif_SolidColor = Dispatch('Photoshop.SolidColor')
dif_SolidColor.rgb.red = 128
dif_SolidColor.rgb.green = 128
dif_SolidColor.rgb.blue = 128
#w, h, res, name, mode, initial-fill, asp-ratio, Bits-P/Ch, ColProfile
new_doc = psApp.Documents.Add(1024, 1024, 72, "new_source_texture", 2, 1, 1)
print "Setting up a", new_doc.name
for group, layer in group_names.items():
new_layerSet = new_doc.LayerSets.Add()
new_layerSet.name = group
if group == 'n':
new_art_layer = new_layerSet.ArtLayers.Add()
new_art_layer.name = layer
#Fill the layer with appropriate color
psApp.activeDocument.selection.selectAll
psApp.activeDocument.selection.Fill(nrm_SolidColor)
new_layerSet.Visible = False
elif group == 's':
new_art_layer = new_layerSet.ArtLayers.Add()
new_art_layer.name = layer
#Fill the layer with appropriate color
psApp.activeDocument.selection.selectAll
psApp.activeDocument.selection.Fill(spec_SolidColor)
new_layerSet.Visible = False
elif group == 'd':
new_art_layer = new_layerSet.ArtLayers.Add()
new_art_layer.name = layer
#Fill the layer with appropriate color
psApp.activeDocument.selection.selectAll
psApp.activeDocument.selection.Fill(dif_SolidColor)
else:
new_art_layer = new_layerSet.ArtLayers.Add()
new_art_layer.name = layer
#Fill the layer with appropriate color
psApp.activeDocument.selection.selectAll
psApp.activeDocument.selection.Fill(dif_SolidColor)
#Reorder the photoshop layers so that it reads from top down:
#normal, spec, diffuse
dGroup = psApp.activeDocument.layerSets['d']
#See Adobe's photoshop_cs4_vbscript_ref.pdf to make sense of this-
dGroup.Move(new_doc, 2)
#Deselect the fill area
psApp.activeDocument.selection.deselect
#Set the active layer to the diffuse
psApp.activeDocument.activeLayer = (psApp.activeDocument.layerSets['d'].
artLayers['dif_base'])
print "All done!"
exit(1)

No comments:
Post a Comment
Comments?