mirror of
https://github.com/DreamSourceLab/DSView.git
synced 2025-02-02 13:52:55 +08:00
fix: the math trace got an error factor
This commit is contained in:
parent
c563688b52
commit
1028a01cd8
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -386,6 +386,9 @@ public slots:
|
||||
void timebase_changed();
|
||||
// --
|
||||
void vDial_updated();
|
||||
|
||||
void dso_factor_updated();
|
||||
|
||||
// --
|
||||
void update_hori_res();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user