fix: the math trace got an error factor

This commit is contained in:
dreamsourcelabTAI 2024-04-07 20:33:49 +08:00
parent c563688b52
commit 1028a01cd8
7 changed files with 58 additions and 4 deletions

View File

@ -164,13 +164,16 @@ uint64_t MathStack::default_vDialValue()
uint64_t value = 0;
view::dslDial *dial1 = _dsoSig1->get_vDial();
view::dslDial *dial2 = _dsoSig2->get_vDial();
const uint64_t dial1_value = dial1->get_value() * dial1->get_factor();
const uint64_t dial2_value = dial2->get_value() * dial2->get_factor();
const uint64_t dial1_value = dial1->get_value();
const uint64_t dial2_value = dial2->get_value();
const uint64_t v1 = dial1_value * dial1->get_factor();
const uint64_t v2 = dial2_value * dial2->get_factor();
switch(_type) {
case MATH_ADD:
case MATH_SUB:
value = max(dial1_value, dial2_value);
value = v1 > v2 ? dial1_value : dial2_value;
break;
case MATH_MUL:
value = dial1_value * dial2_value / 1000.0;
@ -180,13 +183,47 @@ uint64_t MathStack::default_vDialValue()
break;
}
bool bFind = false;
for (int i = 0; i < vDialValueCount; i++) {
if (vDialValue[i] >= value) {
value = vDialValue[i];
bFind = true;
break;
}
}
if (!bFind){
value = vDialValue[vDialValueCount-1];
}
return value;
}
uint64_t MathStack::default_factor()
{
uint64_t value = 0;
view::dslDial *dial1 = _dsoSig1->get_vDial();
view::dslDial *dial2 = _dsoSig2->get_vDial();
uint64_t factor1 = dial1->get_factor();
uint64_t factor2 = dial1->get_factor();
const uint64_t dial1_value = dial1->get_value() * factor1;
const uint64_t dial2_value = dial2->get_value() * factor2;
switch(_type) {
case MATH_ADD:
case MATH_SUB:
value = dial1_value > dial2_value ? factor1 : factor2;
break;
case MATH_MUL:
value = factor1 * factor2;
break;
case MATH_DIV:
value = factor1 / factor2;
break;
}
return value;
}

View File

@ -116,6 +116,8 @@ public:
void enable_envelope(bool enable);
uint64_t default_vDialValue();
uint64_t default_factor();
view::dslDial *get_vDial();
QString get_unit(int level);
double get_math_scale();

View File

@ -80,7 +80,7 @@ void dslDial::paint(QPainter &p, QRectF dialRect, QColor dialColor, const QPoint
}
p.restore();
// draw value
uint64_t displayValue = _value[_sel]*_factor;
uint64_t displayValue = _value[_sel];
uint64_t displayIndex = 0;
while(displayValue / _step >= 1) {
displayValue = displayValue / _step;

View File

@ -1178,12 +1178,15 @@ bool DsoSignal::mouse_press(int right, const QPoint pt)
}
else if (x1_rect.contains(pt)) {
set_factor(1);
_view->dso_factor_updated();
}
else if (x10_rect.contains(pt)) {
set_factor(10);
_view->dso_factor_updated();
}
else if (x100_rect.contains(pt)) {
set_factor(100);
_view->dso_factor_updated();
}
else {
return false;

View File

@ -99,6 +99,7 @@ int MathTrace::get_name_width()
void MathTrace::update_vDial()
{
_vDial->set_value(_math_stack->default_vDialValue());
_vDial->set_factor(_math_stack->default_factor());
}
void MathTrace::go_vDialPre()

View File

@ -1183,6 +1183,14 @@ void View::vDial_updated()
}
}
void View::dso_factor_updated()
{
auto math_trace = _session->get_math_trace();
if (math_trace && math_trace->enabled()) {
math_trace->update_vDial();
}
}
// -- lissajous figure
void View::show_lissajous(bool show)
{

View File

@ -386,6 +386,9 @@ public slots:
void timebase_changed();
// --
void vDial_updated();
void dso_factor_updated();
// --
void update_hori_res();