Index: trunk/src_plugins/export_svg/svg.c
===================================================================
--- trunk/src_plugins/export_svg/svg.c (revision 23530)
+++ trunk/src_plugins/export_svg/svg.c (revision 23531)
@@ -281,12 +281,42 @@
fprintf(f, "\n");
}
+static void svg_header(void)
+{
+ pcb_coord_t w, h, x1, y1, x2, y2;
+
+ fprintf(f, "\n");
+ w = PCB->MaxWidth;
+ h = PCB->MaxHeight;
+ while((w < PCB_MM_TO_COORD(1024)) && (h < PCB_MM_TO_COORD(1024))) {
+ w *= 2;
+ h *= 2;
+ }
+
+ x1 = PCB_MM_TO_COORD(2);
+ y1 = PCB_MM_TO_COORD(2);
+ x2 = PCB->MaxWidth;
+ y2 = PCB->MaxHeight;
+ x2 += PCB_MM_TO_COORD(5);
+ y2 += PCB_MM_TO_COORD(5);
+ pcb_fprintf(f, "\n");
+}
+
static void svg_do_export(pcb_hid_attr_val_t * options)
{
const char *filename;
int save_ons[PCB_MAX_LAYER + 2];
int i;
- pcb_coord_t w, h, x1, y1, x2, y2;
comp_cnt = 0;
@@ -299,32 +329,21 @@
pcb_cam_begin(PCB, &svg_cam, options[HA_cam].str_value, svg_attribute_list, NUM_OPTIONS, options);
- filename = options[HA_svgfile].str_value;
- if (!filename)
- filename = "pcb.svg";
+ if (svg_cam.fn_template == NULL) {
+ filename = options[HA_svgfile].str_value;
+ if (!filename)
+ filename = "pcb.svg";
- f = pcb_fopen(svg_cam.active ? svg_cam.fn : filename, "wb");
- if (!f) {
- perror(filename);
- return;
+ f = pcb_fopen(svg_cam.active ? svg_cam.fn : filename, "wb");
+ if (!f) {
+ perror(filename);
+ return;
+ }
+ svg_header();
}
+ else
+ f = NULL;
- fprintf(f, "\n");
- w = PCB->MaxWidth;
- h = PCB->MaxHeight;
- while((w < PCB_MM_TO_COORD(1024)) && (h < PCB_MM_TO_COORD(1024))) {
- w *= 2;
- h *= 2;
- }
-
- x1 = PCB_MM_TO_COORD(2);
- y1 = PCB_MM_TO_COORD(2);
- x2 = PCB->MaxWidth;
- y2 = PCB->MaxHeight;
- x2 += PCB_MM_TO_COORD(5);
- y2 += PCB_MM_TO_COORD(5);
- pcb_fprintf(f, "\n");
+ svg_footer();
fclose(f);
f = NULL;
@@ -364,6 +378,20 @@
pcb_cam_set_layer_group(&svg_cam, group, purpose, purpi, flags, xform);
+ if (svg_cam.fn_changed) {
+ if (f != NULL) {
+ svg_footer();
+ fclose(f);
+ }
+
+ f = pcb_fopen(svg_cam.fn, "wb");
+ if (f == NULL) {
+ perror(svg_cam.fn);
+ return 0;
+ }
+ svg_header();
+ }
+
if (!svg_cam.active) {
if (flags & PCB_LYT_INVIS)
return 0;