using new class/unifying style
This commit is contained in:
parent
70cb1f0764
commit
c3c08b5b53
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
|
@ -18,11 +19,10 @@ scriptID = ' '.join([scriptName,damask.version])
|
||||||
# MAIN
|
# MAIN
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
|
|
||||||
msg = "Add scalars, vectors, and/or an RGB tuple from"
|
|
||||||
msg += "an ASCIItable to existing VTK grid (.vtr/.vtk/.vtu)."
|
|
||||||
parser = OptionParser(option_class=damask.extendableOption,
|
parser = OptionParser(option_class=damask.extendableOption,
|
||||||
usage='%prog options [ASCIItable(s)]',
|
usage='%prog options [ASCIItable(s)]',
|
||||||
description = msg,
|
description = "Add scalars, vectors, tensors, and/or an RGB tuple from ASCIItable "
|
||||||
|
+ "to existing VTK grid (.vtr/.vtk/.vtu).",
|
||||||
version = scriptID)
|
version = scriptID)
|
||||||
|
|
||||||
parser.add_option( '--vtk',
|
parser.add_option( '--vtk',
|
||||||
|
@ -49,10 +49,10 @@ parser.add_option('-c', '--color',
|
||||||
parser.set_defaults(data = [],
|
parser.set_defaults(data = [],
|
||||||
tensor = [],
|
tensor = [],
|
||||||
color = [],
|
color = [],
|
||||||
render = False,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
(options, filenames) = parser.parse_args()
|
(options, filenames) = parser.parse_args()
|
||||||
|
if filenames == []: filenames = [None]
|
||||||
|
|
||||||
if not options.vtk: parser.error('No VTK file specified.')
|
if not options.vtk: parser.error('No VTK file specified.')
|
||||||
if not os.path.exists(options.vtk): parser.error('VTK file does not exist.')
|
if not os.path.exists(options.vtk): parser.error('VTK file does not exist.')
|
||||||
|
@ -87,65 +87,28 @@ Ncells = rGrid.GetNumberOfCells()
|
||||||
|
|
||||||
damask.util.croak('{}: {} points and {} cells...'.format(options.vtk,Npoints,Ncells))
|
damask.util.croak('{}: {} points and {} cells...'.format(options.vtk,Npoints,Ncells))
|
||||||
|
|
||||||
# --- loop over input files -------------------------------------------------------------------------
|
|
||||||
|
|
||||||
if filenames == []: filenames = [None]
|
|
||||||
|
|
||||||
for name in filenames:
|
for name in filenames:
|
||||||
try: table = damask.ASCIItable(name = name,
|
damask.util.report(scriptName,name)
|
||||||
buffered = False,
|
|
||||||
readonly = True)
|
|
||||||
except: continue
|
|
||||||
damask.util.report(scriptName, name)
|
|
||||||
|
|
||||||
# --- interpret header ----------------------------------------------------------------------------
|
table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name)
|
||||||
|
|
||||||
table.head_read()
|
|
||||||
|
|
||||||
remarks = []
|
|
||||||
errors = []
|
|
||||||
VTKarray = {}
|
VTKarray = {}
|
||||||
active = defaultdict(list)
|
for data in options.data:
|
||||||
|
VTKarray[data] = numpy_support.numpy_to_vtk(table.get(data).copy(),
|
||||||
|
deep=True,array_type=vtk.VTK_DOUBLE)
|
||||||
|
VTKarray[data].SetName(data)
|
||||||
|
|
||||||
|
for color in options.color:
|
||||||
|
VTKarray[color] = numpy_support.numpy_to_vtk((table.get(color)*255).astype(int).copy(),
|
||||||
|
deep=True,array_type=vtk.VTK_UNSIGNED_CHAR)
|
||||||
|
VTKarray[color].SetName(color)
|
||||||
|
|
||||||
for datatype,dimension,label in [['data',99,options.data],
|
for tensor in options.tensor:
|
||||||
['tensor',9,options.tensor],
|
data = damask.mechanics.symmetric(table.get(tensor).reshape((-1,3,3))).reshape((-1,9))
|
||||||
['color' ,3,options.color],
|
VTKarray[tensor] = numpy_support.numpy_to_vtk(data.copy(),
|
||||||
]:
|
deep=True,array_type=vtk.VTK_DOUBLE)
|
||||||
for i,dim in enumerate(table.label_dimension(label)):
|
VTKarray[tensor].SetName(tensor)
|
||||||
me = label[i]
|
|
||||||
if dim == -1: remarks.append('{} "{}" not found...'.format(datatype,me))
|
|
||||||
elif dim > dimension: remarks.append('"{}" not of dimension {}...'.format(me,dimension))
|
|
||||||
else:
|
|
||||||
remarks.append('adding {} "{}"...'.format(datatype,me))
|
|
||||||
active[datatype].append(me)
|
|
||||||
|
|
||||||
if remarks != []: damask.util.croak(remarks)
|
|
||||||
if errors != []:
|
|
||||||
damask.util.croak(errors)
|
|
||||||
table.close(dismiss = True)
|
|
||||||
continue
|
|
||||||
|
|
||||||
# ------------------------------------------ process data ---------------------------------------
|
|
||||||
|
|
||||||
table.data_readArray([item for sublist in active.values() for item in sublist]) # read all requested data
|
|
||||||
|
|
||||||
for datatype,labels in active.items(): # loop over scalar,color
|
|
||||||
for me in labels: # loop over all requested items
|
|
||||||
VTKtype = vtk.VTK_DOUBLE
|
|
||||||
VTKdata = table.data[:, table.label_indexrange(me)].copy() # copy to force contiguous layout
|
|
||||||
|
|
||||||
if datatype == 'color':
|
|
||||||
VTKtype = vtk.VTK_UNSIGNED_CHAR
|
|
||||||
VTKdata = (VTKdata*255).astype(int) # translate to 0..255 UCHAR
|
|
||||||
elif datatype == 'tensor':
|
|
||||||
VTKdata[:,1] = VTKdata[:,3] = 0.5*(VTKdata[:,1]+VTKdata[:,3])
|
|
||||||
VTKdata[:,2] = VTKdata[:,6] = 0.5*(VTKdata[:,2]+VTKdata[:,6])
|
|
||||||
VTKdata[:,5] = VTKdata[:,7] = 0.5*(VTKdata[:,5]+VTKdata[:,7])
|
|
||||||
|
|
||||||
VTKarray[me] = numpy_support.numpy_to_vtk(num_array=VTKdata,deep=True,array_type=VTKtype)
|
|
||||||
VTKarray[me].SetName(me)
|
|
||||||
|
|
||||||
table.close() # close input ASCII table
|
|
||||||
|
|
||||||
# ------------------------------------------ add data ---------------------------------------
|
# ------------------------------------------ add data ---------------------------------------
|
||||||
|
|
||||||
|
@ -166,7 +129,6 @@ for name in filenames:
|
||||||
elif mode == 'point': rGrid.GetPointData().AddArray(VTKarray[me])
|
elif mode == 'point': rGrid.GetPointData().AddArray(VTKarray[me])
|
||||||
|
|
||||||
rGrid.Modified()
|
rGrid.Modified()
|
||||||
if vtk.VTK_MAJOR_VERSION <= 5: rGrid.Update()
|
|
||||||
|
|
||||||
# ------------------------------------------ output result ---------------------------------------
|
# ------------------------------------------ output result ---------------------------------------
|
||||||
|
|
||||||
|
@ -184,7 +146,7 @@ if options.render:
|
||||||
actor.SetMapper(mapper)
|
actor.SetMapper(mapper)
|
||||||
|
|
||||||
# Create the graphics structure. The renderer renders into the
|
# Create the graphics structure. The renderer renders into the
|
||||||
# render window. The render window interactor captures mouse events
|
# render window. The render window interactively captures mouse events
|
||||||
# and will perform appropriate camera or actor manipulation
|
# and will perform appropriate camera or actor manipulation
|
||||||
# depending on the nature of the events.
|
# depending on the nature of the events.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
|
@ -20,7 +21,8 @@ scriptID = ' '.join([scriptName,damask.version])
|
||||||
|
|
||||||
parser = OptionParser(option_class=damask.extendableOption,
|
parser = OptionParser(option_class=damask.extendableOption,
|
||||||
usage='%prog options [ASCIItable(s)]',
|
usage='%prog options [ASCIItable(s)]',
|
||||||
description = """Add scalar and RGB tuples from ASCIItable to existing VTK point cloud (.vtp).""",
|
description = "Add scalars, vectors, tensors, and/or an RGB tuple from ASCIItable "
|
||||||
|
+ "VTK point cloud (.vtp).",
|
||||||
version = scriptID)
|
version = scriptID)
|
||||||
|
|
||||||
parser.add_option( '--vtk',
|
parser.add_option( '--vtk',
|
||||||
|
@ -39,9 +41,10 @@ parser.add_option('-t', '--tensor',
|
||||||
dest = 'tensor',
|
dest = 'tensor',
|
||||||
action = 'extend', metavar = '<string LIST>',
|
action = 'extend', metavar = '<string LIST>',
|
||||||
help = 'tensor (3x3) value label(s)')
|
help = 'tensor (3x3) value label(s)')
|
||||||
parser.add_option('-c', '--color', dest='color', action='extend',
|
parser.add_option('-c', '--color',
|
||||||
metavar ='<string LIST>',
|
dest = 'color',
|
||||||
help = 'RGB color tuples')
|
action = 'extend', metavar = '<string LIST>',
|
||||||
|
help = 'RGB color tuple label')
|
||||||
|
|
||||||
parser.set_defaults(data = [],
|
parser.set_defaults(data = [],
|
||||||
tensor = [],
|
tensor = [],
|
||||||
|
@ -49,8 +52,9 @@ parser.set_defaults(data = [],
|
||||||
)
|
)
|
||||||
|
|
||||||
(options, filenames) = parser.parse_args()
|
(options, filenames) = parser.parse_args()
|
||||||
|
if filenames == []: filenames = [None]
|
||||||
|
|
||||||
if not options.vtk: parser.error('no VTK file specified.')
|
if not options.vtk: parser.error('No VTK file specified.')
|
||||||
if not os.path.exists(options.vtk): parser.error('VTK file does not exist.')
|
if not os.path.exists(options.vtk): parser.error('VTK file does not exist.')
|
||||||
|
|
||||||
vtk_file,vtk_ext = os.path.splitext(options.vtk)
|
vtk_file,vtk_ext = os.path.splitext(options.vtk)
|
||||||
|
@ -77,76 +81,28 @@ if Npoints != Ncells or Npoints != Nvertices:
|
||||||
|
|
||||||
damask.util.croak('{}: {} points/vertices/cells...'.format(options.vtk,Npoints))
|
damask.util.croak('{}: {} points/vertices/cells...'.format(options.vtk,Npoints))
|
||||||
|
|
||||||
# --- loop over input files -------------------------------------------------------------------------
|
|
||||||
|
|
||||||
if filenames == []: filenames = [None]
|
|
||||||
|
|
||||||
for name in filenames:
|
for name in filenames:
|
||||||
try: table = damask.ASCIItable(name = name,
|
damask.util.report(scriptName,name)
|
||||||
buffered = False,
|
|
||||||
readonly = True)
|
|
||||||
except: continue
|
|
||||||
damask.util.report(scriptName, name)
|
|
||||||
|
|
||||||
# --- interpret header ----------------------------------------------------------------------------
|
table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name)
|
||||||
|
|
||||||
table.head_read()
|
|
||||||
|
|
||||||
remarks = []
|
|
||||||
errors = []
|
|
||||||
VTKarray = {}
|
VTKarray = {}
|
||||||
active = defaultdict(list)
|
for data in options.data:
|
||||||
|
VTKarray[data] = numpy_support.numpy_to_vtk(table.get(data).copy(),
|
||||||
|
deep=True,array_type=vtk.VTK_DOUBLE)
|
||||||
|
VTKarray[data].SetName(data)
|
||||||
|
|
||||||
|
for color in options.color:
|
||||||
|
VTKarray[color] = numpy_support.numpy_to_vtk((table.get(color)*255).astype(int).copy(),
|
||||||
|
deep=True,array_type=vtk.VTK_UNSIGNED_CHAR)
|
||||||
|
VTKarray[color].SetName(color)
|
||||||
|
|
||||||
for datatype,dimension,label in [['data',0,options.data],
|
for tensor in options.tensor:
|
||||||
['tensor',9,options.tensor],
|
data = damask.mechanics.symmetric(table.get(tensor).reshape((-1,3,3))).reshape((-1,9))
|
||||||
['color' ,3,options.color],
|
VTKarray[tensor] = numpy_support.numpy_to_vtk(data.copy(),
|
||||||
]:
|
deep=True,array_type=vtk.VTK_DOUBLE)
|
||||||
for i,dim in enumerate(table.label_dimension(label)):
|
VTKarray[tensor].SetName(tensor)
|
||||||
me = label[i]
|
|
||||||
if dim == -1: remarks.append('{} "{}" not found...'.format(datatype,me))
|
|
||||||
elif dimension > 0 \
|
|
||||||
and dim != dimension: remarks.append('"{}" not of dimension {}...'.format(me,dimension))
|
|
||||||
else:
|
|
||||||
remarks.append('adding {}{} "{}"...'.format(datatype if dim > 1 else 'scalar',
|
|
||||||
'' if dimension > 0 or dim == 1 else '[{}]'.format(dim),
|
|
||||||
me))
|
|
||||||
active[datatype].append(me)
|
|
||||||
|
|
||||||
if remarks != []: damask.util.croak(remarks)
|
|
||||||
if errors != []:
|
|
||||||
damask.util.croak(errors)
|
|
||||||
table.close(dismiss = True)
|
|
||||||
continue
|
|
||||||
|
|
||||||
# --------------------------------------- process and add data -----------------------------------
|
|
||||||
|
|
||||||
table.data_readArray([item for sublist in active.values() for item in sublist]) # read all requested data
|
|
||||||
|
|
||||||
for datatype,labels in active.items(): # loop over scalar,color
|
|
||||||
for me in labels: # loop over all requested items
|
|
||||||
VTKtype = vtk.VTK_DOUBLE
|
|
||||||
VTKdata = table.data[:, table.label_indexrange(me)].copy() # copy to force contiguous layout
|
|
||||||
|
|
||||||
if datatype == 'color':
|
|
||||||
VTKtype = vtk.VTK_UNSIGNED_CHAR
|
|
||||||
VTKdata = (VTKdata*255).astype(int) # translate to 0..255 UCHAR
|
|
||||||
elif datatype == 'tensor':
|
|
||||||
VTKdata[:,1] = VTKdata[:,3] = 0.5*(VTKdata[:,1]+VTKdata[:,3])
|
|
||||||
VTKdata[:,2] = VTKdata[:,6] = 0.5*(VTKdata[:,2]+VTKdata[:,6])
|
|
||||||
VTKdata[:,5] = VTKdata[:,7] = 0.5*(VTKdata[:,5]+VTKdata[:,7])
|
|
||||||
|
|
||||||
VTKarray[me] = numpy_support.numpy_to_vtk(num_array=VTKdata,deep=True,array_type=VTKtype)
|
|
||||||
VTKarray[me].SetName(me)
|
|
||||||
|
|
||||||
if datatype == 'color':
|
|
||||||
Polydata.GetPointData().SetScalars(VTKarray[me])
|
|
||||||
Polydata.GetCellData().SetScalars(VTKarray[me])
|
|
||||||
else:
|
|
||||||
Polydata.GetPointData().AddArray(VTKarray[me])
|
|
||||||
Polydata.GetCellData().AddArray(VTKarray[me])
|
|
||||||
|
|
||||||
|
|
||||||
table.input_close() # close input ASCII table
|
|
||||||
|
|
||||||
# ------------------------------------------ output result ---------------------------------------
|
# ------------------------------------------ output result ---------------------------------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue