DAMASK_EICMD/processing/post/mentat_colorMap.py

164 lines
5.0 KiB
Python
Raw Normal View History

#!/usr/bin/env python
import sys, os, string
import damask
from optparse import OptionParser
# -----------------------------
def readConfig(configFile,ownPath):
config = {}
configDir = os.path.split(os.path.realpath(ownPath))[0]
filename = os.path.join(configDir,configFile)
if os.path.isfile(filename):
file = open(filename)
for line in file.readlines():
if not line.startswith('#'):
item = line.split()
for name in item[0].split('|'):
config[name] = {}
config[name]['left'] = map(float,item[1].split(','))
config[name]['right'] = map(float,item[2].split(','))
file.close()
return config
# -----------------------------
def outMentat(cmd,locals):
if cmd[0:3] == '(!)':
exec(cmd[3:])
elif cmd[0:3] == '(?)':
cmd = eval(cmd[3:])
py_send(cmd)
else:
py_send(cmd)
return
# -----------------------------
def outStdout(cmd,locals):
if cmd[0:3] == '(!)':
exec(cmd[3:])
elif cmd[0:3] == '(?)':
cmd = eval(cmd[3:])
print cmd
else:
print cmd
return
# -----------------------------
def output(cmds,locals,dest):
for cmd in cmds:
if isinstance(cmd,list):
output(cmd,locals,dest)
else:
{\
'Mentat': outMentat,\
'Stdout': outStdout,\
}[dest](cmd,locals)
return
# -----------------------------
def colorMap(colors,baseIdx=32):
cmds = [ "*color %i %f %f %f"%(idx+baseIdx,color[0],color[1],color[2])
for idx,color in enumerate(colors) ]
return cmds
# -----------------------------
# MAIN FUNCTION STARTS HERE
# -----------------------------
parser = OptionParser(usage="%prog [options] configured scheme | (lower_h,s,l upper_h,s,l)", description = """
Changes the color map in MSC.Mentat.
Interpolates colors between "lower_hsl" and "upper_hsl".
""" + string.replace('$Id$','\n','\\n')
)
parser.add_option("-i","--inverse", action = "store_true",
dest = "inverse", \
help = "invert legend [%default]")
parser.add_option( "--palette", action = "store_true",
dest = "palette", \
help = "output plain rgb palette integer values (0-255) [%default]")
parser.add_option( "--palettef", action = "store_true",
dest = "palettef", \
help = "output plain rgb palette float values (0.0-1.0) [%default]")
parser.add_option("-p", "--port", type = "int",\
dest = "port",\
help = "Mentat connection port [%default]")
parser.add_option("-b", "--baseindex", type = "int",\
dest = "baseIdx",\
help = "base index of colormap [%default]")
parser.add_option("-n", "--colorcount", type = "int",\
dest = "colorcount",\
help = "number of colors [%default]")
parser.add_option("-c", "--config", type='string', \
dest = "config",\
help = "configuration file [%default]")
parser.add_option("-v", "--verbose", action="store_true",\
dest = "verbose",\
help = "write Mentat command stream also to stdout [%default]")
parser.set_defaults(port = 40007)
parser.set_defaults(baseIdx = 32)
parser.set_defaults(colorcount = 32)
parser.set_defaults(config = 'colorMap.config')
parser.set_defaults(inverse = False)
parser.set_defaults(palette = False)
parser.set_defaults(verbose = False)
msg = []
(options, colors) = parser.parse_args()
config = readConfig(options.config,sys.argv[0])
if len(colors) > 0 and colors[0] in config:
left = config[colors[0]][{True:'right',False:'left' }[options.inverse]]
right = config[colors[0]][{True:'left' ,False:'right'}[options.inverse]]
elif len(colors) == 2:
left = map(float, colors[{True:1,False:0}[options.inverse]].split(','))
right = map(float, colors[{True:0,False:1}[options.inverse]].split(','))
else:
left = {True:[0.0,0.0,0.0],False:[0.0,0.0,1.0]}[options.inverse]
right = {True:[0.0,0.0,1.0],False:[0.0,0.0,0.0]}[options.inverse]
theMap = damask.Colormap(damask.Color('HSL',left),damask.Color('HSL',right))
theColors = theMap.export(format='list',steps=options.colorcount)
if options.palette or options.palettef:
for theColor in theColors:
print '\t'.join(map(lambda x: {True: str( x),
False:str(int(255*x))}[options.palettef],theColor))
else:
### connect to mentat and change colorMap
sys.path.append(damask.solver.Marc().libraryPath('../../'))
try:
from py_mentat import *
print 'waiting to connect...'
py_connect('',options.port)
print 'connected...'
mentat = True
except:
sys.stderr.write('warning: no valid Mentat release found\n')
mentat = False
outputLocals = {}
cmds = colorMap(theColors,options.baseIdx)
if mentat:
output(['*show_table']+cmds+['*show_model *redraw'],outputLocals,'Mentat')
py_disconnect()
2011-11-04 15:57:41 +05:30
if options.verbose:
output(cmds,outputLocals,'Stdout')