paraview源碼分析 和源碼跟蹤

百度和google之後,發現本身很孤單,只有本身在研究paraview源碼,如下只爲後來人和本身有共同興趣愛好的人共勉之。qq:569979266.lost&last架構

若是你對paraview的架構毫無頭緒,建議你能夠將pqPipelineApp設爲啓動項,而後逐步跟蹤app

84181a794cef7cb0ab7fd&690

ob->createFilter("filters", "Clip", wavelet);
  /// Called when the action is triggered.

  virtual void onTriggered(const QString& group, const QString& name)
    { pqSourcesMenuReaction::createSource(group, name); }

QObject::connect(
    menuManager, SIGNAL(triggered(const QString&, const QString&)),
    this, SLOT(onTriggered(const QString&, const QString&)));

pqSourcesMenuReaction

void pqParaViewMenuBuilders::buildSourcesMenu(QMenu&  menu,

void pqObjectInspectorWidget::accept()

void pqObjectPanel::accept()

void pqProxy::setModifiedState(ModifiedState modified)

QObject::connect(this->CurrentPanel->referenceProxy(),
      SIGNAL(modifiedStateChanged(pqServerManagerModelItem*)),
      this, SLOT(updateAcceptState()));

//-----------------------------------------------------------------------------
void pqObjectInspectorWidget::updateAcceptState()

//-----------------------------------------------------------------------------
void pqObjectInspectorWidget::canAccept(bool status)

this->connect(this->AcceptButton,
                  SIGNAL(clicked()),
                  applyPropertiesManager,
                  SLOT(applyProperties())); 綁定apply按鈕一個事件 applyProperties()按下執行

void pqApplyPropertiesManager::applyProperties()

this->connect(applyPropertiesManager, 繼續執行 accept()
                  SIGNAL(apply()),
                  this,
                  SLOT(accept()));

//-----------------------------------------------------------------------------
void pqPipelineFilter::hideInputIfRequired(pqView* view)

//-----------------------------------------------------------------------------
void pqObjectInspectorWidget::show(pqPipelineSource* source)

//-----------------------------------------------------------------------------
void pqObjectInspectorWidget::accept()

//-----------------------------------------------------------------------------
/// accept the changes made to the properties
/// changes will be propogated down to the server manager
void pqProxyPanel::accept()
{


//-----------------------------------------------------------------------------
void pqPropertyManager::accept()
{

vtkSMProxy* vtkSMSessionProxyManager::NewProxy(vtkPVXMLElement* pelement,
                                        const char* groupname,
                                        const char* proxyname,
                                        const char* subProxyName)
{

object = vtkInstantiator::CreateInstance(cname.str().c_str());


//----------------------------------------------------------------------------
vtkObject* vtkInstantiator::CreateInstance(const char* className)
{
  CreateFunction function = vtkInstantiator::CreatorTable->Find(className);  函數指針
  if(function) { return function(); }
  return 0;
}

vtkInstantiator::RegisterInstantiator("vtkCutter", vtkInstantiatorvtkCutterNew);註冊 函數指針
這樣調用的時候能夠直接經過類名,調用new 函數

vtkClientServerStream

UpdateVTKObjects

UpdateVTKObjects

vtkClientServerInterpreter


//-----------------------------------------------------------------------------
pqPipelineSource* pqObjectBuilder::createFilter(
  const QString& group, const QString& name,
  QMap<QString, QList<pqOutputPort*> > namedInputs,
ide