我在使用Python中的VTK读取OBJ文件时遇到了一个奇怪的问题。下面的代码示例对我来说很好。
reader = vtk.vtkOBJReader()
reader.SetFileName('cube.obj')
reader.Update()
inputP = reader.GetOutput()
app = QtGui.QApplication(sys.argv)
window = MainWindow(inputP)
sys.exit(app.exec_())
但如果我首先初始化 QApplication ,那么 vtkOBJReader 会抛出错误消息:
错误:在/build/vtk/src/VTK-6.1.0/IO/Geometry/vtkOBJReader.cxx,第192行 vtkOBJReader(0x56396fd14fa0):读取错误' v'在第5行
不起作用的示例代码如下所示:
app = QtGui.QApplication(sys.argv)
reader = vtk.vtkOBJReader()
reader.SetFileName('cube.obj')
reader.Update()
inputP = reader.GetOutput()
window = MainWindow(inputP)
sys.exit(app.exec_())
如果我用C ++编写这个程序,我会遇到同样的问题。 您有任何建议吗,如何强制 vtkOBJReader 在QT应用内部工作?
答案 0 :(得分:3)
我遇到了同样的问题并且正在研究vtkObjectReader(链接:https://github.com/Kitware/VTK/blob/master/IO/Geometry/vtkOBJReader.cxx#L264)中的代码,您可以看到此代码段中生成的错误消息:
// this is a vertex definition, expect three floats, separated by whitespace:
if (sscanf(pLine, "%f %f %f", xyz, xyz+1, xyz+2) == 3)
{
points->InsertNextPoint(xyz);
numPoints++;
}
else
{
vtkErrorMacro(<<"Error reading 'v' at line " << lineNr);
everything_ok = false;
}
问题是由于sscanf在qt初始化之前或之后调用它会产生不同的输出。 有了这些信息,我在这里找到了解决方案:Why does Qt change behaviour of sscanf()?
使用qt,用于解析该行的语言环境与您的系统相同(我的是意大利语,因此它期待&#34;,&#34;作为小数分频器而不是&#34;。&#34;所以它无法识别浮动类型。)
如果在定义QApplication之后更改了语言环境,它可以按预期工作,即:
QApplication a(argc, argv);
setlocale(LC_NUMERIC,"C");
答案 1 :(得分:0)
嗯,这可能对某人有所帮助。在初始化QtGui.QApplication(sys.argv)之前加载目标文件。