Как я могу использовать SaveData для записи файла ASCII в ParaView 3.98.1?

#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() выполняет это, но оно выполняет свою работу.