vtkSTLReader仅读取执行文件夹中的文件

方位角

注意:该问题无效,我犯了一个完全不同的错误,请参阅最后的编辑。

我只想使用vtkSTLReader类读取STL文件。我的代码如下所示:

        vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();
        reader->SetFileName(path.c_str());
        reader->Update();
        vtkSmartPointer<vtkPolyData> poly_data = reader->GetOutput();

然后代码继续显示多边形数据。

这在某种程度上起作用照原样的代码将忽略path文件名之外的所有内容,然后在我执行程序的任何位置查找该文件。

例如,如果我喜欢在控制台中调用path = /home/local/users/myusername/file.stl该程序/some_path/somefolder/myprogram时将其放置在中/some_path/,则该程序仅在(且仅)在有文件的副本时才有效/some_path/file.stl
如果我改为从内部执行程序/some_path/somefolder,则只有在有程序的情况下,它才有效/some_path/somefolder/file.stl

我什至去尝试了如果添加一行代码会发生什么情况

        path = "/dsgsdmklgmoeg/" + path;

结果完全一样。

正如我的路径所暗示的,我在Linux下工作。
我尝试说明上面的绝对路径,从执行位置开始的相对路径以及从可执行文件开始的相对路径(以防万一)。
对于相对路径,我尝试了各种我认为可能需要的变体,带前导./,有无前导/
对于绝对路径,我尝试将所有斜杠替换为反斜杠,因为它可能会使用Windows样式路径。

我意识到一种快速的解决方法是将文件简单地复制到所需的位置,但这肯定不是永久的解决方案。

有人对此有经验吗?这是vtk的特点吗?
如果这很重要,我使用vtk 5.6.1(由于某些兼容性要求,无法切换到更高版本)。

编辑:我意识到,我做了一个很简单的错误,而不是path.c_str()file.c_str()在我的原代码,有file是从一个变量path组装。键入上面的代码时我没有犯错,使问题无效。

舍夫

出于好奇,我深入研究了github。

这是我发现的:

VTK/vtkSTLReader.cxx在v5.6.1int vtkSTLReader::RequestData(),第96 ... 110行):

  if (!this->FileName || (this->FileName && (0==strlen(this->FileName))))
    {
    vtkErrorMacro(<<"A FileName must be specified.");
    this->SetErrorCode( vtkErrorCode::NoFileNameError );
    return 0;
    }

  // Initialize
  //
  if ((fp = fopen(this->FileName, "r")) == NULL)
    {
    vtkErrorMacro(<< "File " << this->FileName << " not found");
    this->SetErrorCode( vtkErrorCode::CannotOpenFileError );
    return 0;
    }

VTK/vtkSTLReader.h在v5.6.1(第57 ... 60行):

  // Description:
  // Specify file name of stereo lithography file.
  vtkSetStringMacro(FileName);
  vtkGetStringMacro(FileName);

VTK/vtkSetGet.h在v5.6.1(第88 ... 122行):

