0

我正在为一个旧项目编写自动化脚本,我需要Paraview 3.98.1的一些帮助pvpython。此版本中的功能不存在。我在这里找到了它的实现并将其移至我的代码中。如何将文件保存为 ASCII?像调用它一样将我的文件保存为二进制文件(尴尬的行为)。SaveData()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
    
# -----------------------------------------------------------------------------
4

1 回答 1

0

这个问题在这里得到了回答(也是我的帖子)。我使用 SaveData() 使用我需要的代理保存二进制文件,然后使用 DataSetWriter() 将我的 FileType 更改为 ASCII。这不是一个漂亮的解决方案,因为 SaveData() 应该这样做,但它确实完成了工作。

于 2020-09-10T20:13:14.157 回答