git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@5201 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
391
python/examples/pizza/vizinfo.py
Normal file
391
python/examples/pizza/vizinfo.py
Normal file
@ -0,0 +1,391 @@
|
||||
# Pizza.py toolkit, www.cs.sandia.gov/~sjplimp/pizza.html
|
||||
# Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
|
||||
#
|
||||
# Copyright (2005) Sandia Corporation. Under the terms of Contract
|
||||
# DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||
# certain rights in this software. This software is distributed under
|
||||
# the GNU General Public License.
|
||||
|
||||
# vizinfo class, not a top-level Pizza.py tool
|
||||
|
||||
# History
|
||||
# 8/05, Matt Jones (BYU): original version
|
||||
# 9/05, Steve Plimpton: added 140-color table
|
||||
|
||||
# ToDo list
|
||||
|
||||
# Variables
|
||||
|
||||
# Imports and external programs
|
||||
|
||||
import types
|
||||
|
||||
# Class definition
|
||||
|
||||
class vizinfo:
|
||||
"""
|
||||
Information holder for Pizza.py visualization tools
|
||||
|
||||
acolor,bcolor,tcolor,lcolor = RGB values for each atom/bond/tri/line type
|
||||
arad = radius of each atom type
|
||||
brad,lrad = thickness of each bond/line type
|
||||
tfill = fill flag for each triangle type
|
||||
|
||||
all of these arrays are indexed by object type which runs 1-Ntype
|
||||
nacolor,nbcolor,ntcolor,nlcolor,narad,nbrad,nlrad,ntfill
|
||||
are # of types each array holds
|
||||
actual length is nacolor+1 so that array can be indexed by 1-Ntype
|
||||
|
||||
setcolors() = set atom/bond/tri/line colors
|
||||
setradii() = set atom/bond/line radii/thickness
|
||||
setfill() = set triangle fill factor
|
||||
extend() = grow an array
|
||||
"""
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
|
||||
def __init__(self):
|
||||
self.acolor = []
|
||||
self.arad = []
|
||||
self.bcolor = []
|
||||
self.brad = []
|
||||
self.tcolor = []
|
||||
self.tfill = []
|
||||
self.lcolor = []
|
||||
self.lrad = []
|
||||
self.nacolor = self.narad = 0
|
||||
self.nbcolor = self.nbrad = 0
|
||||
self.ntcolor = self.ntfill = 0
|
||||
self.nlcolor = self.nlrad = 0
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# set color RGB for which = atoms, bonds, triangles
|
||||
|
||||
def setcolors(self,which,ids,rgbs):
|
||||
|
||||
# convert args into lists if single values
|
||||
# if arg = 0, convert to full-range list
|
||||
|
||||
if type(ids) is types.IntType and ids == 0:
|
||||
if which == "atom": ids = range(self.nacolor)
|
||||
if which == "bond": ids = range(self.nbcolor)
|
||||
if which == "tri": ids = range(self.ntcolor)
|
||||
if which == "line": ids = range(self.nlcolor)
|
||||
if type(ids) is not types.ListType and type(ids) is not types.TupleType:
|
||||
ids = [ids]
|
||||
if type(rgbs) is not types.ListType and type(rgbs) is not types.TupleType:
|
||||
rgbs = [rgbs]
|
||||
|
||||
# if list of types has a 0, increment each type value
|
||||
|
||||
if 0 in ids:
|
||||
for i in xrange(len(ids)): ids[i] += 1
|
||||
|
||||
# extend storage list if necessary
|
||||
# extend other arrays for same "which" so that gl::make_atom_calllist
|
||||
# has valid arrays to work with
|
||||
|
||||
if which == "atom":
|
||||
if max(ids) > self.nacolor:
|
||||
self.nacolor = self.extend(self.acolor,max(ids))
|
||||
self.nacolor = self.extend(self.arad,max(ids))
|
||||
if which == "bond":
|
||||
if max(ids) > self.nbcolor:
|
||||
self.nbcolor = self.extend(self.bcolor,max(ids))
|
||||
self.nbcolor = self.extend(self.brad,max(ids))
|
||||
if which == "tri":
|
||||
if max(ids) > self.ntcolor:
|
||||
self.ntcolor = self.extend(self.tcolor,max(ids))
|
||||
self.ntcolor = self.extend(self.tfill,max(ids))
|
||||
if which == "line":
|
||||
if max(ids) > self.nlcolor:
|
||||
self.nlcolor = self.extend(self.lcolor,max(ids))
|
||||
self.nlcolor = self.extend(self.lrad,max(ids))
|
||||
|
||||
# set color for each type
|
||||
# if list lengths match, set directly, else interpolate
|
||||
# convert final color from 0-255 to 0.0-1.0
|
||||
|
||||
ntypes = len(ids)
|
||||
nrgbs = len(rgbs)
|
||||
|
||||
for i in xrange(ntypes):
|
||||
id = ids[i]
|
||||
|
||||
if rgbs[0] == "loop":
|
||||
list = colors.keys()
|
||||
red,green,blue = colors[list[i % len(colors)]]
|
||||
elif ntypes == nrgbs:
|
||||
red,green,blue = colors[rgbs[i]]
|
||||
else:
|
||||
r = i/float(ntypes-1) * float(nrgbs-1)
|
||||
jlo = int(r)
|
||||
jhi = jlo + 1
|
||||
if jhi == nrgbs: jhi = nrgbs - 1
|
||||
clo = colors[rgbs[jlo]]
|
||||
chi = colors[rgbs[jhi]]
|
||||
delta = r - jlo
|
||||
red = clo[0] + delta*(chi[0]-clo[0])
|
||||
green = clo[1] + delta*(chi[1]-clo[1])
|
||||
blue = clo[2] + delta*(chi[2]-clo[2])
|
||||
|
||||
color = [red/255.0,green/255.0,blue/255.0]
|
||||
|
||||
if which == "atom": self.acolor[id] = color
|
||||
if which == "bond": self.bcolor[id] = color
|
||||
if which == "tri": self.tcolor[id] = color
|
||||
if which == "line": self.lcolor[id] = color
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# set radii for which = atoms, bonds, lines
|
||||
|
||||
def setradii(self,which,ids,radii):
|
||||
|
||||
# convert args into lists if single values
|
||||
# if arg = 0, convert to full-range list
|
||||
|
||||
if type(ids) is types.IntType and ids == 0:
|
||||
if which == "atom": ids = range(self.narad)
|
||||
if which == "bond": ids = range(self.nbrad)
|
||||
if which == "line": ids = range(self.nlrad)
|
||||
if type(ids) is not types.ListType and type(ids) is not types.TupleType:
|
||||
ids = [ids]
|
||||
if type(radii) is not types.ListType and \
|
||||
type(radii) is not types.TupleType:
|
||||
radii = [radii]
|
||||
|
||||
# if list of types has a 0, increment each type value
|
||||
|
||||
if 0 in ids:
|
||||
for i in xrange(len(ids)): ids[i] += 1
|
||||
|
||||
# extend storage list if necessary
|
||||
# extend other arrays for same "which" so that gl::make_atom_calllist
|
||||
# has valid arrays to work with
|
||||
|
||||
if which == "atom":
|
||||
if max(ids) > self.narad:
|
||||
self.narad = self.extend(self.arad,max(ids))
|
||||
self.narad = self.extend(self.acolor,max(ids))
|
||||
if which == "bond":
|
||||
if max(ids) > self.nbrad:
|
||||
self.nbrad = self.extend(self.brad,max(ids))
|
||||
self.nbrad = self.extend(self.bcolor,max(ids))
|
||||
if which == "line":
|
||||
if max(ids) > self.nlrad:
|
||||
self.nlrad = self.extend(self.lrad,max(ids))
|
||||
self.nlrad = self.extend(self.lcolor,max(ids))
|
||||
|
||||
# set radius for each type
|
||||
# if list lengths match, set directly, else interpolate
|
||||
|
||||
ntypes = len(ids)
|
||||
nradii = len(radii)
|
||||
|
||||
for i in range(ntypes):
|
||||
id = ids[i]
|
||||
|
||||
if ntypes == nradii: rad = radii[i]
|
||||
else:
|
||||
r = i/float(ntypes-1) * float(nradii-1)
|
||||
jlo = int(r)
|
||||
jhi = jlo + 1
|
||||
if jhi == nradii: jhi = nradii - 1
|
||||
rlo = radii[jlo]
|
||||
rhi = radii[jhi]
|
||||
delta = r - jlo
|
||||
rad = rlo + delta*(rhi-rlo)
|
||||
|
||||
if which == "atom": self.arad[id] = rad
|
||||
if which == "bond": self.brad[id] = rad
|
||||
if which == "line": self.lrad[id] = rad
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# set triangle fill style
|
||||
# 0 = fill only, 1 = line only, 2 = fill and line
|
||||
|
||||
def setfills(self,which,ids,fills):
|
||||
|
||||
# convert args into lists if single values
|
||||
# if arg = 0, convert to full-range list
|
||||
|
||||
if type(ids) is types.IntType and ids == 0:
|
||||
ids = range(self.ntfill)
|
||||
if type(ids) is not types.ListType and type(ids) is not types.TupleType:
|
||||
ids = [ids]
|
||||
if type(fills) is not types.ListType and \
|
||||
type(fills) is not types.TupleType:
|
||||
fills = [fills]
|
||||
|
||||
# if list of types has a 0, increment each type value
|
||||
|
||||
if 0 in ids:
|
||||
for i in xrange(len(ids)): ids[i] += 1
|
||||
|
||||
# extend storage list if necessary
|
||||
# extend other arrays for same "which" so that gl::make_atom_calllist
|
||||
# has valid arrays to work with
|
||||
|
||||
if max(ids) > self.ntfill:
|
||||
self.ntfill = self.extend(self.tfill,max(ids))
|
||||
self.ntfill = self.extend(self.tcolor,max(ids))
|
||||
|
||||
# set fill flag for each type
|
||||
# if list lengths match, set directly, else set types to 1st fill value
|
||||
|
||||
if len(fills) == len(ids):
|
||||
for i in xrange(len(ids)): self.tfill[ids[i]] = int(fills[i])
|
||||
else:
|
||||
for id in ids: self.tfill[id] = int(fills[0])
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
|
||||
def extend(self,array,n):
|
||||
for i in range(n-len(array)+1): array.append(0)
|
||||
return n
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# dictionary of 140 color names and associated RGB values
|
||||
|
||||
colors = {}
|
||||
|
||||
colors["aliceblue"] = [240, 248, 255]
|
||||
colors["antiquewhite"] = [250, 235, 215]
|
||||
colors["aqua"] = [0, 255, 255]
|
||||
colors["aquamarine"] = [127, 255, 212]
|
||||
colors["azure"] = [240, 255, 255]
|
||||
colors["beige"] = [245, 245, 220]
|
||||
colors["bisque"] = [255, 228, 196]
|
||||
colors["black"] = [0, 0, 0]
|
||||
colors["blanchedalmond"] = [255, 255, 205]
|
||||
colors["blue"] = [0, 0, 255]
|
||||
colors["blueviolet"] = [138, 43, 226]
|
||||
colors["brown"] = [165, 42, 42]
|
||||
colors["burlywood"] = [222, 184, 135]
|
||||
colors["cadetblue"] = [95, 158, 160]
|
||||
colors["chartreuse"] = [127, 255, 0]
|
||||
colors["chocolate"] = [210, 105, 30]
|
||||
colors["coral"] = [255, 127, 80]
|
||||
colors["cornflowerblue"] = [100, 149, 237]
|
||||
colors["cornsilk"] = [255, 248, 220]
|
||||
colors["crimson"] = [220, 20, 60]
|
||||
colors["cyan"] = [0, 255, 255]
|
||||
colors["darkblue"] = [0, 0, 139]
|
||||
colors["darkcyan"] = [0, 139, 139]
|
||||
colors["darkgoldenrod"] = [184, 134, 11]
|
||||
colors["darkgray"] = [169, 169, 169]
|
||||
colors["darkgreen"] = [0, 100, 0]
|
||||
colors["darkkhaki"] = [189, 183, 107]
|
||||
colors["darkmagenta"] = [139, 0, 139]
|
||||
colors["darkolivegreen"] = [85, 107, 47]
|
||||
colors["darkorange"] = [255, 140, 0]
|
||||
colors["darkorchid"] = [153, 50, 204]
|
||||
colors["darkred"] = [139, 0, 0]
|
||||
colors["darksalmon"] = [233, 150, 122]
|
||||
colors["darkseagreen"] = [143, 188, 143]
|
||||
colors["darkslateblue"] = [72, 61, 139]
|
||||
colors["darkslategray"] = [47, 79, 79]
|
||||
colors["darkturquoise"] = [0, 206, 209]
|
||||
colors["darkviolet"] = [148, 0, 211]
|
||||
colors["deeppink"] = [255, 20, 147]
|
||||
colors["deepskyblue"] = [0, 191, 255]
|
||||
colors["dimgray"] = [105, 105, 105]
|
||||
colors["dodgerblue"] = [30, 144, 255]
|
||||
colors["firebrick"] = [178, 34, 34]
|
||||
colors["floralwhite"] = [255, 250, 240]
|
||||
colors["forestgreen"] = [34, 139, 34]
|
||||
colors["fuchsia"] = [255, 0, 255]
|
||||
colors["gainsboro"] = [220, 220, 220]
|
||||
colors["ghostwhite"] = [248, 248, 255]
|
||||
colors["gold"] = [255, 215, 0]
|
||||
colors["goldenrod"] = [218, 165, 32]
|
||||
colors["gray"] = [128, 128, 128]
|
||||
colors["green"] = [0, 128, 0]
|
||||
colors["greenyellow"] = [173, 255, 47]
|
||||
colors["honeydew"] = [240, 255, 240]
|
||||
colors["hotpink"] = [255, 105, 180]
|
||||
colors["indianred"] = [205, 92, 92]
|
||||
colors["indigo"] = [75, 0, 130]
|
||||
colors["ivory"] = [255, 240, 240]
|
||||
colors["khaki"] = [240, 230, 140]
|
||||
colors["lavender"] = [230, 230, 250]
|
||||
colors["lavenderblush"] = [255, 240, 245]
|
||||
colors["lawngreen"] = [124, 252, 0]
|
||||
colors["lemonchiffon"] = [255, 250, 205]
|
||||
colors["lightblue"] = [173, 216, 230]
|
||||
colors["lightcoral"] = [240, 128, 128]
|
||||
colors["lightcyan"] = [224, 255, 255]
|
||||
colors["lightgoldenrodyellow"] = [250, 250, 210]
|
||||
colors["lightgreen"] = [144, 238, 144]
|
||||
colors["lightgrey"] = [211, 211, 211]
|
||||
colors["lightpink"] = [255, 182, 193]
|
||||
colors["lightsalmon"] = [255, 160, 122]
|
||||
colors["lightseagreen"] = [32, 178, 170]
|
||||
colors["lightskyblue"] = [135, 206, 250]
|
||||
colors["lightslategray"] = [119, 136, 153]
|
||||
colors["lightsteelblue"] = [176, 196, 222]
|
||||
colors["lightyellow"] = [255, 255, 224]
|
||||
colors["lime"] = [0, 255, 0]
|
||||
colors["limegreen"] = [50, 205, 50]
|
||||
colors["linen"] = [250, 240, 230]
|
||||
colors["magenta"] = [255, 0, 255]
|
||||
colors["maroon"] = [128, 0, 0]
|
||||
colors["mediumaquamarine"] = [102, 205, 170]
|
||||
colors["mediumblue"] = [0, 0, 205]
|
||||
colors["mediumorchid"] = [186, 85, 211]
|
||||
colors["mediumpurple"] = [147, 112, 219]
|
||||
colors["mediumseagreen"] = [60, 179, 113]
|
||||
colors["mediumslateblue"] = [123, 104, 238]
|
||||
colors["mediumspringgreen"] = [0, 250, 154]
|
||||
colors["mediumturquoise"] = [72, 209, 204]
|
||||
colors["mediumvioletred"] = [199, 21, 133]
|
||||
colors["midnightblue"] = [25, 25, 112]
|
||||
colors["mintcream"] = [245, 255, 250]
|
||||
colors["mistyrose"] = [255, 228, 225]
|
||||
colors["moccasin"] = [255, 228, 181]
|
||||
colors["navajowhite"] = [255, 222, 173]
|
||||
colors["navy"] = [0, 0, 128]
|
||||
colors["oldlace"] = [253, 245, 230]
|
||||
colors["olive"] = [128, 128, 0]
|
||||
colors["olivedrab"] = [107, 142, 35]
|
||||
colors["orange"] = [255, 165, 0]
|
||||
colors["orangered"] = [255, 69, 0]
|
||||
colors["orchid"] = [218, 112, 214]
|
||||
colors["palegoldenrod"] = [238, 232, 170]
|
||||
colors["palegreen"] = [152, 251, 152]
|
||||
colors["paleturquoise"] = [175, 238, 238]
|
||||
colors["palevioletred"] = [219, 112, 147]
|
||||
colors["papayawhip"] = [255, 239, 213]
|
||||
colors["peachpuff"] = [255, 239, 213]
|
||||
colors["peru"] = [205, 133, 63]
|
||||
colors["pink"] = [255, 192, 203]
|
||||
colors["plum"] = [221, 160, 221]
|
||||
colors["powderblue"] = [176, 224, 230]
|
||||
colors["purple"] = [128, 0, 128]
|
||||
colors["red"] = [255, 0, 0]
|
||||
colors["rosybrown"] = [188, 143, 143]
|
||||
colors["royalblue"] = [65, 105, 225]
|
||||
colors["saddlebrown"] = [139, 69, 19]
|
||||
colors["salmon"] = [250, 128, 114]
|
||||
colors["sandybrown"] = [244, 164, 96]
|
||||
colors["seagreen"] = [46, 139, 87]
|
||||
colors["seashell"] = [255, 245, 238]
|
||||
colors["sienna"] = [160, 82, 45]
|
||||
colors["silver"] = [192, 192, 192]
|
||||
colors["skyblue"] = [135, 206, 235]
|
||||
colors["slateblue"] = [106, 90, 205]
|
||||
colors["slategray"] = [112, 128, 144]
|
||||
colors["snow"] = [255, 250, 250]
|
||||
colors["springgreen"] = [0, 255, 127]
|
||||
colors["steelblue"] = [70, 130, 180]
|
||||
colors["tan"] = [210, 180, 140]
|
||||
colors["teal"] = [0, 128, 128]
|
||||
colors["thistle"] = [216, 191, 216]
|
||||
colors["tomato"] = [253, 99, 71]
|
||||
colors["turquoise"] = [64, 224, 208]
|
||||
colors["violet"] = [238, 130, 238]
|
||||
colors["wheat"] = [245, 222, 179]
|
||||
colors["white"] = [255, 255, 255]
|
||||
colors["whitesmoke"] = [245, 245, 245]
|
||||
colors["yellow"] = [255, 255, 0]
|
||||
colors["yellowgreen"] = [154, 205, 50]
|
||||
Reference in New Issue
Block a user