better line width calculation / restore in export images

This commit is contained in:
stefan schippers 2023-12-11 16:06:49 +01:00
parent 7e820d05b0
commit b95289ca5e
4 changed files with 28 additions and 31 deletions

View File

@ -3932,7 +3932,7 @@ void svg_embedded_graph(FILE *fd, xRect *r, double rx1, double ry1, double rx2,
cairo_surface_t *png_sfc;
int save, save_draw_window, save_draw_grid, rwi, rhi;
size_t olength;
const double max_size = 5000.0;
const double max_size = 3000.0;
if(!has_x) return;
rw = fabs(rx2 -rx1);

View File

@ -236,7 +236,7 @@ void ps_embedded_graph(xRect* r, double rx1, double ry1, double rx2, double ry2)
double rw, rh, scale;
cairo_surface_t* png_sfc;
int save, save_draw_window, save_draw_grid, rwi, rhi;
const double max_size = 5000.0;
const double max_size = 3000.0;
int d_c;
unsigned char* jpgData = NULL;
size_t fileSize = 0;
@ -990,7 +990,6 @@ void create_ps(char **psfile, int what, int fullzoom)
int c,i, textlayer;
int old_grid;
const char *textfont;
int save_change_lw;
static Zoom_info zi;
dbg(1, "create_ps(): what = %d, fullzoom=%d\n", what, fullzoom);
@ -1209,8 +1208,6 @@ void create_ps(char **psfile, int what, int fullzoom)
xctx->text[i].xscale, xctx->text[i].yscale);
}
}
save_change_lw = tclgetintvar("change_lw");
tclsetintvar("change_lw", 0);
for(c=0;c<cadlayers; ++c)
{
set_ps_colors(c);
@ -1247,7 +1244,6 @@ void create_ps(char **psfile, int what, int fullzoom)
}
dbg(1, "create_ps(): starting drawing symbols on layer %d\n", c);
} /* for(c=0;c<cadlayers; ++c) */
tclsetintvar("change_lw", save_change_lw);
/* bring outside previous for(c=0...) loop since ps_embedded_graph() calls ps_draw_symbol() */
for(c=0;c<cadlayers; ++c) {

View File

@ -3067,6 +3067,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
my_strncpy(xctx->plotfile, Tcl_GetStringResult(interp), S(xctx->plotfile));
}
if(!strcmp(argv[2], "pdf") || !strcmp(argv[2],"ps")) {
double save_lw = xctx->lw;
int fullzoom = 0;
int w = 0, h = 0;
double x1, y1, x2, y2;
@ -3113,7 +3114,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
ps_draw(7, fullzoom);
save_restore_zoom(0, &zi);
resetwin(1, 1, 1, 0, 0);
change_linewidth(-1.);
change_linewidth(save_lw);
} else {
fullzoom = 0;
ps_draw(7, fullzoom);
@ -3124,6 +3125,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
ps_draw(7, fullzoom);
}
else if(!strcmp(argv[2], "png")) {
double save_lw = xctx->lw;
int w = 0, h = 0;
double x1, y1, x2, y2;
if(argc == 6 && xctx->lastsel == 0) {
@ -3167,13 +3169,14 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
print_image();
save_restore_zoom(0, &zi);
resetwin(1, 1, 1, 0, 0);
change_linewidth(-1.);
change_linewidth(save_lw);
} else {
print_image();
}
}
else if(!strcmp(argv[2], "svg")) {
int w = 0, h = 0, save_change_lw;
double save_lw = xctx->lw;
int w = 0, h = 0;
double x1, y1, x2, y2;
if(argc == 6 && xctx->lastsel == 0) {
w = atoi(argv[4]);
@ -3183,10 +3186,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
save_restore_zoom(1, &zi);
set_viewport_size(w, h, xctx->lw);
zoom_full(0, 0, 2 * tclgetboolvar("zoom_full_center"), 0.97);
save_change_lw = tclgetintvar("change_lw");
tclsetintvar("change_lw", 0);
svg_draw();
tclsetintvar("change_lw", save_change_lw);
save_restore_zoom(0, &zi);
} else if(argc == 10 || xctx->lastsel) {
if(xctx->lastsel) {
@ -3213,16 +3213,13 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
save_restore_zoom(1, &zi);
set_viewport_size(w, h, xctx->lw);
zoom_box(x1, y1, x2, y2, 1.0);
save_change_lw = tclgetintvar("change_lw");
tclsetintvar("change_lw", 0);
svg_draw();
tclsetintvar("change_lw", save_change_lw);
save_restore_zoom(0, &zi);
} else {
svg_draw();
}
resetwin(1, 1, 1, 0, 0);
change_linewidth(-1.);
change_linewidth(save_lw);
}
draw();
Tcl_ResetResult(interp);

File diff suppressed because one or more lines are too long