25 auto step =
new QDoubleSpinBox{
this};
26 step->setRange(0.0001, 0.3);
27 step->setValue(m_step);
28 step->setSingleStep(0.001);
31 auto lay =
static_cast<QBoxLayout*
>(this->layout());
32 auto controls =
new QFormLayout;
33 controls->addRow(
"Step (smaller is more precise)", step);
34 lay->insertLayout(2, controls);
36 step, qOverload<double>(&QDoubleSpinBox::valueChanged),
this,
37 [
this](
double step) { m_step = step; });
39 expr.add_variable(
"t", t);
40 expr.add_variable(
"x", x);
41 expr.add_variable(
"y", y);
43 expr.register_symbol_table();
45 setText(R
"_(x := cos(2 * pi * t);
50 void on_accepted()
override
52 this->setError(0, QString{});
53 auto txt = this->text().toStdString();
54 bool ok = expr.set_expression(txt);
57 setError(0, QString::fromStdString(expr.error()));
62 ossia::spline_data data;
64 auto add_point = [&] {
66 if(expr.interrupted())
67 error = tr(
"The expression runs for too long (a loop does not end)");
68 else if(!(std::isfinite(x) && std::isfinite(y)))
69 error = tr(
"The expression gives an undefined point at t = %1").arg(t);
71 data.points.push_back({x, y});
72 return error.isEmpty();
75 for(t = 0.; t < 1. && complete; t += m_step)
76 complete = add_point();
80 complete = add_point();
89 m_model, std::move(data));
94 ossia::math_expression expr;
Definition DocumentContext.hpp:18