在ROOT中迭代绘制TEllipse

时间:2016-01-20 05:40:49

标签: c++ pointers root-framework

我正在努力解决一个问题,我想在TCanvas上绘制一些椭圆。我通过链接相应的ROOT库在ROOT之外构建了程序。我可以通过将其硬编码到主画面中成功地将单个椭圆绘制到画布上,但是当我尝试调整它以绘制一系列椭圆时,程序会输出一个空画布。

extern void InitGui();
VoidFuncPtr_t initfuncs[] = { InitGui, 0 };
int Error;
TROOT root("plot", "Plot", initfuncs);

int main(int argc, char **argv) {
  TApplication *app = new TApplication("App", &argc, argv);
  TCanvas *c = new TCanvas();
  c->Range(0,0,100,100);
  TEllipse *e;

  while(getline(myFile1, coordinate)) {
    split(myVector, coordinate, is_any_of(" "));
    arr[0] = myVector.at(0);
    arr[1] = myVector.at(1);
    getline(myFile2, arr[2]);
    e = plotZone(stod(arr[0]), stod(arr[1]), stod(arr[2]));
    e->Draw();
    c->Update();
  }

  c->Show();
  app->Run();
  delete app;
  return 0;
}

TEllipse * plotZone(double x, double y, double r) {
  TEllipse *e = new TEllipse(x, y, r, r);
  e->SetFillColor(38);
  e->SetFillStyle(3003);

  return e;
}

我真的只是想知道为什么将TEllipse传递回main的行为会阻止它被渲染,或者也许我正在做Draw​​ / Update错误?非常感谢所有帮助:)

1 个答案:

答案 0 :(得分:1)

现在看来你可能已经想出/放弃了,但是这里有:

默认情况下,Draw()方法会覆盖当前TPad上的任何内容。你想给它"same"选项:

e->Draw("same");