even with multiple selected graphs apply y axis pan/zoom only on master graph. Better checks/cleanups for load/unload raw file

This commit is contained in:
Stefan Frederik 2021-12-27 14:12:55 +01:00
parent 505801c49d
commit e111b2b9d6
3 changed files with 165 additions and 147 deletions

View File

@ -31,7 +31,7 @@ static int waves_selected()
if(!(xctx->ui_state & SELECTION) || !xctx->lastsel) return 0;
for(i=0; i<xctx->lastsel; i++) {
c = xctx->sel_array[i].col;
if(xctx->sel_array[i].type == xRECT && c == 2) {
if(xctx->sel_array[i].type == xRECT && c == GRIDLAYER) {
n = xctx->sel_array[i].n;
r = &xctx->rect[c][n];
if( (xctx->ui_state & GRAPHPAN) || POINTINSIDE(xctx->mousex, xctx->mousey, r->x1, r->y1, r->x2, r->y2) ) {
@ -198,7 +198,7 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
c = xctx->sel_array[i].col;
/* process only graph boxes */
if(xctx->sel_array[i].type == xRECT && c == 2) {
if(xctx->sel_array[i].type == xRECT && c == GRIDLAYER) {
xRect *r;
n = xctx->sel_array[i].n;
r = &xctx->rect[GRIDLAYER][n];
@ -240,7 +240,7 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
for(i=0; i<xctx->lastsel; i++) {
c = xctx->sel_array[i].col;
/* process only graph boxes */
if(xctx->sel_array[i].type == xRECT && c == 2) {
if(xctx->sel_array[i].type == xRECT && c == GRIDLAYER) {
xRect *r;
n = xctx->sel_array[i].n;
r = &xctx->rect[GRIDLAYER][n];
@ -267,51 +267,49 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
if(event == MotionNotify && (state & Button1Mask) && !xctx->graph_bottom) {
double delta;
if(xctx->graph_left) {
delta = (wy2 - wy1) / divy;
delta_threshold = 0.05;
if(fabs(xctx->my_double_save - xctx->mousey_snap) > fabs(cy * delta) * delta_threshold) {
yy1 = wy1 + (xctx->my_double_save - xctx->mousey_snap) / cy;
yy2 = wy2 + (xctx->my_double_save - xctx->mousey_snap) / cy;
if(i >= xctx->lastsel -1) { /* update saved mouse position after processing all graphs */
xctx->mx_double_save = xctx->mousex_snap;
xctx->my_double_save = xctx->mousey_snap;
if(n == xctx->graph_master) {
delta = (wy2 - wy1) / divy;
delta_threshold = 0.05;
if(fabs(xctx->my_double_save - xctx->mousey_snap) > fabs(cy * delta) * delta_threshold) {
yy1 = wy1 + (xctx->my_double_save - xctx->mousey_snap) / cy;
yy2 = wy2 + (xctx->my_double_save - xctx->mousey_snap) / cy;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1424, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1425, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
}
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1424, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1425, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
need_redraw = 1;
}
} else {
delta = (wx2 - wx1) / divx;
delta_threshold = 0.05;
if(fabs(xctx->mx_double_save - xctx->mousex_snap) > fabs(cx * delta) * delta_threshold) {
xx1 = wx1 + (xctx->mx_double_save - xctx->mousex_snap) / cx;
xx2 = wx2 + (xctx->mx_double_save - xctx->mousex_snap) / cx;
if(i >= xctx->lastsel -1) { /* update saved mouse position after processing all graphs */
xctx->mx_double_save = xctx->mousex_snap;
xctx->my_double_save = xctx->mousey_snap;
}
my_snprintf(s, S(s), "%g", xx1);
my_strdup(1410, &r->prop_ptr, subst_token(r->prop_ptr, "x1", s));
my_snprintf(s, S(s), "%g", xx2);
my_strdup(1411, &r->prop_ptr, subst_token(r->prop_ptr, "x2", s));
need_redraw = 1;
}
}
if(i >= xctx->lastsel -1) { /* update saved mouse position after processing all graphs */
xctx->mx_double_save = xctx->mousex_snap;
xctx->my_double_save = xctx->mousey_snap;
}
need_redraw = 1;
}
else if((button == Button5 && state == 0)) {
double delta;
if(xctx->graph_left) {
delta = (wy2 - wy1) / divy;
delta_threshold = 1.0;
yy1 = wy1 + delta * delta_threshold;
yy2 = wy2 + delta * delta_threshold;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1420, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1421, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
if(n == xctx->graph_master) {
delta = (wy2 - wy1) / divy;
delta_threshold = 1.0;
yy1 = wy1 + delta * delta_threshold;
yy2 = wy2 + delta * delta_threshold;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1420, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1421, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
}
} else {
delta = (wx2 - wx1) / divx;
delta_threshold = 1.0;
@ -328,17 +326,19 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
else if(key == XK_Left) {
double delta;
if(xctx->graph_left) {
double m = G_Y(xctx->mousey);
double a = m - wy1;
double b = wy2 -m;
double delta = (wy2 - wy1);
double var = delta * 0.1;
yy2 = wy2 + var * b / delta;
yy1 = wy1 - var * a / delta;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1451, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1448, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
if(n == xctx->graph_master) {
double m = G_Y(xctx->mousey);
double a = m - wy1;
double b = wy2 -m;
double delta = (wy2 - wy1);
double var = delta * 0.1;
yy2 = wy2 + var * b / delta;
yy1 = wy1 - var * a / delta;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1451, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1448, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
}
} else {
delta = (wx2 - wx1) / divx;
delta_threshold = 1.0;
@ -355,14 +355,16 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
else if(button == Button4 && state == 0) {
double delta;
if(xctx->graph_left) {
delta = (wy2 - wy1) / divy;
delta_threshold = 1.0;
yy1 = wy1 - delta * delta_threshold;
yy2 = wy2 - delta * delta_threshold;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1416, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1417, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
if(n == xctx->graph_master) {
delta = (wy2 - wy1) / divy;
delta_threshold = 1.0;
yy1 = wy1 - delta * delta_threshold;
yy2 = wy2 - delta * delta_threshold;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1416, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1417, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
}
} else {
delta = (wx2 - wx1) / divx;
delta_threshold = 1.0;
@ -379,17 +381,19 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
else if(key == XK_Right) {
double delta;
if(xctx->graph_left) {
double m = G_Y(xctx->mousey);
double a = m - wy1;
double b = wy2 -m;
double delta = (wy2 - wy1);
double var = delta * 0.1;
yy2 = wy2 - var * b / delta;
yy1 = wy1 + var * a / delta;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1433, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1439, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
if(n == xctx->graph_master) {
double m = G_Y(xctx->mousey);
double a = m - wy1;
double b = wy2 -m;
double delta = (wy2 - wy1);
double var = delta * 0.1;
yy2 = wy2 - var * b / delta;
yy1 = wy1 + var * a / delta;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1433, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1439, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
}
} else {
delta = (wx2 - wx1) / divx;
delta_threshold = 1.0;
@ -404,17 +408,19 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
}
else if(button == Button5 && state == ShiftMask) {
if(xctx->graph_left) {
double m = G_Y(xctx->mousey);
double a = m - wy1;
double b = wy2 -m;
double delta = (wy2 - wy1);
double var = delta * 0.1;
yy2 = wy2 + var * b / delta;
yy1 = wy1 - var * a / delta;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1447, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1436, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
if(n == xctx->graph_master) {
double m = G_Y(xctx->mousey);
double a = m - wy1;
double b = wy2 -m;
double delta = (wy2 - wy1);
double var = delta * 0.1;
yy2 = wy2 + var * b / delta;
yy1 = wy1 - var * a / delta;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1447, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1436, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
}
} else {
double m = G_X(xctx->mousex);
double a = m - wx1;
@ -434,14 +440,16 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
else if(key == XK_Down) {
double delta;
if(xctx->graph_left) {
delta = (wy2 - wy1) / divy;
delta_threshold = 1.0;
yy1 = wy1 - delta * delta_threshold;
yy2 = wy2 - delta * delta_threshold;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1434, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1435, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
if(n == xctx->graph_master) {
delta = (wy2 - wy1) / divy;
delta_threshold = 1.0;
yy1 = wy1 - delta * delta_threshold;
yy2 = wy2 - delta * delta_threshold;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1434, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1435, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
}
} else {
double m = G_X(xctx->mousex);
double a = m - wx1;
@ -459,17 +467,19 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
}
else if(button == Button4 && state == ShiftMask) {
if(xctx->graph_left) {
double m = G_Y(xctx->mousey);
double a = m - wy1;
double b = wy2 -m;
double delta = (wy2 - wy1);
double var = delta * 0.1;
yy2 = wy2 - var * b / delta;
yy1 = wy1 + var * a / delta;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1419, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1444, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
if(n == xctx->graph_master) {
double m = G_Y(xctx->mousey);
double a = m - wy1;
double b = wy2 -m;
double delta = (wy2 - wy1);
double var = delta * 0.1;
yy2 = wy2 - var * b / delta;
yy1 = wy1 + var * a / delta;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1419, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1444, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
}
} else {
double m = G_X(xctx->mousex);
double a = m - wx1;
@ -489,14 +499,16 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
else if(key == XK_Up) {
double delta;
if(xctx->graph_left) {
delta = (wy2 - wy1) / divy;
delta_threshold = 1.0;
yy1 = wy1 + delta * delta_threshold;
yy2 = wy2 + delta * delta_threshold;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1437, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1438, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
if(n == xctx->graph_master) {
delta = (wy2 - wy1) / divy;
delta_threshold = 1.0;
yy1 = wy1 + delta * delta_threshold;
yy2 = wy2 + delta * delta_threshold;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1437, &r->prop_ptr, subst_token(r->prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1438, &r->prop_ptr, subst_token(r->prop_ptr, "y2", s));
}
} else {
double m = G_X(xctx->mousex);
double a = m - wx1;

View File

@ -1610,17 +1610,20 @@ void free_rawfile(void)
{
int i;
if(!xctx->values) return;
for(i = 0 ; i < xctx->nvars; i++) {
my_free(510, &xctx->names[i]);
if(xctx->names) {
for(i = 0 ; i < xctx->nvars; i++) {
my_free(510, &xctx->names[i]);
}
my_free(968, &xctx->names);
}
for(i = 0 ; i < xctx->nvars; i++) {
my_free(512, &xctx->values[i]);
if(xctx->values) {
for(i = 0 ; i < xctx->nvars; i++) {
my_free(512, &xctx->values[i]);
}
my_free(528, &xctx->values);
}
my_free(1413, &xctx->npoints);
my_free(528, &xctx->values);
my_free(968, &xctx->names);
my_free(1393, &xctx->raw_schname);
if(xctx->npoints) my_free(1413, &xctx->npoints);
if(xctx->raw_schname) my_free(1393, &xctx->raw_schname);
xctx->datasets = 0;
xctx->nvars = 0;
int_hash_free(xctx->raw_table);
@ -1901,20 +1904,20 @@ void draw_graph(int c, int i, int flags)
double subwx = wx + k * deltax / (subdivx + 1);
if(!axis_within_range(subwx, wx1, wx2)) continue;
if(axis_end(subwx, deltax, wx2)) break;
drawline(2, ADD, W_X(subwx), W_Y(wy2), W_X(subwx), W_Y(wy1), dash_sizey);
drawline(GRIDLAYER, ADD, W_X(subwx), W_Y(wy2), W_X(subwx), W_Y(wy1), dash_sizey);
}
if(!axis_within_range(wx, wx1, wx2)) continue;
if(axis_end(wx, deltax, wx2)) break;
/* swap order of wy1 and wy2 since grap y orientation is opposite to xorg orientation */
drawline(2, ADD, W_X(wx), W_Y(wy2), W_X(wx), W_Y(wy1), dash_sizey);
drawline(2, ADD, W_X(wx), W_Y(wy1), W_X(wx), W_Y(wy1) + 4, 0); /* axis marks */
drawline(GRIDLAYER, ADD, W_X(wx), W_Y(wy2), W_X(wx), W_Y(wy1), dash_sizey);
drawline(GRIDLAYER, ADD, W_X(wx), W_Y(wy1), W_X(wx), W_Y(wy1) + 4, 0); /* axis marks */
/* X-axis labels */
my_snprintf(lab, S(lab), "%g", wx * unitx);
draw_string(3, NOW, lab, 0, 0, 1, 0, W_X(wx), y2 + 30 * txtsizex, txtsizex, txtsizex);
}
/* first and last vertical box delimiters */
drawline(2, ADD, W_X(wx1), W_Y(wy2), W_X(wx1), W_Y(wy1), 0);
drawline(2, ADD, W_X(wx2), W_Y(wy2), W_X(wx2), W_Y(wy1), 0);
drawline(GRIDLAYER, ADD, W_X(wx1), W_Y(wy2), W_X(wx1), W_Y(wy1), 0);
drawline(GRIDLAYER, ADD, W_X(wx2), W_Y(wy2), W_X(wx2), W_Y(wy1), 0);
/* horizontal grid lines */
deltay = axis_increment(wy1, wy2, divy);
starty = axis_start(wy1, deltay, divy);
@ -1924,25 +1927,25 @@ void draw_graph(int c, int i, int flags)
double subwy = wy + k * deltay / (subdivy + 1);
if(!axis_within_range(subwy, wy1, wy2)) continue;
if(axis_end(subwy, deltay, wy2)) break;
drawline(2, ADD, W_X(wx1), W_Y(subwy), W_X(wx2), W_Y(subwy), dash_sizex);
drawline(GRIDLAYER, ADD, W_X(wx1), W_Y(subwy), W_X(wx2), W_Y(subwy), dash_sizex);
}
if(!axis_within_range(wy, wy1, wy2)) continue;
if(axis_end(wy, deltay, wy2)) break;
drawline(2, ADD, W_X(wx1), W_Y(wy), W_X(wx2), W_Y(wy), dash_sizex);
drawline(2, ADD, W_X(wx1)-4, W_Y(wy), W_X(wx1), W_Y(wy), 0); /* axis marks */
drawline(GRIDLAYER, ADD, W_X(wx1), W_Y(wy), W_X(wx2), W_Y(wy), dash_sizex);
drawline(GRIDLAYER, ADD, W_X(wx1)-4, W_Y(wy), W_X(wx1), W_Y(wy), 0); /* axis marks */
/* Y-axis labels */
my_snprintf(lab, S(lab), "%g", wy * unity);
draw_string(3, NOW, lab, 0, 1, 0, 1, x1 - 2 - 30 * txtsizey, W_Y(wy), txtsizey, txtsizey);
}
/* first and last horizontal box delimiters */
drawline(2, ADD, W_X(wx1), W_Y(wy1), W_X(wx2), W_Y(wy1), 0);
drawline(2, ADD, W_X(wx1), W_Y(wy2), W_X(wx2), W_Y(wy2), 0);
drawline(GRIDLAYER, ADD, W_X(wx1), W_Y(wy1), W_X(wx2), W_Y(wy1), 0);
drawline(GRIDLAYER, ADD, W_X(wx1), W_Y(wy2), W_X(wx2), W_Y(wy2), 0);
/* Horizontal axis (if in viewport) */
if(wy1 <= 0 && wy2 >= 0) drawline(2, ADD, W_X(wx1), W_Y(0), W_X(wx2), W_Y(0), 0);
if(wy1 <= 0 && wy2 >= 0) drawline(GRIDLAYER, ADD, W_X(wx1), W_Y(0), W_X(wx2), W_Y(0), 0);
/* Vertical axis (if in viewport)
* swap order of wy1 and wy2 since grap y orientation is opposite to xorg orientation */
if(wx1 <= 0 && wx2 >= 0) drawline(2, ADD, W_X(0), W_Y(wy2), W_X(0), W_Y(wy1), 0);
drawline(2, END, 0.0, 0.0, 0.0, 0.0, 0);
if(wx1 <= 0 && wx2 >= 0) drawline(GRIDLAYER, ADD, W_X(0), W_Y(wy2), W_X(0), W_Y(wy1), 0);
drawline(GRIDLAYER, END, 0.0, 0.0, 0.0, 0.0, 0);
/* get data to plot */
my_strdup2(1389, &node, get_tok_value(r->prop_ptr,"node",0));
my_strdup2(1390, &color, get_tok_value(r->prop_ptr,"color",0));

View File

@ -31,8 +31,8 @@ B 2 1860 -890 3010 -810 {flags=1
y1 = 0
y2 = 1
divy = 1
x1=1.5111e-07
x2=3.58736e-07 divx=10
x1=1.25059e-07
x2=1.84194e-07 divx=10
node="
v(ldbl[0]) v(ldbl[16]) v(ldbl[32])
v(ldbl[1]) v(ldbl[17]) v(ldbl[33])
@ -43,8 +43,8 @@ B 2 1860 -810 3010 -730 {flags=1
y1 = 0
y2 = 1.5
divy = 1
x1=1.5111e-07
x2=3.58736e-07 divx=10
x1=1.25059e-07
x2=1.84194e-07 divx=10
node="
v(ldl1x[0]) v(ldl1x[1]) v(ldl1x[2]) v(ldl1x[3])
"
@ -53,24 +53,27 @@ B 2 1860 -1180 3010 -970 {flags=1
y1 = -0.251577
y2 = 1.74839
divy = 4
x1=1.5111e-07
x2=3.58736e-07 divx=10
x1=1.25059e-07
x2=1.84194e-07
divx=10
subdivx=4
node="v(ldcp) v(ldyms[4]) v(ldyms[5]) v(ldyms[6]) v(ldyms[7])"
color=6\\ 12\\ 13\\ 14\\ 15 unitx=n}
color="6 12 13 14 15"
unitx=n}
B 2 1860 -490 3010 -410 {flags=1
y1 = -0.1
y2 = 1.6
divy = 1
x1=1.5111e-07
x2=3.58736e-07 divx=10
x1=1.25059e-07
x2=1.84194e-07 divx=10
node="v(ldprech)"
color=4 unitx=n subdivy=2}
B 2 1860 -410 3010 -330 {flags=1
y1 = 0
y2 = 1.5
divy = 1
x1=1.5111e-07
x2=3.58736e-07 divx=10
x1=1.25059e-07
x2=1.84194e-07 divx=10
node="v(lden) v(ldcp)"
color=12\\ 18 unitx=n subdivy=2}
B 2 1860 -730 3010 -570 {flags=1
@ -78,9 +81,9 @@ y1 = -0.16335
y2 = 1.6335
divy = 3
subdivy=1
subdivx = 1
x1=1.5111e-07
x2=3.58736e-07 divx=10
subdivx = 4
x1=1.25059e-07
x2=1.84194e-07 divx=10
node="
v(ldcp)
v(ldwl[0]) v(ldwl[1]) v(ldwl[2]) v(ldwl[3])
@ -93,49 +96,49 @@ B 2 1860 -330 3010 -250 {flags=1
y1 = 0
y2 = 1
divy = 1
x1=1.5111e-07
x2=3.58736e-07 divx=10
x1=1.25059e-07
x2=1.84194e-07 divx=10
node="v(ldymsref)"
color=3 unitx=n subdivy=4}
B 2 1860 -250 3010 -170 {flags=1
y1 = 0
y2 = 1.5
divy = 1
x1=1.5111e-07
x2=3.58736e-07 divx=10
x1=1.25059e-07
x2=1.84194e-07 divx=10
node="v(lden)"
color=4 unitx=n subdivy=2}
B 2 1860 -170 3010 -90 {flags=1
y1 = 0
y2 = 1.5
divy = 1
x1=1.5111e-07
x2=3.58736e-07 divx=10
x1=1.25059e-07
x2=1.84194e-07 divx=10
node="v(lden) v(ldprech)"
color=12\\ 16 unitx=n subdivy=2}
B 2 1860 -90 3010 -10 {flags=1
y1 = 0
y2 = 1.5
divy = 1
x1=1.5111e-07
x2=3.58736e-07 divx=10
x1=1.25059e-07
x2=1.84194e-07 divx=10
node="v(lden) v(ldcp)"
color=12\\ 5 unitx=n subdivy=2}
B 2 1860 -570 3010 -490 {flags=1
y1 = 0
y2 = 1.6
y2 = 1.5
divy = 1
subdivy=2
x1=1.5111e-07
x2=3.58736e-07 divx=10
x1=1.25059e-07
x2=1.84194e-07 divx=10
node="v(ldl1x[1])"
color=4 unitx=n}
B 2 1860 -970 3010 -890 {flags=1
y1 = 0
y2 = 1.5
divy = 1
x1=1.5111e-07
x2=3.58736e-07 divx=10
x1=1.25059e-07
x2=1.84194e-07 divx=10
node="v(lden) v(ldprech)"
color=4\\ 6 unitx=n}
B 7 950 -250 980 -80 {}