//
// Set character string.  Creates member Set"name"() 
// (e.g., SetFilename(char *));
//
#define vtkSetStringMacro(name) \
virtual void Set##name (const char* _arg) \
  { \
  vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting " << #name " to " << (_arg?_arg:"(null)") ); \
  if ( this->name == NULL && _arg == NULL) { return;} \
  if ( this->name && _arg && (!strcmp(this->name,_arg))) { return;} \
  if (this->name) { delete [] this->name; } \
  if (_arg) \
    { \
    size_t n = strlen(_arg) + 1; \
    char *cp1 =  new char[n]; \
    const char *cp2 = (_arg); \
    this->name = cp1; \
    do { *cp1++ = *cp2++; } while ( --n ); \
    } \
   else \
    { \
    this->name = NULL; \
    } \
  this->Modified(); \
  } 

//
// Get character string.  Creates member Get"name"() 
// (e.g., char *GetFilename());
//
#define vtkGetStringMacro(name) \
virtual char* Get##name () { \
  vtkDebugMacro(<< this->GetClassName() << " (" << this << "): returning " << #name " of " << (this->name?this->name:"(null)")); \
  return this->name; \
  } 

查看这段代码(恕我直言,这是OP发行的相关代码),我找不到任何提示,指出从给出的文件路径中删除了目录SetFileName()

我不知道实际上是什么会导致OP问题,即仅考虑当前目录中的文件。但是,我很难相信VTK可以为此受到指责。

因此,我建议在上方和下方进行进一步搜索:

  • 上图:提供的路径SetFileName()正确吗?(简单的部分)
  • 下图:这种奇怪的行为是由fopen()(或在中称为fopen())引起的吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何仅读取 Region 文件夹中的 Sales 文件?

来自分类Dev

查找包含可执行文件的文件夹

来自分类Dev

设置可执行文件的文件夹路径

来自分类Dev

在压缩文件夹工具中编辑可执行文件,而不是运行文件

来自分类Dev

批处理文件以执行文件夹中的所有.exe

来自分类Dev

如何使用Powershell脚本执行文件夹中的最新文件(刚刚下载)

来自分类Dev

如何从其他文件夹中存储的C ++运行linux可执行文件

来自分类Dev

如何使用CMake将测试可执行文件放入单独的文件夹中?

来自分类Dev

路径中子文件夹中的可执行文件

来自分类Dev

有没有办法在Windows中自动执行文件夹优化类型?

来自分类Dev

将脚本转换为可执行文件,包括远程文件夹中的数据文件

来自分类Dev

运行文件夹中的每个文件

来自分类Dev

使用 Docker 运行文件夹中的每个文件

来自分类Dev

将可执行文件移动到$ PATH中的另一个文件夹后,找不到可执行文件

来自分类Dev

读取多个文件夹中的图像

来自分类Dev

从资产文件夹中读取音乐

来自分类Dev

在找到的文件夹中查找并执行

来自分类Dev

在找到的文件夹中查找并执行

来自分类Dev

为什么Windows C#项目在.nuget文件夹中包含nuget可执行文件?

来自分类Dev

如何在打字稿eslint中强制执行文件名和文件夹名称约定?

来自分类Dev

将“ TrustedInstaller”恢复为Windows文件夹中可执行文件的所有者

来自分类Dev

命令提示符:引用不同文件夹中的可执行文件

来自分类Dev

批处理文件以使用计时器执行文件夹中的所有.exe

来自分类Dev

批量仅读取/保存文件夹中的最后一张图像

来自分类Dev

如何仅读取目录中的前5个文件夹:Spark

来自分类Dev

运行文件夹中的所有TCL脚本

来自分类Dev

在Python中整体运行文件夹/目录

来自分类Dev

如何读取Bash Shell中多个文件夹和子文件夹中的文件

来自分类Dev

从bash脚本中的文件夹中执行随机文件

Related 相关文章

  1. 1

    如何仅读取 Region 文件夹中的 Sales 文件?

  2. 2

    查找包含可执行文件的文件夹

  3. 3

    设置可执行文件的文件夹路径

  4. 4

    在压缩文件夹工具中编辑可执行文件,而不是运行文件

  5. 5

    批处理文件以执行文件夹中的所有.exe

  6. 6

    如何使用Powershell脚本执行文件夹中的最新文件(刚刚下载)

  7. 7

    如何从其他文件夹中存储的C ++运行linux可执行文件

  8. 8

    如何使用CMake将测试可执行文件放入单独的文件夹中?

  9. 9

    路径中子文件夹中的可执行文件

  10. 10

    有没有办法在Windows中自动执行文件夹优化类型?

  11. 11

    将脚本转换为可执行文件,包括远程文件夹中的数据文件

  12. 12

    运行文件夹中的每个文件

  13. 13

    使用 Docker 运行文件夹中的每个文件

  14. 14

    将可执行文件移动到$ PATH中的另一个文件夹后,找不到可执行文件

  15. 15

    读取多个文件夹中的图像

  16. 16

    从资产文件夹中读取音乐

  17. 17

    在找到的文件夹中查找并执行

  18. 18

    在找到的文件夹中查找并执行

  19. 19

    为什么Windows C#项目在.nuget文件夹中包含nuget可执行文件?

  20. 20

    如何在打字稿eslint中强制执行文件名和文件夹名称约定?

  21. 21

    将“ TrustedInstaller”恢复为Windows文件夹中可执行文件的所有者

  22. 22

    命令提示符:引用不同文件夹中的可执行文件

  23. 23

    批处理文件以使用计时器执行文件夹中的所有.exe

  24. 24

    批量仅读取/保存文件夹中的最后一张图像

  25. 25

    如何仅读取目录中的前5个文件夹:Spark

  26. 26

    运行文件夹中的所有TCL脚本

  27. 27

    在Python中整体运行文件夹/目录

  28. 28

    如何读取Bash Shell中多个文件夹和子文件夹中的文件

  29. 29

    从bash脚本中的文件夹中执行随机文件

热门标签

归档