在 ROOT 中迭代绘制 TEllipse
Iteratively drawing TEllipse in ROOT
我正在努力解决我想在 TCanvas 上绘制多个椭圆的问题。我通过链接适当的 ROOT 库在 ROOT 之外构建了程序。我可以通过将椭圆硬编码到 main 中来成功地将一个椭圆绘制到 canvas,但是当我尝试调整它以绘制一系列椭圆时,程序输出一个空的 canvas.
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?非常感谢所有帮助:)
看来您现在已经 out/given 想到了这一点,但这里是:
默认情况下,Draw()
方法会覆盖当前 TPad 上的任何内容。你想给它 "same"
选项:
e->Draw("same");
我正在努力解决我想在 TCanvas 上绘制多个椭圆的问题。我通过链接适当的 ROOT 库在 ROOT 之外构建了程序。我可以通过将椭圆硬编码到 main 中来成功地将一个椭圆绘制到 canvas,但是当我尝试调整它以绘制一系列椭圆时,程序输出一个空的 canvas.
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?非常感谢所有帮助:)
看来您现在已经 out/given 想到了这一点,但这里是:
默认情况下,Draw()
方法会覆盖当前 TPad 上的任何内容。你想给它 "same"
选项:
e->Draw("same");