mirror of https://github.com/lammps/lammps.git
392 lines
13 KiB
Python
392 lines
13 KiB
Python
# 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]
|