下面接着上一面继续,上面那个函数最后调用了
vtkPVSessionCore::ExecuteStreamInternal
void vtkPVSessionCore::ExecuteStreamInternal(const vtkClientServerStream& stream,
bool ignore_errors)
{
LOG( << "----------------------------------------------------------------\n"
<< "ExecuteStream\n"
<< stream.StreamToString()
<< "----------------------------------------------------------------\n");
this->Interpreter->ClearLastResult();//最后结果重置
int temp = this->Interpreter->GetGlobalWarningDisplay();
this->Interpreter->SetGlobalWarningDisplay(ignore_errors ? 0 : 1);
this->Interpreter->ProcessStream(stream);//Interpreter是vtkClientServerInterpreter
this->Interpreter->SetGlobalWarningDisplay(temp);
}
上面最后执行的四个函数,很显然又调用了vtkClientServerInterpreter类的实例Interpreter。
第一个函数,调用的是vtkClientServerInterpreter类的父类的函数,这个函数就是返回一个GetGlobalWarningDisplay量。让其等于temp
第二个函数,也是继承自父类vtkObject的函数,使其值为0或1。
第三个函数,ProcessStream(stream),调用的就是vtkClientServerInterpreter类的方法:
int vtkClientServerInterpreter::ProcessStream(const vtkClientServerStream& css)
{
for(int i=0; i < css.GetNumberOfMessages(); ++i)
{
if(!this->ProcessOneMessage(css, i))
{
return 0;
}
}
return 1;
}
我们再来回顾一下这条css的内容:
stream << vtkClientServerStream::Invoke
<< VTKOBJECT(this)
<< "StillRender"
<< vtkClientServerStream::End;
然后我们再看this->ProcessOneMessage这个函数:
vtkClientServerInterpreter::ProcessOneMessage(const vtkClientServerStream& css,
int message)
{
// Log the message.
if(this->LogStream)
{
*this->LogStream << "---------------------------------------"
<< "---------------------------------------\n";
*this->LogStream << "Processing ";
css.PrintMessage(*this->LogStream, message);
this->LogStream->flush();
}
// Look for known commands in the message.
int result = 0;
vtkClient