Итеративное рисование TEllipse в ROOT

Я работаю над решением проблемы, в которой я хотел бы нанести несколько эллипсов на 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 ответ

Решение

Вероятно, вы уже выяснили / отказались от этого, но здесь идет:

По умолчанию Draw() метод перезаписывает все, что есть на текущем TPad. Вы хотите дать ему "same" опция:

e->Draw("same");

Другие вопросы по тегам