#ascii #vtk #paraview #pvpython
#ascii #vtk #paraview #pvpython
Вопрос:
Я пишу сценарий автоматизации для старого проекта, и мне нужна помощь с pvpython
из Paraview 3.98.1. Функция SaveData()
в этой версии не существует. Я нашел его реализацию здесь и перенес ее в свой код. Как я могу сохранить файл в формате ASCII? Вызов этого типа SaveData(filename, proxy=px, FileType='Ascii')
сохраняет мои файлы в виде двоичных файлов (неудобное поведение).
Мне нужна эта версия, потому что некоторые из моих кодов в конвейере сценариев обрабатывают очень специфические vtk
файлы. Использование SaveData()
функции последних версий привело к созданию разных метаданных в моих конечных файлах, и когда я их обрабатываю, это приводит к уничтожению моих результатов. На данный момент проще использовать более старую версию Paraview, чем изменять все мои коды.
Редактировать:
Веб-сайт сейчас не работает, но это было вчера. Может быть, это внутренняя проблема? В любом случае, код прилагается ниже.
# -----------------------------------------------------------------------------
def SetProperties(proxy=None, **params):
"""Sets one or more properties of the given pipeline object. If an argument
is not provided, the active source is used. Pass a list of property_name=value
pairs to this function to set property values. For example::
SetProperties(Center=[1, 2, 3], Radius=3.5)
"""
if not proxy:
proxy = active_objects.source
properties = proxy.ListProperties()
for param in params.keys():
pyproxy = servermanager._getPyProxy(proxy)
pyproxy.__setattr__(param, params[param])
# -----------------------------------------------------------------------------
def CreateWriter(filename, proxy=None, **extraArgs):
"""Creates a writer that can write the data produced by the source proxy in
the given file format (identified by the extension). If no source is
provided, then the active source is used. This doesn't actually write the
data, it simply creates the writer and returns it."""
if not filename:
raise RuntimeError ("filename must be specified")
session = servermanager.ActiveConnection.Session
writer_factory = servermanager.vtkSMProxyManager.GetProxyManager().GetWriterFactory()
if writer_factory.GetNumberOfRegisteredPrototypes() == 0:
writer_factory.UpdateAvailableWriters()
if not proxy:
proxy = GetActiveSource()
if not proxy:
raise RuntimeError ("Could not locate source to write")
writer_proxy = writer_factory.CreateWriter(filename, proxy.SMProxy, proxy.Port)
writer_proxy.UnRegister(None)
pyproxy = servermanager._getPyProxy(writer_proxy)
if pyproxy and extraArgs:
SetProperties(pyproxy, **extraArgs)
return pyproxy
# -----------------------------------------------------------------------------
def SaveData(filename, proxy=None, **extraArgs):
"""Save data produced by 'proxy' in a file. If no proxy is specified the
active source is used. Properties to configure the writer can be passed in
as keyword arguments. Example usage::
SaveData("sample.pvtp", source0)
SaveData("sample.csv", FieldAssociation="Points")
"""
writer = CreateWriter(filename, proxy, **extraArgs)
if not writer:
raise RuntimeError ("Could not create writer for specified file or data type")
writer.UpdateVTKObjects()
writer.UpdatePipeline()
del writer
# -----------------------------------------------------------------------------
Комментарии:
1. уже ответил здесь: discourse.paraview.org/t /…
2. Да, это тоже мой пост.
Ответ №1:
Ответ на вопрос есть здесь (также мой пост). Я использовал SaveData() для сохранения двоичного файла с нужным мне прокси, а затем использовал DataSetWriter() для изменения моего типа файла на ASCII. Это не очень красивое решение, поскольку предполагается, что SaveData() выполняет это, но оно выполняет свою работу.