from paraview import simple
import os, json
# -----------------------------------------------------------------------------
[docs]def getAllNames():
actorNameMapping = {}
srcs = simple.GetSources()
duplicates = {}
for key, val in srcs.items():
# Prevent name duplication
nameToUse = key[0]
if nameToUse in duplicates:
count = 1
newName = "%s (%d)" % (nameToUse, count)
while newName in duplicates:
count += 1
newName = "%s (%d)" % (nameToUse, count)
nameToUse = newName
duplicates[nameToUse] = True
representation = simple.GetRepresentation(val)
if representation:
vtkRepInstance = representation.GetClientSideObject()
if "GetActiveRepresentation" in dir(vtkRepInstance):
actorRep = vtkRepInstance.GetActiveRepresentation().GetActor()
actorNameMapping[nameToUse] = actorRep
return actorNameMapping
# -----------------------------------------------------------------------------
[docs]def getRenameMap():
renameMap = {}
names = getAllNames()
view = simple.GetActiveView()
renderer = view.GetClientSideObject().GetRenderer()
viewProps = renderer.GetViewProps()
volumes = renderer.GetVolumes()
idx = 1
for viewProp in viewProps:
if not viewProp.IsA("vtkActor"):
continue
if not viewProp.GetVisibility():
continue
# The mapping will fail for multiblock that are composed of several blocks
# Merge block should be used to solve the renaming issue for now
# as the id is based on the a valid block vs representation.
strIdx = "%s" % idx
# Prop is valid if we can find it in the current sources
for name, actor in names.items():
if viewProp == actor:
renameMap[strIdx] = name
idx += 1
break
for volume in volumes:
if not volume.IsA("vtkVolume"):
continue
if not volume.GetVisibility():
continue
strIdx = "%s" % idx
for name, actor in names.items():
if viewProp == actor:
renameMap[strIdx] = name
idx += 1
break
return renameMap
# -----------------------------------------------------------------------------
[docs]def applyParaViewNaming(directoryPath):
renameMap = getRenameMap()
scene = None
filePath = os.path.join(directoryPath, "index.json")
with open(filePath) as file:
scene = json.load(file)
for item in scene["scene"]:
if item["name"] in renameMap:
item["name"] = renameMap[item["name"]]
with open(filePath, "w") as file:
file.write(json.dumps(scene, indent=2))