diff options
Diffstat (limited to 'support/dktools/f2lud.c')
-rw-r--r-- | support/dktools/f2lud.c | 3997 |
1 files changed, 0 insertions, 3997 deletions
diff --git a/support/dktools/f2lud.c b/support/dktools/f2lud.c deleted file mode 100644 index 69b1ebf0a8..0000000000 --- a/support/dktools/f2lud.c +++ /dev/null @@ -1,3997 +0,0 @@ -/* -Copyright (C) 2012-2020, Dirk Krause -SPDX-License-Identifier: BSD-3-Clause -*/ - -/* - WARNING: This file was generated by the dkct program (see - http://dktools.sourceforge.net/ for details). - Changes you make here will be lost if dkct is run again! - You should modify the original source and run dkct on it. - Original source: f2lud.ctr -*/ - -/** @file f2lud.c The f2lud module. -*/ - - -#line 203 "f2lud.ctr" - -#include "dk3all.h" -#include "dk3bezcu.h" -#include "fig2lat.h" -#include "dk3xsp.h" -#include "f2lud.h" -#include "f2lsvg.h" -#include "f2lpgf.h" -#include "f2lpdf.h" -#include "f2leps.h" -#include "dk3figto.h" -#if 0 -#include "dkt-version.h" -#endif -#include "dk4vers.h" -#include "f2ludpat.h" -#include "f2lpara.h" -#include "dk3unused.h" - - - - - -#line 225 "f2lud.ctr" - - - -/** Keywords used by the module. -*/ -static char const * const f2lud_c8_kw[] = { -/* 0 */ -"fig object begin %lu, line %lu, type %ld %ld, layer %d", - -/* 1 */ -"fig object end %lu", - -/* 2 */ -"arrowhead forward begin, type=%d, fill=%d, length=%lg, width=%lg", - -/* 3 */ -"arrowhead forward end", - -/* 4 */ -"arrowhead backward begin, type=%d, fill=%d, length=%lg, width=%lg", - -/* 5 */ -"arrowhead backward end", - -/* 6 */ -"path object begin, type %ld %ld", - -/* 7 */ -"path object end", - -NULL - - -#line 265 "f2lud.ctr" -}; - - - -/** Write debug line to output file. - @param job Job structure. - @param msg Text line without newline at end. -*/ -static -void -f2lud_debug( - f2l_job_t *job, - char const *msg -) -{ - switch(job->dr) { - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_debug(job, msg); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_debug(job, msg); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_debug(job, msg); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_debug(job, msg); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_debug(job, msg); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_debug(job, msg); - } break; - } -} - - - -/** Calculate factors for coordinates transformations. - @param job Job structure. - @param drw Drawing structure. - @return 1 on success, 0 on error. -*/ -static -int -f2lud_coordinates_transformation(f2l_job_t *job, dk3_fig_drawing_t *drw) -{ - double xmin; /* Minimum x in output space. */ - double xmax; /* Maximum x in output space. */ - double ymin; /* Minimum y in output space. */ - double ymax; /* Maximum y in output space. */ - double xdelta; /* Used width in output space. */ - double ydelta; /* Used height in output space. */ - double width; /* Bounding box width in output space. */ - double height; /* Bounding box height in output space. */ - int mec = 0; /* Mathematical error code. */ - int back = 1; - - -#line 325 "f2lud.ctr" - (job->ct2d).mx = dk3ma_d_div_ok( 72.0, drw->res, &mec); - (job->ct2d).my = dk3ma_d_div_ok(-72.0, drw->res, &mec); - xmin = dk3ma_d_mul_ok((job->ct2d).mx, (drw->bb).xmin, &mec); - xmax = dk3ma_d_mul_ok((job->ct2d).mx, (drw->bb).xmax, &mec); - ymax = dk3ma_d_mul_ok((job->ct2d).my, (drw->bb).ymin, &mec); - ymin = dk3ma_d_mul_ok((job->ct2d).my, (drw->bb).ymax, &mec); - xdelta = dk3ma_d_sub_ok(xmax, xmin, &mec); - ydelta = dk3ma_d_sub_ok(ymax, ymin, &mec); - job->width = width = ceil(xdelta); - job->height = height = ceil(ydelta); - job->lwidth = dk3ma_d_to_l_ok(width, &mec); - job->lheight = dk3ma_d_to_l_ok(height, &mec); - (job->ct2d).nx = 0.5 * dk3ma_d_sub_ok(width, xdelta, &mec); - (job->ct2d).ny = 0.5 * dk3ma_d_sub_ok(height, ydelta, &mec); - (job->ct2d).nx = dk3ma_d_sub_ok((job->ct2d).nx, xmin, &mec); - (job->ct2d).ny = dk3ma_d_sub_ok((job->ct2d).ny, ymin, &mec); - - -#line 342 "f2lud.ctr" - - -#line 343 "f2lud.ctr" - if(mec) { - back = 0; - /* ERROR: Math problem */ - dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 35); - f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_MATH); - -#line 348 "f2lud.ctr" - } - -#line 349 "f2lud.ctr" - return back; -} - - - -/** Driver-specific initialization. - @param job Job structure. - @param drw Drawing structure. - @return 1 on success, 0 on error. -*/ -static -int -f2lud_driver_initialize(f2l_job_t *job, dk3_fig_drawing_t *drw) -{ - int back; - - -#line 365 "f2lud.ctr" - back = f2lud_coordinates_transformation(job, drw); - if(back) { - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - back = f2lpgf_tex_initialize(job, drw); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - back = f2lpdf_tex_with_pdf_initialize(job, drw); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - back = f2lpdf_pdf_with_tex_initialize(job, drw); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - back = f2leps_eps_with_tex_initialize(job, drw); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - back = f2leps_eps_pure_initialize(job, drw); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - back = f2lpgf_pgf_initialize(job, drw); - } break; - } - } - -#line 389 "f2lud.ctr" - return back; -} - - - -/** Release resources allocated by f2lud_driver_initialize(). - @param job Job structure. - @param drw Drawing structure. -*/ -static -void -f2lud_driver_end(f2l_job_t *job, dk3_fig_drawing_t *drw) -{ - - -#line 403 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_end(job, drw); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_end(job, drw); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_end(job, drw); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_end(job, drw); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_end(job, drw); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_end(job, drw); - } break; - } - - -#line 425 "f2lud.ctr" -} - - - -/** Open output files. - @param job Job structure. - @return 1 on success, 0 on error. -*/ -static -int -f2lud_open_output_files(f2l_job_t *job) -{ - int back = 0; - - -#line 439 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - back = f2lpgf_tex_open_output_files(job); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - back = f2lpdf_tex_with_pdf_open_output_files(job); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - back = f2lpdf_pdf_with_tex_open_output_files(job); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - back = f2leps_eps_with_tex_open_output_files(job); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - back = f2leps_eps_pure_open_output_files(job); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - back = f2lpgf_pgf_open_output_files(job); - } break; - } - -#line 460 "f2lud.ctr" - return back; -} - - - -/** Close output files. - @param job Job structure. -*/ -static -void -f2lud_close_output_files(f2l_job_t *job) -{ - - -#line 473 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_close_output_files(job); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_close_output_files(job); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_close_output_files(job); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_close_output_files(job); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_close_output_files(job); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_close_output_files(job); - } break; - } - -#line 494 "f2lud.ctr" -} - - - -/** Write start of output. - @param job Job structure. - @param drw Drawing structure. - @return 1 on success, 0 on error. -*/ -static -int -f2lud_start_processing(f2l_job_t *job, dk3_fig_drawing_t *drw) -{ - int back = 0; - - -#line 509 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - back = f2lpgf_tex_start_processing(job, drw); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - back = f2lpdf_tex_with_pdf_start_processing(job, drw); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - back = f2lpdf_pdf_with_tex_start_processing(job, drw); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - back = f2leps_eps_with_tex_start_processing(job, drw); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - back = f2leps_eps_pure_start_processing(job, drw); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - back = f2lpgf_pgf_start_processing(job, drw); - } break; - } - -#line 530 "f2lud.ctr" - return back; -} - - - -/** Write end of output. - @param job Job structure. - @param drw Drawing structure. -*/ -static -void -f2lud_end_processing(f2l_job_t *job, dk3_fig_drawing_t *drw) -{ - - -#line 544 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_end_processing(job, drw); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_end_processing(job, drw); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_end_processing(job, drw); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_end_processing(job, drw); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_end_processing(job, drw); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_end_processing(job, drw); - } break; - } - -#line 565 "f2lud.ctr" -} - - - -/** Process one text object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. -*/ -static -void -f2lud_text_object( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - double x; /* X position of text object. */ - double y; /* Y position of text object. */ - int ec = 0; /* Mathematical error code. */ - - -#line 586 "f2lud.ctr" - if(!(DK3_FIG_FONT_FLAG_HIDDEN & ((obj->dt).txt.ff))) { - x = dk3ct_2d_x(&(job->ct2d), (obj->dt).txt.x, &ec); - y = dk3ct_2d_y(&(job->ct2d), (obj->dt).txt.y, &ec); - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_text_object(job, drw, obj, x, y); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_text_object(job, drw, obj, x, y); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_text_object(job, drw, obj, x, y); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_text_object(job, drw, obj, x, y); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_text_object(job, drw, obj, x, y); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_text_object(job, drw, obj, x, y); - } break; - } - } - if(ec) { - /* ERROR: Math problem! */ - dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 35); - f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_MATH); - -#line 615 "f2lud.ctr" - } - - -#line 617 "f2lud.ctr" -} - - - -/** Find bounding box for output coordinates. - @param bb Bounding box to set up. - @param job Job structure. - @param drw Drawing structure. - @param obj Polygon/polyline object. - @param ec Pointer to error code variable. -*/ -static -void -f2lud_find_bounding_box( - dk3_bb_t *bb, - f2l_job_t *job, - dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw), - dk3_fig_obj_t *obj, - int *ec -) -{ - dk3_fig_poly_point_t *po; /* Current point. */ - size_t np; /* Number of points. */ - size_t i; /* Index of current point. */ - - -#line 642 "f2lud.ctr" - DK3_UNUSED_ARG(drw) - po = (obj->dt).pol.po; - np = (obj->dt).pol.np; - dk3bb_reset(bb); - for(i = 0; i < np; i++) { - dk3bb_add_x(bb, dk3ct_2d_x(&(job->ct2d), po->x, ec)); - dk3bb_add_y(bb, dk3ct_2d_y(&(job->ct2d), po->y, ec)); - po++; - } - -#line 651 "f2lud.ctr" -} - - - -/** Process one image object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. -*/ -static -void -f2lud_image_object( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - dk3_bb_t outbb; /* Image bounding box in output space. */ - int ec = 0; /* Error code variable. */ - int drawdir = 0; /* Drawing direction for embedded image. */ - - -#line 672 "f2lud.ctr" - dk3bb_reset(&outbb); - f2lud_find_bounding_box(&outbb, job, drw, obj, &ec); - drawdir = f2lto_find_draw_direction(drw, obj, &ec); - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_image_object(job, drw, obj, &outbb, drawdir, &ec); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_image_object(job, drw, obj, &outbb, drawdir, &ec); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_image_object(job, drw, obj, &outbb, drawdir, &ec); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_image_object(job, drw, obj, &outbb, drawdir, &ec); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_image_object(job, drw, obj, &outbb, drawdir, &ec); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_image_object(job, drw, obj, &outbb, drawdir, &ec); - } break; - } - if(ec) { - /* ERROR: Math error! */ - dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 35); - f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_MATH); - -#line 700 "f2lud.ctr" - } - -#line 701 "f2lud.ctr" -} - - - -void -f2lud_newpath( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - - -#line 713 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_newpath(job, drw, obj); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_newpath(job, drw, obj); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_newpath(job, drw, obj); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_newpath(job, drw, obj); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_newpath(job, drw, obj); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_newpath(job, drw, obj); - } break; - } - -#line 734 "f2lud.ctr" -} - - - -void -f2lud_moveto( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - double x, - double y -) -{ - - -#line 748 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_moveto(job, drw, obj, x, y); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_moveto(job, drw, obj, x, y); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_moveto(job, drw, obj, x, y); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_moveto(job, drw, obj, x, y); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_moveto(job, drw, obj, x, y); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_moveto(job, drw, obj, x, y); - } break; - } - -#line 769 "f2lud.ctr" -} - - - -void -f2lud_lineto( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - double x, - double y -) -{ - - -#line 783 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_lineto(job, drw, obj, x, y); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_lineto(job, drw, obj, x, y); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_lineto(job, drw, obj, x, y); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_lineto(job, drw, obj, x, y); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_lineto(job, drw, obj, x, y); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_lineto(job, drw, obj, x, y); - } break; - } - -#line 804 "f2lud.ctr" -} - - - -void -f2lud_curveto( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - double xcs, - double ycs, - double xce, - double yce, - double xe, - double ye -) -{ - - -#line 822 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_curveto(job, drw, obj, xcs, ycs, xce, yce, xe, ye); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_curveto(job, drw, obj, xcs, ycs, xce, yce, xe, ye); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_curveto(job, drw, obj, xcs, ycs, xce, yce, xe, ye); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_curveto(job, drw, obj, xcs, ycs, xce, yce, xe, ye); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_curveto(job, drw, obj, xcs, ycs, xce, yce, xe, ye); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_curveto(job, drw, obj, xcs, ycs, xce, yce, xe, ye); - } break; - } - -#line 843 "f2lud.ctr" -} - - - -void -f2lud_fig_moveto( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - double x, - double y, - int *ec -) -{ - double nx; /* Destination x in output space. */ - double ny; /* Destination y in output space. */ - - -#line 860 "f2lud.ctr" - nx = dk3ct_2d_x(&(job->ct2d), x, ec); - ny = dk3ct_2d_y(&(job->ct2d), y, ec); - f2lud_moveto(job, drw, obj, nx, ny); - - -#line 864 "f2lud.ctr" -} - - - -void -f2lud_fig_lineto( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - double x, - double y, - int *ec -) -{ - double nx; /* Destination x in output space. */ - double ny; /* Destination y in output space. */ - - -#line 881 "f2lud.ctr" - nx = dk3ct_2d_x(&(job->ct2d), x, ec); - ny = dk3ct_2d_y(&(job->ct2d), y, ec); - f2lud_lineto(job, drw, obj, nx, ny); - - -#line 885 "f2lud.ctr" -} - - - -void -f2lud_fig_curveto( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - double xcs, - double ycs, - double xce, - double yce, - double xe, - double ye, - int *ec -) -{ - double nxcs; /* First control point x in output space. */ - double nycs; /* First control point y in output space. */ - double nxce; /* Second control point x in output space. */ - double nyce; /* Second control point y in output space. */ - double nxe; /* End point x in output space. */ - double nye; /* End point y in output space. */ - - -#line 910 "f2lud.ctr" - nxcs = dk3ct_2d_x(&(job->ct2d), xcs, ec); - nycs = dk3ct_2d_y(&(job->ct2d), ycs, ec); - nxce = dk3ct_2d_x(&(job->ct2d), xce, ec); - nyce = dk3ct_2d_y(&(job->ct2d), yce, ec); - nxe = dk3ct_2d_x(&(job->ct2d), xe, ec); - nye = dk3ct_2d_y(&(job->ct2d), ye, ec); - f2lud_curveto(job, drw, obj, nxcs, nycs, nxce, nyce, nxe, nye); - - -#line 918 "f2lud.ctr" -} - - - -void -f2lud_closepath( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - - -#line 930 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_closepath(job, drw, obj); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_closepath(job, drw, obj); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_closepath(job, drw, obj); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_closepath(job, drw, obj); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_closepath(job, drw, obj); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_closepath(job, drw, obj); - } break; - } - -#line 951 "f2lud.ctr" -} - - - -/** Issue "fill" command. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. -*/ -void -f2lud_fill( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - - -#line 968 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_fill(job, drw, obj); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_fill(job, drw, obj); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_fill(job, drw, obj); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_fill(job, drw, obj); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_fill(job, drw, obj); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_fill(job, drw, obj); - } break; - } - -#line 989 "f2lud.ctr" -} - - - -/** Issue combined "fill" and "clip" command. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. -*/ -static -void -f2lud_fill_clip( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - - -#line 1007 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_fill_clip(job, drw, obj); - } break; - case FIG2LAT_DRIVER_PGF: { - f2lpgf_pgf_fill_clip(job, drw, obj); - } break; - /* @DRIVER@ universal */ - } - -#line 1016 "f2lud.ctr" -} - - - -/** Issue combined "fill", "stroke", and "clip" command. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. -*/ -static -void -f2lud_fill_stroke_clip( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - - -#line 1034 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_fill_stroke_clip(job, drw, obj); - } break; - case FIG2LAT_DRIVER_PGF: { - f2lpgf_pgf_fill_stroke_clip(job, drw, obj); - } break; - /* @DRIVER@ universal */ - } - -#line 1043 "f2lud.ctr" -} - - - -/** Issue combined "fill" and "stroke" command. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. -*/ -static -void -f2lud_fill_stroke( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - - -#line 1061 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_fill_stroke(job, drw, obj); - } break; - case FIG2LAT_DRIVER_PGF: { - f2lpgf_pgf_fill_stroke(job, drw, obj); - } break; - /* @DRIVER@ universal */ - } - -#line 1070 "f2lud.ctr" -} - - - -void -f2lud_stroke( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - - -#line 1082 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_stroke(job, drw, obj); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_stroke(job, drw, obj); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_stroke(job, drw, obj); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_stroke(job, drw, obj); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_stroke(job, drw, obj); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_stroke(job, drw, obj); - } break; - } - -#line 1103 "f2lud.ctr" -} - - - -/** Issue "clip" command. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. -*/ -static -void -f2lud_clip( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - - -#line 1121 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_clip(job, drw, obj); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_clip(job, drw, obj); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_clip(job, drw, obj); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_clip(job, drw, obj); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_clip(job, drw, obj); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_clip(job, drw, obj); - } break; - } - -#line 1142 "f2lud.ctr" -} - - - -/** Issue "gsave" command. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. -*/ -static -void -f2lud_gsave( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - - -#line 1160 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_gsave(job, drw, obj); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_gsave(job, drw, obj); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_gsave(job, drw, obj); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_gsave(job, drw, obj); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_gsave(job, drw, obj); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_gsave(job, drw, obj); - } break; - } - -#line 1181 "f2lud.ctr" -} - - - -/** Issue "grestore" command. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. -*/ -static -void -f2lud_grestore( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - - -#line 1199 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_grestore(job, drw, obj); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_grestore(job, drw, obj); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_grestore(job, drw, obj); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_grestore(job, drw, obj); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_grestore(job, drw, obj); - } break; - /* @DRIVER@ universal */ - default: { /* PGF */ - f2lpgf_pgf_grestore(job, drw, obj); - } break; - } - -#line 1220 "f2lud.ctr" -} - - - -/** Create path for ellipse object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param ec Pointe to error code variable, may be NULL. -*/ -static -void -f2lud_create_ellipse_path( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int *ec -) -{ - dk3_fig_poly_point_t po[12]; /* Points in Fig space. */ - double myan; /* Rotation angle in Fig space. */ - size_t i; /* Index of current point to modify. */ - - -#line 1243 "f2lud.ctr" - po[0].x = (obj->dt).ell.rx; - po[0].y = 0.0; - po[1].x = (obj->dt).ell.rx; - po[1].y = FIG2LAT_CIRCLE_QUADRANT_BEZIER * (obj->dt).ell.ry; - po[2].x = FIG2LAT_CIRCLE_QUADRANT_BEZIER * (obj->dt).ell.rx; - po[2].y = (obj->dt).ell.ry; - po[3].x = 0.0; - po[3].y = (obj->dt).ell.ry; - po[4].x = 0.0 - po[2].x; - po[4].y = po[2].y; - po[5].x = 0.0 - po[1].x; - po[5].y = po[1].y; - po[6].x = 0.0 - po[0].x; - po[6].y = 0.0; - po[7].x = po[6].x; - po[7].y = 0.0 - po[5].y; - po[8].x = po[4].x; - po[8].y = 0.0 - po[2].y; - po[9].x = 0.0; - po[9].y = 0.0 - po[3].y; - po[10].x = po[2].x; - po[10].y = po[9].y; - po[11].x = po[1].x; - po[11].y = po[7].y; - switch(obj->st) { - case 1: case 2: { - if(1.0e-6 < fabs((obj->dt).ell.an)) { - if(1.0e-6 < fabs(dk3ma_d_sub_ok((obj->dt).ell.rx,(obj->dt).ell.ry,ec))) - { - myan = -1.0 * (obj->dt).ell.an; - for(i = 0; i < 12; i++) { - dk3fig_tool_rotate_point(&(po[i]), myan, ec); - } - } - } - } break; - } - for(i = 0; i < 12; i++) { - dk3fig_tool_shift_point(&(po[i]), (obj->dt).ell.cx, (obj->dt).ell.cy, ec); - } - f2lud_fig_moveto(job, drw, obj, po[0].x, po[0].y, ec); - f2lud_fig_curveto( - job, drw, obj, - po[1].x, po[1].y, po[2].x, po[2].y, po[3].x, po[3].y, - ec - ); - f2lud_fig_curveto( - job, drw, obj, - po[4].x, po[4].y, po[5].x, po[5].y, po[6].x, po[6].y, - ec - ); - f2lud_fig_curveto( - job, drw, obj, - po[7].x, po[7].y, po[8].x, po[8].y, po[9].x, po[9].y, - ec - ); - f2lud_fig_curveto( - job, drw, obj, - po[10].x, po[10].y, po[11].x, po[11].y, po[0].x, po[0].y, - ec - ); - - -#line 1305 "f2lud.ctr" -} - - - -/** Create path for polygon object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param ec Pointe to error code variable, may be NULL. -*/ -static -void -f2lud_create_polygon_path( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int *ec -) -{ - dk3_fig_poly_point_t *po; /* Current point to process. */ - size_t np; /* Number of points. */ - size_t i; /* Index of current point. */ - - -#line 1328 "f2lud.ctr" - po = (obj->dt).pol.po; - np = (obj->dt).pol.np; - for(i = 0; i < np; i++) { - if(0 == i) { - f2lud_fig_moveto(job, drw, obj, po->x, po->y, ec); - } else { - f2lud_fig_lineto(job, drw, obj, po->x, po->y, ec); - } - po++; - } - if(obj->cl) { - po = (obj->dt).pol.po; - f2lud_fig_lineto(job, drw, obj, po->x, po->y, ec); - } - -#line 1342 "f2lud.ctr" -} - - - -/** Create path for box object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param ec Pointe to error code variable, may be NULL. -*/ -static -void -f2lud_create_box_path( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int *ec -) -{ - dk3_bb_t outbb; /* Box coordinates in output space. */ - - -#line 1363 "f2lud.ctr" - dk3bb_reset(&outbb); - f2lud_find_bounding_box(&outbb, job, drw, obj, ec); - f2lud_moveto(job, drw, obj, outbb.xmin, outbb.ymin); - f2lud_lineto(job, drw, obj, outbb.xmax, outbb.ymin); - f2lud_lineto(job, drw, obj, outbb.xmax, outbb.ymax); - f2lud_lineto(job, drw, obj, outbb.xmin, outbb.ymax); - f2lud_lineto(job, drw, obj, outbb.xmin, outbb.ymin); - - -#line 1371 "f2lud.ctr" -} - - - -/** Create path for arc box object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param ec Pointe to error code variable, may be NULL. -*/ -static -void -f2lud_create_arc_box_path( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int *ec -) -{ - dk3_fig_poly_point_t po[16]; /* Box points in output space. */ - dk3_bb_t outbb; /* Box coordinates in output space. */ - double r; /* Corner radius in output space. */ - double maxr; /* Maximum value for corner radius. */ - double corner; /* Factor control to end. */ - double rc; /* Dist of control to end in output space. */ - - -#line 1397 "f2lud.ctr" - dk3bb_reset(&outbb); - f2lud_find_bounding_box(&outbb, job, drw, obj, ec); -#if VERSION_BEFORE_20140808 - r = dk3ct_2d_r(&(job->ct2d), (obj->dt).pol.ra, ec); - -#line 1401 "f2lud.ctr" -#else - r = 0.9 * (obj->dt).pol.ra; - -#line 1403 "f2lud.ctr" -#endif - maxr = 0.49 * fabs(dk3ma_d_sub_ok(outbb.xmax, outbb.xmin, ec)); - if(r > maxr) r = maxr; - maxr = 0.49 * fabs(dk3ma_d_sub_ok(outbb.ymax, outbb.ymin, ec)); - if(r > maxr) r = maxr; - corner = 1.0 - FIG2LAT_CIRCLE_QUADRANT_BEZIER; - rc = r * corner; - /* Bottom line */ - po[0].x = dk3ma_d_add_ok(outbb.xmin, r, ec); - po[0].y = outbb.ymin; - po[1].x = dk3ma_d_sub_ok(outbb.xmax, r, ec); - po[1].y = po[0].y; - /* Lower right corner control points */ - po[2].x = dk3ma_d_sub_ok(outbb.xmax, rc, ec); - po[2].y = po[0].y; - po[3].x = outbb.xmax; - po[3].y = dk3ma_d_add_ok(outbb.ymin, rc, ec); - /* Right line */ - po[4].x = outbb.xmax; - po[4].y = dk3ma_d_add_ok(outbb.ymin, r, ec); - po[5].x = outbb.xmax; - po[5].y = dk3ma_d_sub_ok(outbb.ymax, r, ec); - /* Upper right corner control points */ - po[6].x = outbb.xmax; - po[6].y = dk3ma_d_sub_ok(outbb.ymax, rc, ec); - po[7].x = dk3ma_d_sub_ok(outbb.xmax, rc, ec); - po[7].y = outbb.ymax; - /* Top line */ - po[8].x = dk3ma_d_sub_ok(outbb.xmax, r, ec); - po[8].y = outbb.ymax; - po[9].x = dk3ma_d_add_ok(outbb.xmin, r, ec); - po[9].y = outbb.ymax; - /* Upper left corner control points */ - po[10].x = dk3ma_d_add_ok(outbb.xmin, rc, ec); - po[10].y = outbb.ymax; - po[11].x = outbb.xmin; - po[11].y = dk3ma_d_sub_ok(outbb.ymax, rc, ec); - /* Left line */ - po[12].x = outbb.xmin; - po[12].y = dk3ma_d_sub_ok(outbb.ymax, r, ec); - po[13].x = outbb.xmin; - po[13].y = dk3ma_d_add_ok(outbb.ymin, r, ec); - /* Lower left corner control points */ - po[14].x = outbb.xmin; - po[14].y = dk3ma_d_add_ok(outbb.ymin, rc, ec); - po[15].x = dk3ma_d_add_ok(outbb.xmin, rc, ec); - po[15].y = outbb.ymin; - f2lud_moveto(job, drw, obj, po[0].x, po[0].y); - f2lud_lineto(job, drw, obj, po[1].x, po[1].y); - f2lud_curveto( - job, drw, obj, - po[2].x, po[2].y, po[3].x, po[3].y, po[4].x, po[4].y - ); - f2lud_lineto(job, drw, obj, po[5].x, po[5].y); - f2lud_curveto( - job, drw, obj, - po[6].x, po[6].y, po[7].x, po[7].y, po[8].x, po[8].y - ); - f2lud_lineto(job, drw, obj, po[9].x, po[9].y); - f2lud_curveto( - job, drw, obj, - po[10].x, po[10].y, po[11].x, po[11].y, po[12].x, po[12].y - ); - f2lud_lineto(job, drw, obj, po[13].x, po[13].y); - f2lud_curveto( - job, drw, obj, - po[14].x, po[14].y, po[15].x, po[15].y, po[0].x, po[0].y - ); - - -#line 1472 "f2lud.ctr" -} - - - -/** Create path for the last partial X-spline segment from closed X-spline. - @param job Job structure. - @param drw Fig drawing. - @param obj Fig object. - @param sp Spline points array. - @param np Number of spline points. - @param i Current segment index. - @param te Parameter t for end point. - @param isfirst Flag: First segment. - @param iscl Flag: Closed spline. - @param primary Flag: Primary (1=primary object, 0=arrowhead). - @param ec Pointer to error code variable, may be NULL. -*/ -static -void -f2lud_final_spline_segment( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - dk3_fig_spline_point_t *sp, - size_t np, - size_t i, - double te, - int isfirst, - int DK3_SILENCE_ARG_UNUSED(iscl), - int primary, - int *ec -) -{ - dk3_xspline_segment_t seg; /* Segment for caluclation. */ - dk3_fig_spline_point_t *pa = NULL; /* Left neighbour. */ - dk3_fig_spline_point_t *pb = NULL; /* Start. */ - dk3_fig_spline_point_t *pc = NULL; /* End. */ - dk3_fig_spline_point_t *pd = NULL; /* Right neighbour. */ - double myte; /* t for end. */ - double dnumsegs; /* Number of segments. */ - double factor; /* Scale factor for deriv. */ - double t; /* Current t. */ - double x; /* Bezier end x. */ - double y; /* Bezier end y. */ - double dxdt; /* Bezier dx/dt at end. */ - double dydt; /* Bezier dy/dt at end. */ - double lastx = 0.0; /* Bezier start x. */ - double lasty = 0.0; /* Bezier start y. */ - double lastdxdt = 0.0; /* dx/dt at start. */ - double lastdydt = 0.0; /* dy/dt at end. */ - size_t nsegs; /* Number of segments. */ - size_t iseg; /* Current segment. */ - int res; /* Calculation result. */ - - -#line 1526 "f2lud.ctr" - DK3_UNUSED_ARG(iscl) - myte = dk3ma_d_sub_ok(te, floor(te), ec); - -#line 1528 "f2lud.ctr" - dnumsegs = myte * dk3fig_tool_xssbs(drw, primary); - dnumsegs = ceil(dnumsegs); - -#line 1530 "f2lud.ctr" - nsegs = dk3ma_d_to_sz_ok(dnumsegs, ec); - -#line 1531 "f2lud.ctr" - pb = &(sp[i]); - pc = &(sp[i + 1]); - if(0 < i) { - pa = &(sp[i - 1]); - } - if(i < (np - 2)) { - pd = &(sp[i + 2]); - } - factor = myte / (double)nsegs; - -#line 1540 "f2lud.ctr" - dk3xsp_reset(&seg); - if(job->cosp) { dk3xsp_set_cb(&seg, 1); } - dk3xsp_set(&seg, pa, pb, pc, pd); - if(dk3xsp_calculate(&seg, 0.0, 1)) { - lastx = dk3xsp_get_x(&seg); - lasty = dk3xsp_get_y(&seg); - lastdxdt = dk3xsp_get_dxdt(&seg); - lastdydt = dk3xsp_get_dydt(&seg); - lastdxdt = (factor * lastdxdt) / 3.0; - lastdydt = (factor * lastdydt) / 3.0; - /* Move to start point. - */ - if(isfirst) { - f2lud_fig_moveto(job, drw, obj, lastx, lasty, ec); - } - /* Further curve only if te > 1.0e-6. - For smaller te draw straight line. - */ - if(1.0e-6 < myte) { - -#line 1559 "f2lud.ctr" - for(iseg = 0; iseg < nsegs; iseg++) { - if(iseg < (nsegs - 1)) { - -#line 1561 "f2lud.ctr" - t = (double)(iseg + 1) / (double)nsegs; - t = t * myte; - } else { - -#line 1564 "f2lud.ctr" - t = myte; - } - -#line 1566 "f2lud.ctr" - res = dk3xsp_calculate(&seg, t, 1); - if(!(res)) { - if(ec) { *ec = DK3_ERROR_MATH_OVERFLOW; } - } - x = dk3xsp_get_x(&seg); - y = dk3xsp_get_y(&seg); - dxdt = dk3xsp_get_dxdt(&seg); - dydt = dk3xsp_get_dydt(&seg); - dxdt = (factor * dxdt) / 3.0; - dydt = (factor * dydt) / 3.0; - f2lud_fig_curveto( - job, drw, obj, - dk3ma_d_add_ok(lastx, lastdxdt, ec), - dk3ma_d_add_ok(lasty, lastdydt, ec), - dk3ma_d_sub_ok(x, dxdt, ec), - dk3ma_d_sub_ok(y, dydt, ec), - x, y, - ec - ); - lastx = x; lasty = y; lastdxdt = dxdt; lastdydt = dydt; - } - } else { - -#line 1588 "f2lud.ctr" - res = dk3xsp_calculate(&seg, myte, 0); - if(!(res)) { - if(ec) { *ec = DK3_ERROR_MATH_OVERFLOW; } - /* ERROR: Math */ - dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 36); - f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_MATH); - -#line 1594 "f2lud.ctr" - } - x = dk3xsp_get_x(&seg); - y = dk3xsp_get_y(&seg); - f2lud_fig_lineto(job, drw, obj, x, y, ec); - } - } else { - if(ec) { *ec = DK3_ERROR_MATH_OVERFLOW; } - f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_MATH); - -#line 1602 "f2lud.ctr" - } - - -#line 1604 "f2lud.ctr" -} - - - -/** Create path for the first partial X-spline segment from closed X-spline. - @param job Job structure. - @param drw Fig drawing. - @param obj Fig object. - @param sp Spline points array. - @param np Number of spline points. - @param i Current segment index. - @param ts Parameter t for start point. - @param isfirst Flag: First segment. - @param iscl Flag: Closed spline. - @param primary Flag: Primary (1=primary object, 0=arrowhead). - @param ec Pointer to error code variable, may be NULL. -*/ -static -void -f2lud_first_spline_segment( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - dk3_fig_spline_point_t *sp, - size_t np, - size_t i, - double ts, - int isfirst, - int DK3_SILENCE_ARG_UNUSED(iscl), - int primary, - int *ec -) -{ - dk3_xspline_segment_t seg; /* Segment for caluclation. */ - dk3_fig_spline_point_t *pa = NULL; /* Left neighbour. */ - dk3_fig_spline_point_t *pb = NULL; /* Start. */ - dk3_fig_spline_point_t *pc = NULL; /* End. */ - dk3_fig_spline_point_t *pd = NULL; /* Right neighbour. */ - double myts; /* t for start. */ - double dnumsegs; /* Number of segments. */ - double factor; /* Scale factor for deriv. */ - double t; /* Current t. */ - double x; /* Bezier end x. */ - double y; /* Bezier end y. */ - double dxdt; /* Bezier dx/dt at end. */ - double dydt; /* Bezier dy/dt at end. */ - double lastx = 0.0; /* Bezier start x. */ - double lasty = 0.0; /* Bezier start y. */ - double lastdxdt = 0.0; /* dx/dt at start. */ - double lastdydt = 0.0; /* dy/dt at end. */ - size_t nsegs; /* Number of segments. */ - size_t iseg; /* Current segment. */ - int res; /* Calculation result. */ - - -#line 1658 "f2lud.ctr" - DK3_UNUSED_ARG(iscl) - myts = dk3ma_d_sub_ok(ts, floor(ts), ec); - -#line 1660 "f2lud.ctr" - dnumsegs = (1.0 - myts) * dk3fig_tool_xssbs(drw, primary); - dnumsegs = ceil(dnumsegs); - -#line 1662 "f2lud.ctr" - nsegs = dk3ma_d_to_sz_ok(dnumsegs, ec); - -#line 1663 "f2lud.ctr" - pb = &(sp[i]); - pc = &(sp[i + 1]); - if(0 < i) { - pa = &(sp[i - 1]); - } - if(i < (np - 2)) { - pd = &(sp[i + 2]); - } - factor = (1.0 - myts) / (double)nsegs; - -#line 1672 "f2lud.ctr" - dk3xsp_reset(&seg); - if(job->cosp) { dk3xsp_set_cb(&seg, 1); } - dk3xsp_set(&seg, pa, pb, pc, pd); - if(dk3xsp_calculate(&seg, myts, 1)) { - /* If necessary move to the start point. - */ - lastx = dk3xsp_get_x(&seg); - lasty = dk3xsp_get_y(&seg); - lastdxdt = dk3xsp_get_dxdt(&seg); - lastdydt = dk3xsp_get_dydt(&seg); - lastdxdt = (factor * lastdxdt) / 3.0; - lastdydt = (factor * lastdydt) / 3.0; - if(isfirst) { - f2lud_fig_moveto(job, drw, obj, lastx, lasty, ec); - } - if(1.0e-6 < (1.0 - myts)) { - for(iseg = 0; iseg < nsegs; iseg++) { - if(iseg < (nsegs - 1)) { - t = myts + (((1.0 - myts) * ((double)(iseg + 1))) / ((double)nsegs)); - } else { - t = 1.0; - } - res = dk3xsp_calculate(&seg, t, 1); - if(!(res)) { - if(ec) { *ec = DK3_ERROR_MATH_OVERFLOW; } - } - x = dk3xsp_get_x(&seg); - y = dk3xsp_get_y(&seg); - dxdt = dk3xsp_get_dxdt(&seg); - dydt = dk3xsp_get_dydt(&seg); - dxdt = (factor * dxdt) / 3.0; - dydt = (factor * dydt) / 3.0; - f2lud_fig_curveto( - job, drw, obj, - dk3ma_d_add_ok(lastx, lastdxdt, ec), - dk3ma_d_add_ok(lasty, lastdydt, ec), - dk3ma_d_sub_ok(x, dxdt, ec), - dk3ma_d_sub_ok(y, dydt, ec), - x, y, - ec - ); - lastx = x; lasty = y; lastdxdt = dxdt; lastdydt = dydt; - } - } else { - res = dk3xsp_calculate(&seg, 1.0, 0); - if(!(res)) { - if(ec) { *ec = DK3_ERROR_MATH_OVERFLOW; } - /* ERROR: Math */ - dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 36); - f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_MATH); - -#line 1722 "f2lud.ctr" - } - x = dk3xsp_get_x(&seg); - y = dk3xsp_get_y(&seg); - f2lud_fig_lineto(job, drw, obj, x, y, ec); - } - } else { - if(ec) { *ec = DK3_ERROR_MATH_OVERFLOW; } - f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_MATH); - -#line 1730 "f2lud.ctr" - } - - -#line 1732 "f2lud.ctr" -} - - - - -/** Create path for the single partial X-spline segment cutted on both ends - from closed X-spline. - @param job Job structure. - @param drw Fig drawing. - @param obj Fig object. - @param sp Spline points array. - @param np Number of spline points. - @param i Current segment index. - @param ts Parameter t for start point. - @param te Parameter t for end point. - @param isfirst Flag: First segment. - @param iscl Flag: Closed spline. - @param primary Flag: Primary (1=primary object, 0=arrowhead). - @param ec Pointer to error code variable, may be NULL. -*/ -static -void -f2lud_single_spline_segment( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - dk3_fig_spline_point_t *sp, - size_t np, - size_t i, - double ts, - double te, - int isfirst, - int DK3_SILENCE_ARG_UNUSED(iscl), - int primary, - int *ec -) -{ - dk3_xspline_segment_t seg; /* Segment for caluclation. */ - dk3_fig_spline_point_t *pa = NULL; /* Left neighbour. */ - dk3_fig_spline_point_t *pb = NULL; /* Start. */ - dk3_fig_spline_point_t *pc = NULL; /* End. */ - dk3_fig_spline_point_t *pd = NULL; /* Right neighbour. */ - double myte; /* t for end. */ - double myts; /* t for start. */ - double dnumsegs; /* Number of segments. */ - double factor; /* Scale factor for deriv. */ - double t; /* Current t. */ - double x; /* Bezier end x. */ - double y; /* Bezier end y. */ - double dxdt; /* Bezier dx/dt at end. */ - double dydt; /* Bezier dy/dt at end. */ - double lastx = 0.0; /* Bezier start x. */ - double lasty = 0.0; /* Bezier start y. */ - double lastdxdt = 0.0; /* dx/dt at start. */ - double lastdydt = 0.0; /* dy/dt at end. */ - size_t nsegs; /* Number of segments. */ - size_t iseg; /* Current segment. */ - int res; /* Calculation result. */ - - -#line 1791 "f2lud.ctr" - DK3_UNUSED_ARG(iscl) - myte = dk3ma_d_sub_ok(te, floor(te), ec); - myts = dk3ma_d_sub_ok(ts, floor(ts), ec); - dnumsegs = (myte - myts) * dk3fig_tool_xssbs(drw, primary); - dnumsegs = ceil(dnumsegs); - -#line 1796 "f2lud.ctr" - nsegs = dk3ma_d_to_sz_ok(dnumsegs, ec); - pb = &(sp[i]); - pc = &(sp[i + 1]); - if(0 < i) { - pa = &(sp[i - 1]); - } - if(i < (np - 2)) { - pd = &(sp[i + 2]); - } - factor = (myte - myts) / ((double)nsegs); - dk3xsp_reset(&seg); - if(job->cosp) { dk3xsp_set_cb(&seg, 1); } - dk3xsp_set(&seg, pa, pb, pc, pd); - if(dk3xsp_calculate(&seg, myts, 1)) { - lastx = dk3xsp_get_x(&seg); - lasty = dk3xsp_get_y(&seg); - lastdxdt = dk3xsp_get_dxdt(&seg); - lastdydt = dk3xsp_get_dydt(&seg); - lastdxdt = (factor * lastdxdt) / 3.0; - lastdydt = (factor * lastdydt) / 3.0; - if(isfirst) { - f2lud_fig_moveto(job, drw, obj, lastx, lasty, ec); - } - if(1.0e-6 < (myte - myts)) { - for(iseg = 0; iseg < nsegs; iseg++) { - if(iseg < (nsegs - 1)) { - t = myts + (((myte - myts) * ((double)(iseg + 1))) / ((double)nsegs)); - } else { - t = myte; - } - res = dk3xsp_calculate(&seg, t, 1); - if(!(res)) { - if(ec) { *ec = DK3_ERROR_MATH_OVERFLOW; } - } - x = dk3xsp_get_x(&seg); - y = dk3xsp_get_y(&seg); - dxdt = dk3xsp_get_dxdt(&seg); - dydt = dk3xsp_get_dydt(&seg); - dxdt = (factor * dxdt) / 3.0; - dydt = (factor * dydt) / 3.0; - f2lud_fig_curveto( - job, drw, obj, - dk3ma_d_add_ok(lastx, lastdxdt, ec), - dk3ma_d_add_ok(lasty, lastdydt, ec), - dk3ma_d_sub_ok(x, dxdt, ec), - dk3ma_d_sub_ok(y, dydt, ec), - x, y, - ec - ); - lastx = x; lasty = y; lastdxdt = dxdt; lastdydt = dydt; - } - } else { - res = dk3xsp_calculate(&seg, myte, 0); - if(!(res)) { - if(ec) { *ec = DK3_ERROR_MATH_OVERFLOW; } - /* ERROR: Calculation failed! */ - dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 36); - f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_MATH); - -#line 1854 "f2lud.ctr" - } - x = dk3xsp_get_x(&seg); - y = dk3xsp_get_y(&seg); - f2lud_fig_lineto(job, drw, obj, x, y, ec); - } - } else { - if(ec) { *ec = DK3_ERROR_MATH_OVERFLOW; } - /* ERROR: Calculation failed! */ - dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 36); - f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_MATH); - -#line 1864 "f2lud.ctr" - } - - -#line 1866 "f2lud.ctr" -} - - - - -/** Create path for one complete X-spline segment from closed X-spline. - @param job Job structure. - @param drw Fig drawing. - @param obj Fig object. - @param sp Spline points array. - @param np Number of spline points. - @param i Current segment index. - @param isfirst Flag: First segment. - @param iscl Flag: Closed spline. - @param primary Flag: Primary (1=primary object, 0=arrowhead). - @param ec Pointer to error code variable, may be NULL. -*/ -static -void -f2lud_full_spline_segment( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - dk3_fig_spline_point_t *sp, - size_t np, - size_t i, - int isfirst, - int iscl, - int primary, - int *ec -) -{ - dk3_xspline_segment_t seg; /* Segment for caluclation. */ - dk3_fig_spline_point_t *pa = NULL; /* Left neighbour. */ - dk3_fig_spline_point_t *pb = NULL; /* Start. */ - dk3_fig_spline_point_t *pc = NULL; /* End. */ - dk3_fig_spline_point_t *pd = NULL; /* Right neighbour. */ - double factor; /* Scale factor for deriv. */ - double t; /* Current t. */ - double x; /* Bezier end x. */ - double y; /* Bezier end y. */ - double dxdt; /* Bezier dx/dt at end. */ - double dydt; /* Bezier dy/dt at end. */ - double lastx = 0.0; /* Bezier start x. */ - double lasty = 0.0; /* Bezier start y. */ - double lastdxdt = 0.0; /* dx/dt at start. */ - double lastdydt = 0.0; /* dy/dt at end. */ - size_t xsss; /* Number of segments. */ - size_t iseg; /* Current segment. */ - size_t ic; - size_t id; - int res; /* Calculation result. */ - - -#line 1919 "f2lud.ctr" - if(i < ((iscl) ? np : (np - 1))) { - pb = &(sp[i]); - ic = i + 1; while(ic >= np) { ic = ic - np; } - pc = &(sp[ic]); - if(i > 0) { - pa = &(sp[i - 1]); - } else { - if(iscl) { - pa = &(sp[np - 1]); - } - } - if(i < (np - 2)) { - pd = &(sp[i + 2]); - } else { - if(iscl) { - id = i + 2; while(id >= np) { id = id - np; } - pd = &(sp[id]); - } - } - xsss = dk3fig_tool_xssbs(drw, primary); - factor = 1.0 / (double)xsss; - dk3xsp_reset(&seg); - if(job->cosp) { dk3xsp_set_cb(&seg, 1); } - dk3xsp_set(&seg, pa, pb, pc, pd); - if(dk3xsp_calculate(&seg, 0.0, 1)) { - lastx = dk3xsp_get_x(&seg); - lasty = dk3xsp_get_y(&seg); - lastdxdt = dk3xsp_get_dxdt(&seg); - lastdydt = dk3xsp_get_dydt(&seg); - lastdxdt = (factor * lastdxdt) / 3.0; - lastdydt = (factor * lastdydt) / 3.0; - if(isfirst) { - f2lud_fig_moveto(job, drw, obj, lastx, lasty, ec); - } - for(iseg = 0; iseg < xsss; iseg++) { - if(iseg < (xsss - 1)) { - t = (double)(iseg + 1) / (double)xsss; - } else { - t = 1.0; - } - res = dk3xsp_calculate(&seg, t, 1); - if(!(res)) { - if(ec) { *ec = DK3_ERROR_MATH_OVERFLOW; } - } - x = dk3xsp_get_x(&seg); - y = dk3xsp_get_y(&seg); - dxdt = dk3xsp_get_dxdt(&seg); - dydt = dk3xsp_get_dydt(&seg); - dxdt = (factor * dxdt) / 3.0; - dydt = (factor * dydt) / 3.0; - f2lud_fig_curveto( - job, drw, obj, - dk3ma_d_add_ok(lastx, lastdxdt, ec), - dk3ma_d_add_ok(lasty, lastdydt, ec), - dk3ma_d_sub_ok(x, dxdt, ec), - dk3ma_d_sub_ok(y, dydt, ec), - x, - y, - ec - ); - lastx = x; lasty = y; lastdxdt = dxdt; lastdydt = dydt; - } - } else { - if(ec) { *ec = DK3_ERROR_MATH_OVERFLOW; } - } - } else { - /* ERROR: BUG: Wrong i */ - } - -#line 1987 "f2lud.ctr" -} - - - -/** Create path for open spline object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param primary Flag: Primary object (1=object, 0=arrowhead). - @param ec Pointe to error code variable, may be NULL. -*/ -static -void -f2lud_create_open_spline_path( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int primary, - int *ec -) -{ - dk3_fig_spline_point_t *sp; /* Spline points. */ - size_t np; /* Number of points. */ - size_t i; /* Current segment index. */ - size_t min; /* Minimum t value. */ - size_t max; /* Maximum t value. */ - - -#line 2014 "f2lud.ctr" - sp = (obj->dt).spl.po; - np = (obj->dt).spl.np; - - if(job->coah) { - -#line 2018 "f2lud.ctr" - for(i = 0; i < (np - 1); i++) { - f2lud_full_spline_segment( - job, drw, obj, sp, np, i, ((0 == i) ? 1 : 0), 0, primary, ec - ); - } - } else { - -#line 2024 "f2lud.ctr" - if(obj->ab) { - -#line 2025 "f2lud.ctr" - /* 2013-11-23 - ROUNDING DOWNWARDS INTENDED. - We want to find the start segment. - */ - min = dk3ma_d_to_sz_ok(floor((obj->dt).spl.ts), ec); - if(obj->af) { - -#line 2031 "f2lud.ctr" - if((obj->dt).spl.te >= (obj->dt).spl.ts) { - -#line 2032 "f2lud.ctr" - /* 2013-11-23 - ROUNDING DOWNWARDS INTENDED. - We want to find the last full segment to draw. - */ - max = dk3ma_d_to_sz_ok(floor((obj->dt).spl.te), ec); - if(max > min) { - -#line 2038 "f2lud.ctr" - f2lud_first_spline_segment( - job, drw, obj, sp, np, min, (obj->dt).spl.ts, 1, 0, primary, ec - ); - /* 2012-12-04 Bugfix: Only to max. - */ -#if VERSION_BEFORE_20121204 - for(i = (min + 1); i < (np - 1); i++) { - f2lud_full_spline_segment( - job, drw, obj, sp, np, i, 0, 0, primary, ec - ); - } -#else - for(i = (min + 1); i < max; i++) { - f2lud_full_spline_segment( - job, drw, obj, sp, np, i, 0, 0, primary, ec - ); - } -#endif - f2lud_final_spline_segment( - job, drw, obj, sp, np, max, (obj->dt).spl.te, 0, 0, primary, ec - ); - } else { - -#line 2060 "f2lud.ctr" - f2lud_single_spline_segment( - job, drw, obj, sp, np, min, (obj->dt).spl.ts, (obj->dt).spl.te, - 1, 0, primary, ec - ); - } - } else { - -#line 2066 "f2lud.ctr" - /* ERROR: Arrowheads too long for spline! */ - dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 37); - f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYNTAX); - -#line 2069 "f2lud.ctr" - } - } else { - -#line 2071 "f2lud.ctr" - f2lud_first_spline_segment( - job, drw, obj, sp, np, min, (obj->dt).spl.ts, 1, 0, primary, ec - ); - for(i = (min + 1); i < (np - 1); i++) { - f2lud_full_spline_segment( - job, drw, obj, sp, np, i, 0, 0, primary, ec - ); - } - } - } else { - -#line 2081 "f2lud.ctr" - if(obj->af) { - -#line 2082 "f2lud.ctr" - /* 2013-11-23 - ROUNDING DOWNWARDS INTENDED. - We want to find the last full segment. - */ - max = dk3ma_d_to_sz_ok(floor((obj->dt).spl.te), ec); - if(max < (np - 1)) { - -#line 2088 "f2lud.ctr" - if(max > 0) { - -#line 2089 "f2lud.ctr" - for(i = 0; i < max; i++) { - f2lud_full_spline_segment( - job, drw, obj, sp, np, i, ((0 == i) ? 1 : 0), 0, primary, ec - ); - } - f2lud_final_spline_segment( - job, drw, obj, sp, np, max, (obj->dt).spl.te, 0, 0, primary, ec - ); - } else { - -#line 2098 "f2lud.ctr" - f2lud_final_spline_segment( - job, drw, obj, sp, np, max, (obj->dt).spl.te, 1, 0, primary, ec - ); - } - } else { - -#line 2103 "f2lud.ctr" - /* ERROR: Illegal max value! */ - dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 39); - f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_UNKNOWN); - -#line 2106 "f2lud.ctr" - } - } else { - -#line 2108 "f2lud.ctr" - for(i = 0; i < (np - 1); i++) { - f2lud_full_spline_segment( - job, drw, obj, sp, np, i, ((0 == i) ? 1 : 0), 0, primary, ec - ); - } - } - } - } - - -#line 2117 "f2lud.ctr" -} - - - -/** Create path for open spline object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param primary Flag: Primary object (1=object, 0=arrowhead). - @param ec Pointe to error code variable, may be NULL. -*/ -static -void -f2lud_create_open_fast_spline_path( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int DK3_SILENCE_ARG_UNUSED(primary), - int *ec -) -{ - dk3_fig_spline_point_t *po; - size_t np; - size_t ib; - size_t ic; - double dxdtb; - double dydtb; - double dxdtc; - double dydtc; - - -#line 2147 "f2lud.ctr" - DK3_UNUSED_ARG(primary) - po = (obj->dt).spl.po; - np = (obj->dt).spl.np; - if (np > 1) { - for (ib = 0; ib < (np - 1); ib++) { - ic = ib + 1; - if (0 == ib) { - /* MOVETO */ - f2lud_fig_moveto(job, drw, obj, po[ib].x, po[ib].y, ec); - } - if ((fabs(po[ib].s) < 1.0e-6) && (fabs(po[ic].s) < 1.0e-6)) { - /* LINETO */ - f2lud_fig_lineto(job, drw, obj, po[ic].x, po[ic].y, ec); - } else { - dxdtb = dxdtc = dk3ma_d_sub_ok(po[ic].x, po[ib].x, ec); - dydtb = dydtc = dk3ma_d_sub_ok(po[ic].y, po[ib].y, ec); - if ((0 < ib) && (fabs(1.0 + po[ib].s) < 1.0e-6)) { - dxdtb = f2lpara_derived_center(po[ib-1].x, po[ib].x, po[ic].x, ec); - dydtb = f2lpara_derived_center(po[ib-1].y, po[ib].y, po[ic].y, ec); - } else { - if ((ic < (np - 1)) && (fabs(1.0 + po[ic].s) < 1.0e-6)) { - dxdtb = f2lpara_derived_left(po[ib].x, po[ic].x, po[ic+1].x, ec); - dydtb = f2lpara_derived_left(po[ib].y, po[ic].y, po[ic+1].y, ec); - } - } - if ((ic < (np - 1)) && (1.0 + fabs(po[ic].s) < 1.0e-6)) { - dxdtc = f2lpara_derived_center(po[ib].x, po[ic].x, po[ic+1].x, ec); - dydtc = f2lpara_derived_center(po[ib].y, po[ic].y, po[ic+1].y, ec); - } else { - if ((0 < ib) && (fabs(1.0 + po[ib].s) < 1.0e-6)) { - dxdtc = f2lpara_derived_right(po[ib-1].x, po[ib].x, po[ic].x, ec); - dydtc = f2lpara_derived_right(po[ib-1].y, po[ib].y, po[ic].y, ec); - } - } - /* CURVETO */ - f2lud_fig_curveto( - job, drw, obj, - dk3ma_d_add_ok(po[ib].x, (dxdtb / 3.0), ec), - dk3ma_d_add_ok(po[ib].y, (dydtb / 3.0), ec), - dk3ma_d_sub_ok(po[ic].x, (dxdtc / 3.0), ec), - dk3ma_d_sub_ok(po[ic].y, (dydtc / 3.0), ec), - po[ic].x, - po[ic].y, - ec - ); - } - } - } - -#line 2195 "f2lud.ctr" -} - - - -/** Create path for closed spline object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param primary Flag: Primary object (1=object, 0=arrowhead). - @param ec Pointe to error code variable, may be NULL. -*/ -static -void -f2lud_create_closed_spline_path( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int primary, - int *ec -) -{ - dk3_fig_spline_point_t *sp; /* Spline points. */ - size_t np; /* Number of points. */ - size_t i; /* Current segment index. */ - - -#line 2220 "f2lud.ctr" - sp = (obj->dt).spl.po; - np = (obj->dt).spl.np; - for(i = 0; i < np; i++) { - f2lud_full_spline_segment( - job, drw, obj, sp, np, i, ((0 == i) ? 1 : 0), 1, primary, ec - ); - } - - -#line 2228 "f2lud.ctr" -} - -/** Create path for closed spline object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param primary Flag: Primary object (1=object, 0=arrowhead). - @param ec Pointe to error code variable, may be NULL. -*/ -static -void -f2lud_create_closed_fast_spline_path( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int DK3_SILENCE_ARG_UNUSED(primary), - int *ec -) -{ - dk3_fig_spline_point_t *po; - size_t np; - size_t ib; - size_t ic; - size_t ia; - size_t id; - double dxdtb; - double dydtb; - double dxdtc; - double dydtc; - - -#line 2258 "f2lud.ctr" - DK3_UNUSED_ARG(primary) - po = (obj->dt).spl.po; - np = (obj->dt).spl.np; - if (2 < np) { - for (ib = 0; ib < np; ib++) { - ic = ib + 1; - id = ib + 2; - if (ic >= np) { ic = ic - np; } - if (id >= np) { id = id - np; } - if (0 < ib) { - ia = ib - 1; - } else { - ia = np - 1; - } - if (0 == ib) { - /* MOVETO */ - f2lud_fig_moveto(job, drw, obj, po[ib].x, po[ib].y, ec); - } - if ((fabs(po[ib].s) < 1.0e-6) && (fabs(po[ic].s) < 1.0e-6)) { - /* LINETO */ - f2lud_fig_lineto(job, drw, obj, po[ic].x, po[ic].y, ec); - } else { - dxdtb = dxdtc = dk3ma_d_sub_ok(po[ic].x, po[ib].x, ec); - dydtb = dydtc = dk3ma_d_sub_ok(po[ic].y, po[ib].y, ec); - if (fabs(1.0 + po[ib].s) < 1.0e-6) { - dxdtb = f2lpara_derived_center(po[ia].x, po[ib].x, po[ic].x, ec); - dydtb = f2lpara_derived_center(po[ia].y, po[ib].y, po[ic].y, ec); - } else { - if (fabs(1.0 + po[ic].s) < 1.0e-6) { - dxdtb = f2lpara_derived_left(po[ib].x, po[ic].x, po[id].x, ec); - dydtb = f2lpara_derived_left(po[ib].y, po[ic].y, po[id].y, ec); - } - } - if (fabs(1.0 + po[ic].s) < 1.0e-6) { - dxdtc = f2lpara_derived_center(po[ib].x, po[ic].x, po[id].x, ec); - dydtc = f2lpara_derived_center(po[ib].y, po[ic].y, po[id].y, ec); - } else { - if (fabs(1.0 + po[ib].s) < 1.0e-6) { - dxdtc = f2lpara_derived_right(po[ia].x, po[ib].x, po[ic].x, ec); - dydtc = f2lpara_derived_right(po[ia].y, po[ib].y, po[ic].y, ec); - } - } - /* CURVETO */ - f2lud_fig_curveto( - job, drw, obj, - dk3ma_d_add_ok(po[ib].x, (dxdtb / 3.0), ec), - dk3ma_d_add_ok(po[ib].y, (dydtb / 3.0), ec), - dk3ma_d_sub_ok(po[ic].x, (dxdtc / 3.0), ec), - dk3ma_d_sub_ok(po[ic].y, (dydtc / 3.0), ec), - po[ic].x, - po[ic].y, - ec - ); - } - } - } - - -#line 2315 "f2lud.ctr" -} - - - -/** Create path for open arc object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param iscl Flag: Closed arc. - @param ec Pointe to error code variable, may be NULL. -*/ -static -void -f2lud_create_arc_path( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int iscl, - int *ec -) -{ - double sx; /* Start x. */ - double sy; /* Start y. */ - double cx; /* Center x. */ - double cy; /* Center y. */ - double r; /* Radius. */ - double as; /* Arc start angle in radians. */ - double ae; /* Arc end angle in radians. */ - double lastx; /* Segment start x. */ - double lasty; /* Segment start y. */ - double lastkdxdt; /* X difference to first control. */ - double lastkdydt; /* Y difference to first control. */ - double x; /* Segment end x. */ - double y; /* Segment end y. */ - double kdxdt; /* X difference to last control. */ - double kdydt; /* Y difference to last control. */ - double dnumsegs; /* Number of segments. */ - double alpha; /* Arc angle in radians. */ - double alphaseg; /* Segment angle in radians. */ - double kappa; /* Factor for derivative. */ - double alphaend; /* Segment end angle in radians. */ - size_t nsegs; /* Number of segments. */ - size_t i; /* Index of current segment. */ - - -#line 2359 "f2lud.ctr" - cx = (obj->dt).arc.xc; - cy = (obj->dt).arc.yc; - r = (obj->dt).arc.ra; - if((obj->dt).arc.as < (obj->dt).arc.ae) { - as = (obj->dt).arc.as; - ae = (obj->dt).arc.ae; - } else { - as = (obj->dt).arc.ae; - ae = (obj->dt).arc.as; - } - alpha = dk3ma_d_sub_ok(ae, as, ec); - dnumsegs = ceil(dk3ma_d_mul_ok(4.0, (alpha / M_PI), ec)); - - -#line 2372 "f2lud.ctr" - nsegs = dk3ma_d_to_sz_ok(dnumsegs, ec); - alphaseg = alpha / ((double)nsegs); - kappa = dk3fig_tool_arc_kappa(alphaseg, ec); - sx = lastx = dk3ma_d_add_ok(cx, (r * cos(as)), ec); - sy = lasty = dk3ma_d_add_ok(cy, (r * sin(as)), ec); - f2lud_fig_moveto(job, drw, obj, lastx, lasty, ec); - lastkdxdt = dk3ma_d_mul_ok( - kappa, - (-1.0 * dk3ma_d_mul_ok(r, alphaseg, ec) * sin(as)), - ec - ); - lastkdydt = dk3ma_d_mul_ok( - kappa, - (dk3ma_d_mul_ok(r, alphaseg, ec) * cos(as)), - ec - ); - for(i = 0; i < nsegs; i++) { - if(i < (nsegs - 1)) { - alphaend = dk3ma_d_add_ok( - as, - dk3ma_d_mul_ok(dk3ma_d_add_ok(1.0, (double)i, ec), alphaseg, ec), - ec - ); - } else { - alphaend = ae; - } - x = dk3ma_d_add_ok(cx, (r * cos(alphaend)), ec); - y = dk3ma_d_add_ok(cy, (r * sin(alphaend)), ec); - kdxdt = dk3ma_d_mul_ok( - kappa, - (-1.0 * dk3ma_d_mul_ok(r, alphaseg, ec) * sin(alphaend)), - ec - ); - kdydt = dk3ma_d_mul_ok( - kappa, - (dk3ma_d_mul_ok(r, alphaseg, ec) * cos(alphaend)), - ec - ); - f2lud_fig_curveto( - job, drw, obj, - dk3ma_d_add_ok(lastx, lastkdxdt, ec), - dk3ma_d_add_ok(lasty, lastkdydt, ec), - dk3ma_d_sub_ok(x, kdxdt, ec), - dk3ma_d_sub_ok(y, kdydt, ec), - x, y, - ec - ); - lastx = x; lasty = y; lastkdxdt = kdxdt; lastkdydt = kdydt; - } - /* For closed arc draw the lines. - */ - if(iscl) { - f2lud_fig_lineto(job, drw, obj, cx, cy, ec); - f2lud_fig_lineto(job, drw, obj, sx, sy, ec); - } - - -#line 2428 "f2lud.ctr" -} - - - -/** Create path for half circle object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param ec Pointe to error code variable, may be NULL. -*/ -static -void -f2lud_create_half_circle_path( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int *ec -) -{ - dk3_fig_poly_point_t po[7]; /* Points to construct path. */ - size_t i; /* Current point index */ - - -#line 2450 "f2lud.ctr" - po[0].x = 0.0; - po[0].y = (obj->dt).hci.ra; - po[1].x = -1.0 * FIG2LAT_CIRCLE_QUADRANT_BEZIER * (obj->dt).hci.ra; - po[1].y = (obj->dt).hci.ra; - po[2].x = -1.0 * (obj->dt).hci.ra; - po[2].y = FIG2LAT_CIRCLE_QUADRANT_BEZIER * (obj->dt).hci.ra; - po[3].x = -1.0 * (obj->dt).hci.ra; - po[3].y = 0.0; - po[4].x = -1.0 * (obj->dt).hci.ra; - po[4].y = -1.0 * FIG2LAT_CIRCLE_QUADRANT_BEZIER * (obj->dt).hci.ra; - po[5].x = -1.0 * FIG2LAT_CIRCLE_QUADRANT_BEZIER * (obj->dt).hci.ra; - po[5].y = -1.0 * (obj->dt).hci.ra; - po[6].x = 0.0; - po[6].y = -1.0 * (obj->dt).hci.ra; - if(1.0e-6 < fabs((obj->dt).hci.an)) { - for(i = 0; i < 7; i++) { - dk3fig_tool_rotate_point(&(po[i]), (obj->dt).hci.an, ec); - } - } - for(i = 0; i < 7; i++) { - dk3fig_tool_shift_point(&(po[i]), (obj->dt).hci.cx, (obj->dt).hci.cy, ec); - } - f2lud_fig_moveto(job, drw, obj, po[0].x, po[0].y, ec); - f2lud_fig_curveto( - job, drw, obj, po[1].x, po[1].y, po[2].x, po[2].y, po[3].x, po[3].y, ec - ); - f2lud_fig_curveto( - job, drw, obj, po[4].x, po[4].y, po[5].x, po[5].y, po[6].x, po[6].y, ec - ); - if(obj->st) { - f2lud_fig_lineto(job, drw, obj, po[0].x, po[0].y, ec); - } - - -#line 2483 "f2lud.ctr" -} - - - -/** Create path for object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param ec Pointe to error code variable, may be NULL. - @param primary Flag: Primary object (1=object, 0=arrowhead). -*/ -static -void -f2lud_create_path( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int primary, - int *ec -) -{ - - -#line 2505 "f2lud.ctr" - switch(obj->ot) { - case DK3_FIG_OBJ_ELLIPSE: { - f2lud_create_ellipse_path(job, drw, obj, ec); - } break; - case DK3_FIG_OBJ_POLYLINE: { - switch(obj->st) { - case 1: { /* Polyline */ - f2lud_create_polygon_path(job, drw, obj, ec); - } break; - case 2: { /* Box */ - f2lud_create_box_path(job, drw, obj, ec); - } break; - case 3: { /* Polygon */ - f2lud_create_polygon_path(job, drw, obj, ec); - } break; - case 4: { /* Arc-box */ - f2lud_create_arc_box_path(job, drw, obj, ec); - } break; - } - } break; - case DK3_FIG_OBJ_SPLINE: { - switch(obj->st) { - case 0: case 2: case 4: { /* open spline */ - f2lud_create_open_spline_path(job, drw, obj, primary, ec); - } break; - case 1: case 3: case 5: { /* closed spline */ - f2lud_create_closed_spline_path(job, drw, obj, primary, ec); - } break; - } - } break; - case DK3_FIG_OBJ_ARC: { - switch(obj->st) { - case 1: { /* open arc */ - f2lud_create_arc_path(job, drw, obj, 0, ec); - } break; - default: { /* closed arc */ - f2lud_create_arc_path(job, drw, obj, 1, ec); - } break; - } - } break; - case DK3_FIG_OBJ_PSEUDO_HALF_CIRCLE: { - f2lud_create_half_circle_path(job, drw, obj, ec); - } break; - case DK3_FIG_OBJ_PSEUDO_FAST_SPLINE: { - switch(obj->st) { - case 0: case 2: case 4: { /* open spline */ - f2lud_create_open_fast_spline_path(job, drw, obj, primary, ec); - } break; - case 1: case 3: case 5: { /* closed spline */ - f2lud_create_closed_fast_spline_path(job, drw, obj, primary, ec); - } break; - } - } break; - } - -#line 2559 "f2lud.ctr" -} - - - -/** Set color (stroke color for pdf/pgf). - If we already have a color 1 equal to the new color - the operation is skipped. - @param job Conversion job structure. - @param drw Drawing structure. - @param colno Color number. - @param fillstyle Fill style used in the object. - Depending on the fillstyle it might be necessary - to create a shade of the color. -*/ -static -void -f2lud_set_color_1( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - int colno, - int fillstyle -) -{ - dk3_rgb_color_t rgb; /* Color structure to fill. */ - int muc = 1; /* Flag: Must configure. */ -#if 0 - int ec = 0; /* Error code variable. */ -#endif - - -#line 2588 "f2lud.ctr" - dk3fig_tool_find_color(&rgb, drw, colno, fillstyle); -#if 0 - if((job->gs).hc1) { - if(1.0e-6 > fabs(dk3ma_d_sub_ok(rgb.r, (job->gs).c1.r, &ec))) { - if(1.0e-6 > fabs(dk3ma_d_sub_ok(rgb.g, (job->gs).c1.g, &ec))) { - if(1.0e-6 > fabs(dk3ma_d_sub_ok(rgb.b, (job->gs).c1.b, &ec))) { - if(0 == ec) { - muc = 0; - } - } - } - } - } -#else - muc = dk3fig_tool_must_set_color( - (job->gs).hc1, (job->gs).c1.r, (job->gs).c1.g, (job->gs).c1.b, - rgb.r, rgb.g, rgb.b - ); -#endif - if(muc) { - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_set_color_1(job, drw, &rgb); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_set_color_1(job, drw, &rgb); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_set_color_1(job, drw, &rgb); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_set_color_1(job, drw, &rgb); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_set_color_1(job, drw, &rgb); - } break; - /* @DRIVER@ universal */ - default: { - f2lpgf_pgf_set_color_1(job, drw, &rgb); - } break; - } - (job->gs).c1.r = rgb.r; - (job->gs).c1.g = rgb.g; - (job->gs).c1.b = rgb.b; - (job->gs).hc1 = 1; - } - - -#line 2635 "f2lud.ctr" -} - - - -/** Set non-stroking color for pdf/pgf. - If we already have a color 2 equal to the new color - the operation is skipped. - @param job Job structure. - @param drw Drawing structure. - @param colno Color number. - @param fillstyle Fill style used in the object. - Depending on the fillstyle it might be necessary - to create a shade of the color. -*/ -static -void -f2lud_set_color_2( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - int colno, - int fillstyle -) -{ - dk3_rgb_color_t rgb; /* Color structure to fill. */ -#if 0 - int ec = 0; /* Error code variable. */ -#endif - int muc = 1; /* Flag: Must configure. */ - - -#line 2664 "f2lud.ctr" - - dk3fig_tool_find_color(&rgb, drw, colno, fillstyle); -#if 0 - if((job->gs).hc2) { - if(1.0e-6 > fabs(dk3ma_d_sub_ok(rgb.r, (job->gs).c2.r, &ec))) { - if(1.0e-6 > fabs(dk3ma_d_sub_ok(rgb.g, (job->gs).c2.g, &ec))) { - if(1.0e-6 > fabs(dk3ma_d_sub_ok(rgb.b, (job->gs).c2.b, &ec))) { - if(0 == ec) { - muc = 0; - } - } - } - } - } -#else - muc = dk3fig_tool_must_set_color( - (job->gs).hc2, (job->gs).c2.r, (job->gs).c2.g, (job->gs).c2.b, - rgb.r, rgb.g, rgb.b - ); -#endif - if(muc) { - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_set_color_2(job, drw, &rgb); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_set_color_2(job, drw, &rgb); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_set_color_2(job, drw, &rgb); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_set_color_2(job, drw, &rgb); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_set_color_2(job, drw, &rgb); - } break; - /* @DRIVER@ universal */ - default: { - f2lpgf_pgf_set_color_2(job, drw, &rgb); - } break; - } - (job->gs).c2.r = rgb.r; - (job->gs).c2.g = rgb.g; - (job->gs).c2.b = rgb.b; - (job->gs).hc2 = 1; - } - - -#line 2712 "f2lud.ctr" -} - - - -/** Internal function to set line width. - The line width is not set again if we already - have a current line width equal to the new line width. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object. - @param lw New line width in output coordinates. -*/ -static -void -f2lud_internal_set_line_width( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - double lw -) -{ - int mc = 1; /* Flag: Must configure. */ - int ec = 0; /* Error code variable. */ - - -#line 2736 "f2lud.ctr" - if((job->gs).hlw) { - if(1.0e-6 > fabs(dk3ma_d_sub_ok(lw, (job->gs).lw, &ec))) { - if(0 == ec) { - mc = 0; - } - } - } - if(mc) { - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_set_line_width(job, drw, obj, lw); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_set_line_width(job, drw, obj, lw); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_set_line_width(job, drw, obj, lw); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_set_line_width(job, drw, obj, lw); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_set_line_width(job, drw, obj, lw); - } break; - /* @DRIVER@ universal */ - default: { - f2lpgf_pgf_set_line_width(job, drw, obj, lw); - } break; - } - (job->gs).lw = lw; - (job->gs).hlw = 1; - } - - -#line 2769 "f2lud.ctr" -} - - - -/** Set line dash (line style and dash/gap length). - The operation is skipped if the current line style and style - value is equal to the new one. - @param job Job structure. - @param drw Drawing structure. - @param obj Fig object. - @param ls Line style. - @param sv Style value (dash/gap) length in output units. -*/ -static -void -f2lud_internal_set_line_dash( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int ls, - double sv -) -{ - double mysv; /* Style value converted to output space. */ - double mylw; /* Line width in Fig and output space. */ - int mc = 1; /* Flag: Must configure. */ - int ec = 0; /* Error code variable. */ - - -#line 2797 "f2lud.ctr" - mysv = 0.9 * sv; - mylw = dk3fig_tool_get_lw(drw, obj, &ec); - /* Convert line width to output space. - */ - mylw = dk3ct_2d_r(&(job->ct2d), mylw, &ec); - if((job->gs).hls) { - if((job->gs).ls == ls) { - if(DK3_FIG_LS_SOLID == ls) { - mc = 0; - } else { - if(1.0e-6 > fabs(dk3ma_d_sub_ok((job->gs).sv, mysv, &ec))) { - if(0 == ec) { - if(DK3_FIG_LS_DASHED == ls) { - mc = 0; - } else { - if(1.0e-6 > fabs(dk3ma_d_sub_ok((job->gs).slw, mylw, &ec))) { - if(0 == ec) { - mc = 0; - } - } - } - } - } - } - } - } - if(mc) { - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_set_line_style(job, drw, obj, ls, mysv, mylw); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_set_line_style(job, drw, obj, ls, mysv, mylw); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_set_line_style(job, drw, obj, ls, mysv, mylw); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_set_line_style(job, drw, obj, ls, mysv, mylw); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_set_line_style(job, drw, obj, ls, mysv, mylw); - } break; - /* @DRIVER@ universal */ - default: { - f2lpgf_pgf_set_line_style(job, drw, obj, ls, mysv, mylw); - } break; - } - (job->gs).ls = ls; (job->gs).sv = mysv; (job->gs).slw = mylw; - (job->gs).hls = 1; - } - - -#line 2849 "f2lud.ctr" -} - - - -/** Set line ends. - The operation is skipped if the current line end is equal - to the new one. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object. - @param le Line end style. -*/ -static -void -f2lud_set_line_end( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int le -) -{ - int mc = 1; /* Flag: Must configure. */ - - -#line 2872 "f2lud.ctr" - if((job->gs).hlc) { - if((job->gs).lc == le) { - mc = 0; - } - } - if(mc) { - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_set_line_end(job, drw, obj, le); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_set_line_end(job, drw, obj, le); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_set_line_end(job, drw, obj, le); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_set_line_end(job, drw, obj, le); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_set_line_end(job, drw, obj, le); - } break; - /* @DRIVER@ universal */ - default: { - f2lpgf_pgf_set_line_end(job, drw, obj, le); - } break; - } - (job->gs).lc = le; (job->gs).hlc = 1; - } - - -#line 2902 "f2lud.ctr" -} - - - -/** Set line join. - The operation is skipped if the current line join is equal - to the new one. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object. - @param lj Line end style. -*/ -static -void -f2lud_set_line_join( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int lj -) -{ - int mc = 1; /* Flag: Must configure. */ - - -#line 2925 "f2lud.ctr" - if((job->gs).hlj) { - if((job->gs).lj == lj) { - mc = 0; - } - } - if(mc) { - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PGF: { - f2lpgf_tex_set_line_join(job, drw, obj, lj); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: { - f2lpdf_tex_with_pdf_set_line_join(job, drw, obj, lj); - } break; - case FIG2LAT_DRIVER_EPS_WITH_TEX: { - f2leps_eps_with_tex_set_line_join(job, drw, obj, lj); - } break; - case FIG2LAT_DRIVER_PDF_WITH_TEX: { - f2lpdf_pdf_with_tex_set_line_join(job, drw, obj, lj); - } break; - case FIG2LAT_DRIVER_EPS_STANDALONE: { - f2leps_eps_pure_set_line_join(job, drw, obj, lj); - } break; - /* @DRIVER@ universal */ - default: { - f2lpgf_pgf_set_line_join(job, drw, obj, lj); - } break; - } - (job->gs).lj = lj; (job->gs).hlj = 1; - } - - -#line 2955 "f2lud.ctr" -} - - - -/** Set up line style, line width, line ends and line join for pattern. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. -*/ -static -void -f2lud_set_pattern_line_style( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - - -#line 2973 "f2lud.ctr" -#if VERSION_BEFORE_20140330 - f2lud_internal_set_line_width(job, drw, obj, ((job->lighten) ? 0.45 : 0.9)); -#else - f2lud_internal_set_line_width(job, drw, obj, job->lwbp); -#endif - f2lud_internal_set_line_dash(job, drw, obj, DK3_FIG_LS_SOLID, -1.0); - f2lud_set_line_end(job, drw, obj, DK3_FIG_LC_BUTT); - f2lud_set_line_join(job, drw, obj, DK3_FIG_LJ_MITER); -#if 0 - /* 2012/11/18 - In fishscale patterns we draw arc by arc, not a sequence - of arcs. So we do not need to care about line join - of arcs. - */ - switch(obj->fi) { - case 56: case 57: { - f2lud_set_line_join(job, drw, obj, DK3_FIG_LJ_BEVEL); - } break; - default: { - f2lud_set_line_join(job, drw, obj, DK3_FIG_LJ_MITER); - } break; - } -#endif - - -#line 2997 "f2lud.ctr" -} - - - -/** Set line width. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. -*/ -static -void -f2lud_set_line_width( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - double lw; /* Line width in Fig space. */ - int ec = 0; /* Error code variable. */ - - -#line 3017 "f2lud.ctr" - lw = dk3fig_tool_get_lw(drw, obj, &ec); - lw = dk3ct_2d_r(&(job->ct2d), lw, &ec); - if(0 == ec) { - f2lud_internal_set_line_width(job, drw, obj, lw); - } - -#line 3022 "f2lud.ctr" -} - - - -/** Set line dash (line style and dash/gap length). - @param job Job structure. - @param drw Drawing structure. - @param obj Fig object. -*/ -static -void -f2lud_set_line_dash( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - - -#line 3040 "f2lud.ctr" - f2lud_internal_set_line_dash(job, drw, obj, obj->ls, (0.9 * obj->sv)); - - -#line 3042 "f2lud.ctr" -} - - - -/** Draw operations for object: stroke. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param ec Pointe to error code variable, may be NULL. - @param primary Flag: primary (1=primary object, 0=arrowhead). -*/ -static -void -f2lud_path_stroke( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int primary, - int *ec -) -{ - - -#line 3064 "f2lud.ctr" - f2lud_set_color_1(job, drw, obj->pc, 20); - f2lud_set_line_width(job, drw, obj); - f2lud_set_line_dash(job, drw, obj); - f2lud_set_line_end(job, drw, obj, obj->cs); - f2lud_set_line_join(job, drw, obj, obj->js); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - if(obj->cl) { - f2lud_closepath(job, drw, obj); - } - f2lud_stroke(job, drw, obj); - - -#line 3076 "f2lud.ctr" -} - - - -/** Draw operations for object: fill. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param ec Pointe to error code variable, may be NULL. - @param primary Flag: primary (1=primary object, 0=arrowhead). -*/ -static -void -f2lud_path_fill( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int primary, - int *ec -) -{ - - -#line 3098 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_PGF: - case FIG2LAT_DRIVER_TEX_FULL_PGF: - case FIG2LAT_DRIVER_TEX_FULL_PDF: - case FIG2LAT_DRIVER_PDF_WITH_TEX: - { - f2lud_set_color_2(job, drw, obj->fc, obj->fi); - } break; - default: { - f2lud_set_color_1(job, drw, obj->fc, obj->fi); - } break; - } - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_fill(job, drw, obj); - - -#line 3115 "f2lud.ctr" -} - - - -/** Draw operations for object: fill and stroke. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param ec Pointe to error code variable, may be NULL. - @param primary Flag: primary (1=primary object, 0=arrowhead). -*/ -static -void -f2lud_path_fill_stroke( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int primary, - int *ec -) -{ - - -#line 3137 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_PGF: - case FIG2LAT_DRIVER_TEX_FULL_PGF: - { - f2lud_set_color_2(job, drw, obj->fc, obj->fi); - f2lud_set_color_1(job, drw, obj->pc, 20); - f2lud_set_line_width(job, drw, obj); - f2lud_set_line_dash(job, drw, obj); - f2lud_set_line_end(job, drw, obj, obj->cs); - f2lud_set_line_join(job, drw, obj, obj->js); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_fill_stroke(job, drw, obj); - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: - case FIG2LAT_DRIVER_PDF_WITH_TEX: - { - f2lud_set_color_2(job, drw, obj->fc, obj->fi); - f2lud_set_color_1(job, drw, obj->pc, 20); - f2lud_set_line_width(job, drw, obj); - f2lud_set_line_dash(job, drw, obj); - f2lud_set_line_end(job, drw, obj, obj->cs); - f2lud_set_line_join(job, drw, obj, obj->js); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_fill(job, drw, obj); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_stroke(job, drw, obj); - } break; - default: { - f2lud_set_line_width(job, drw, obj); - f2lud_set_line_dash(job, drw, obj); - f2lud_set_line_end(job, drw, obj, obj->cs); - f2lud_set_line_join(job, drw, obj, obj->js); - f2lud_set_color_1(job, drw, obj->fc, obj->fi); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_fill(job, drw, obj); - f2lud_set_color_1(job, drw, obj->pc, obj->fi); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_stroke(job, drw, obj); - } break; - } - -#line 3187 "f2lud.ctr" -} - - - -/** Draw operations for object: pattern. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param ec Pointe to error code variable, may be NULL. - @param primary Flag: primary (1=primary object, 0=arrowhead). -*/ -static -void -f2lud_path_pattern( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int primary, - int *ec -) -{ - - -#line 3209 "f2lud.ctr" - f2lud_set_pattern_line_style(job, drw, obj); - f2lud_set_color_1(job, drw, obj->pc, 20); - f2lud_gsave(job, drw, obj); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_clip(job, drw, obj); - f2lud_pattern(job, drw, obj, ec); - f2lud_grestore(job, drw, obj); - - -#line 3219 "f2lud.ctr" -} - - - -/** Draw operations for object: pattern and stroke. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param ec Pointe to error code variable, may be NULL. - @param primary Flag: primary (1=primary object, 0=arrowhead). -*/ -static -void -f2lud_path_pattern_stroke( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int primary, - int *ec -) -{ - - -#line 3241 "f2lud.ctr" - f2lud_set_color_1(job, drw, obj->pc, 20); - f2lud_set_pattern_line_style(job, drw, obj); - f2lud_gsave(job, drw, obj); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_clip(job, drw, obj); - f2lud_pattern(job, drw, obj, ec); - f2lud_grestore(job, drw, obj); - f2lud_set_line_width(job, drw, obj); - f2lud_set_line_dash(job, drw, obj); - f2lud_set_line_end(job, drw, obj, obj->cs); - f2lud_set_line_join(job, drw, obj, obj->js); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_stroke(job, drw, obj); - - -#line 3259 "f2lud.ctr" -} - - - -/** Draw operations for object: fill and pattern. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param ec Pointe to error code variable, may be NULL. - @param primary Flag: primary (1=primary object, 0=arrowhead). -*/ -static -void -f2lud_path_fill_pattern( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int primary, - int *ec -) -{ - - -#line 3281 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_PGF: - case FIG2LAT_DRIVER_TEX_FULL_PGF: - { - f2lud_set_color_2(job, drw, obj->fc, obj->fi); - f2lud_set_color_1(job, drw, obj->pc, 20); - f2lud_set_pattern_line_style(job, drw, obj); - f2lud_gsave(job, drw, obj); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_fill_clip(job, drw, obj); - f2lud_pattern(job, drw, obj, ec); - f2lud_grestore(job, drw, obj); - } break; - default: { - switch(job->dr) { - case FIG2LAT_DRIVER_TEX_FULL_PDF: - case FIG2LAT_DRIVER_PDF_WITH_TEX: - { - f2lud_set_color_2(job, drw, obj->fc, obj->fi); - f2lud_set_color_1(job, drw, obj->pc, 20); - f2lud_set_pattern_line_style(job, drw, obj); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_fill(job, drw, obj); - f2lud_gsave(job, drw, obj); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_clip(job, drw, obj); - f2lud_pattern(job, drw, obj, ec); - f2lud_grestore(job, drw, obj); - } break; - default: { - f2lud_set_color_1(job, drw, obj->fc, obj->fi); - f2lud_set_pattern_line_style(job, drw, obj); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_fill(job, drw, obj); - f2lud_set_color_1(job, drw, obj->pc, 20); - f2lud_gsave(job, drw, obj); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_clip(job, drw, obj); - f2lud_pattern(job, drw, obj, ec); - f2lud_grestore(job, drw, obj); - } break; - } - } break; - } - -#line 3335 "f2lud.ctr" -} - - - -/** Check whether on object line style and line width - matches style and width configured in a dk3_graphics_state_t. - @param gs dk3_graphics_state_t to test. - @param ct2d Coordinates transformation data. - @param drw Drawing containing the Fig object. - @param obj Fig object. - @return 1 for equal line width and style, 0 otherwise. -*/ -static -int -f2lud_style_equal( - dk3_graphics_state_t *gs, - dk3_ct_2d_t *ct2d, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - double lw; /* Line width in Fig space. */ - int back = 0; - int ec = 0; /* Error code variable. */ -#if 0 - if((gs->hlw) && (gs->hls) && (gs->hlc) && (gs->hlj)) { - if((gs->ls = obj->ls) && (gs->lc == obj->cs) && (gs->lj == obj->js)) { - lw = dk3fig_tool_get_lw(drw, obj, &ec); - if(1.0e-6 > fabs(dk3ma_d_sub_ok(gs->lw, lw, &ec))) { - if(0 == ec) { - if(DK3_FIG_LS_SOLID == obj->ls) { - back = 1; - } else { - sv = 0.9 * obj->sv; - if(1.0e-6 > fabs(dk3ma_d_sub_ok(gs->sv, sv, &ec))) { - if(0 == ec) { - back = 1; - } - } - } - } - } - } - } -#else - /* 2012/11/15 As this operation is applied to closed path objects - only, there is no need to check line ends. - As fill patterns are drawn as solid lines, we only have - to check the object line style, whether it is solid. - For solid lines the style value is ignored. - */ - if((gs->hlw) && (gs->hls) && (gs->hlj)) { - if(DK3_FIG_LS_SOLID == obj->ls) { - if(gs->lj == obj->js) { - lw = dk3fig_tool_get_lw(drw, obj, &ec); - lw = dk3ct_2d_r(ct2d, lw, &ec); - if(1.0e-6 > fabs(dk3ma_d_sub_ok(gs->lw, lw, &ec))) { - if(0 == ec) { - back = 1; - } - } - } - } - } -#endif - return back; -} - - - -/** Draw operations for object: fill, pattern and stroke. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param ec Pointe to error code variable, may be NULL. - @param primary Flag: primary (1=primary object, 0=arrowhead). -*/ -static -void -f2lud_path_fill_pattern_stroke( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int primary, - int *ec -) -{ - - -#line 3423 "f2lud.ctr" - switch(job->dr) { - case FIG2LAT_DRIVER_PGF: - case FIG2LAT_DRIVER_TEX_FULL_PGF: - { - f2lud_set_color_2(job, drw, obj->fc, obj->fi); - f2lud_set_color_1(job, drw, obj->pc, 20); - f2lud_set_pattern_line_style(job, drw, obj); - if(f2lud_style_equal(&(job->gs), &(job->ct2d), drw, obj)) { - f2lud_gsave(job, drw, obj); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_fill_stroke_clip(job, drw, obj); - f2lud_pattern(job, drw, obj, ec); - f2lud_grestore(job, drw, obj); - } else { - f2lud_gsave(job, drw, obj); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_fill_clip(job, drw, obj); - f2lud_pattern(job, drw, obj, ec); - f2lud_grestore(job, drw, obj); - f2lud_set_line_width(job, drw, obj); - f2lud_set_line_dash(job, drw, obj); - f2lud_set_line_end(job, drw, obj, obj->cs); - f2lud_set_line_join(job, drw, obj, obj->js); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_stroke(job, drw, obj); - } - } break; - case FIG2LAT_DRIVER_TEX_FULL_PDF: - case FIG2LAT_DRIVER_PDF_WITH_TEX: - { - f2lud_set_color_2(job, drw, obj->fc, obj->fi); - f2lud_set_color_1(job, drw, obj->pc, 20); - f2lud_set_pattern_line_style(job, drw, obj); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_fill(job, drw, obj); - f2lud_gsave(job, drw, obj); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_clip(job, drw, obj); - f2lud_pattern(job, drw, obj, ec); - f2lud_grestore(job, drw, obj); - f2lud_set_line_width(job, drw, obj); - f2lud_set_line_dash(job, drw, obj); - f2lud_set_line_end(job, drw, obj, obj->cs); - f2lud_set_line_join(job, drw, obj, obj->js); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_stroke(job, drw, obj); - } break; - default: { - f2lud_set_color_1(job, drw, obj->fc, obj->fi); - f2lud_set_pattern_line_style(job, drw, obj); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_fill(job, drw, obj); - f2lud_set_color_1(job, drw, obj->pc, 20); - f2lud_gsave(job, drw, obj); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_clip(job, drw, obj); - f2lud_pattern(job, drw, obj, ec); - f2lud_grestore(job, drw, obj); - f2lud_set_line_width(job, drw, obj); - f2lud_set_line_dash(job, drw, obj); - f2lud_set_line_end(job, drw, obj, obj->cs); - f2lud_set_line_join(job, drw, obj, obj->js); - f2lud_newpath(job, drw, obj); - f2lud_create_path(job, drw, obj, primary, ec); - f2lud_closepath(job, drw, obj); - f2lud_stroke(job, drw, obj); - } break; - } - -#line 3507 "f2lud.ctr" -} - - - -/** Process path object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param primary Flag: primary (1=primary object, 0=arrowhead). -*/ -static -void -f2lud_path_object( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int primary -) -{ - int drawop; /* Operations to perform. */ - int ec = 0; /* Error code variable. */ - - -#line 3529 "f2lud.ctr" - drawop = dk3fig_tool_get_operation(drw, obj); - if(obj->cl) { - switch(drawop) { - case DK3_FIG_OP_STROKE: { - f2lud_path_stroke(job, drw, obj, primary, &ec); - } break; - case DK3_FIG_OP_FILL: { - f2lud_path_fill(job, drw, obj, primary, &ec); - } break; - case (DK3_FIG_OP_FILL | DK3_FIG_OP_STROKE): { - f2lud_path_fill_stroke(job, drw, obj, primary, &ec); - } break; - case DK3_FIG_OP_PATTERN: { - f2lud_path_pattern(job, drw, obj, primary, &ec); - } break; - case (DK3_FIG_OP_PATTERN | DK3_FIG_OP_STROKE): { - f2lud_path_pattern_stroke(job, drw, obj, primary, &ec); - } break; - case (DK3_FIG_OP_PATTERN | DK3_FIG_OP_FILL): { - f2lud_path_fill_pattern(job, drw, obj, primary, &ec); - } break; - case (DK3_FIG_OP_PATTERN | DK3_FIG_OP_FILL | DK3_FIG_OP_STROKE): { - f2lud_path_fill_pattern_stroke(job, drw, obj, primary, &ec); - } break; - } - } else { - if(DK3_FIG_OP_STROKE & drawop) { - f2lud_path_stroke(job, drw, obj, primary, &ec); - } - } - if(ec) { - /* ERROR: Math error in object! */ - dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 38); - f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_MATH); - -#line 3563 "f2lud.ctr" - } - -#line 3564 "f2lud.ctr" -} - - - -/** Process one object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param primary Flag: primary (1=primary object, 0=arrowhead). -*/ -static -void -f2lud_process_one( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - int primary -) -{ - char debbuf[256]; /* Buffer for debug messages. */ - - -#line 3585 "f2lud.ctr" - if(job->debug) { - sprintf(debbuf, f2lud_c8_kw[6], obj->ot, obj->st); - f2lud_debug(job, debbuf); - } - switch(obj->ot) { - case DK3_FIG_OBJ_TEXT: { - f2lud_text_object(job, drw, obj); - } break; - case DK3_FIG_OBJ_ELLIPSE: - case DK3_FIG_OBJ_SPLINE: - case DK3_FIG_OBJ_ARC: - case DK3_FIG_OBJ_PSEUDO_HALF_CIRCLE: - case DK3_FIG_OBJ_PSEUDO_FAST_SPLINE: - { - f2lud_path_object(job, drw, obj, primary); - } break; - case DK3_FIG_OBJ_POLYLINE: { - switch(obj->st) { - case 5: { - f2lud_image_object(job, drw, obj); - } break; - default: { - f2lud_path_object(job, drw, obj, primary); - } break; - } - } break; - } - if(job->debug) { - f2lud_debug(job, f2lud_c8_kw[7]); - } - -#line 3615 "f2lud.ctr" -} - - - -int -f2lud_is_interpolated_spline(dk3_fig_obj_t *obj) -{ - dk3_fig_spline_point_t *po; /* Points to test */ - size_t np; /* Number of points */ - size_t i; /* Traverse all points */ - int back = 1; - - -#line 3627 "f2lud.ctr" - po = (obj->dt).spl.po; - np = (obj->dt).spl.np; - for (i = 0; ((i < np) && (1 == back)); i++) { - - -#line 3631 "f2lud.ctr" - if (fabs(po->s) > 1.0e-6) { - if (fabs(1.0 + po->s) > 1.0e-6) { - back = 0; - } - } - po++; - } - -#line 3638 "f2lud.ctr" - return back; -} - - - -/** Process one arrowhead object. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. -*/ -static -void -f2lud_process_ah_one( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj -) -{ - switch (obj->ot) { - case DK3_FIG_OBJ_SPLINE: { - if ((!(job->xsah)) && (f2lud_is_interpolated_spline(obj))) { - obj->ot = DK3_FIG_OBJ_PSEUDO_FAST_SPLINE; - f2lud_process_one(job, drw, obj, 0); - obj->ot = DK3_FIG_OBJ_SPLINE; - } else { - f2lud_process_one(job, drw, obj, 0); - } - } break; - default: { - f2lud_process_one(job, drw, obj, 0); - } break; - } -} - - - -/** Process object and arrowheads. - @param job Job structure. - @param drw Drawing structure. - @param obj Current object to process. - @param objno Number of current object. -*/ -static -void -f2lud_process_object( - f2l_job_t *job, - dk3_fig_drawing_t *drw, - dk3_fig_obj_t *obj, - unsigned long objno -) -{ - char debbuf[256]; /* Buffer for debug messages. */ - - -#line 3691 "f2lud.ctr" - /* - Process object itself. - */ - - -#line 3695 "f2lud.ctr" - if(job->debug) { - sprintf(debbuf, f2lud_c8_kw[0], objno, obj->li, obj->ot, obj->st, obj->la); - f2lud_debug(job, debbuf); - } - f2lud_process_one(job, drw, obj, 1); - - -#line 3701 "f2lud.ctr" - /* - For primary objects process the arrowheads. - */ - if(obj->af) { - - -#line 3706 "f2lud.ctr" - if(job->debug) { - -#line 3707 "f2lud.ctr" - sprintf( - debbuf, f2lud_c8_kw[2], - (obj->af)->as, - (obj->af)->af, - (obj->af)->he, - (obj->af)->wi - ); - f2lud_debug(job, debbuf); - } - if((obj->af)->o1) { - -#line 3717 "f2lud.ctr" -#if VERSION_BEFORE_20140329 - f2lud_process_one(job,drw,(dk3_fig_obj_t *)((obj->af)->o1),0); -#else - f2lud_process_ah_one(job, drw, (dk3_fig_obj_t *)((obj->af)->o1)); -#endif - } - if((obj->af)->o2) { - -#line 3724 "f2lud.ctr" -#if VERSION_BEFORE_20140329 - f2lud_process_one(job,drw,(dk3_fig_obj_t *)((obj->af)->o2),0); -#else - f2lud_process_ah_one(job, drw, (dk3_fig_obj_t *)((obj->af)->o2)); -#endif - } - if(job->debug) { - -#line 3731 "f2lud.ctr" - f2lud_debug(job, f2lud_c8_kw[3]); - } - - -#line 3734 "f2lud.ctr" - } - if(obj->ab) { - - -#line 3737 "f2lud.ctr" - if(job->debug) { - -#line 3738 "f2lud.ctr" - sprintf( - debbuf, f2lud_c8_kw[4], - (obj->ab)->as, - (obj->ab)->af, - (obj->ab)->he, - (obj->ab)->wi - ); - f2lud_debug(job, debbuf); - } - if((obj->ab)->o1) { - -#line 3748 "f2lud.ctr" -#if VERSION_BEFORE_20140329 - f2lud_process_one(job,drw,(dk3_fig_obj_t *)((obj->ab)->o1),0); -#else - f2lud_process_ah_one(job, drw, (dk3_fig_obj_t *)((obj->ab)->o1)); -#endif - } - if((obj->ab)->o2) { - -#line 3755 "f2lud.ctr" -#if VERSION_BEFORE_20140329 - f2lud_process_one(job,drw,(dk3_fig_obj_t *)((obj->ab)->o2),0); -#else - f2lud_process_ah_one(job, drw, (dk3_fig_obj_t *)((obj->ab)->o2)); -#endif - } - if(job->debug) { - -#line 3762 "f2lud.ctr" - f2lud_debug(job, f2lud_c8_kw[5]); - } - - -#line 3765 "f2lud.ctr" - } - if(job->debug) { - sprintf(debbuf, f2lud_c8_kw[1], objno); - f2lud_debug(job, debbuf); - } - - -#line 3771 "f2lud.ctr" -} - - - -void -f2lud_output(f2l_job_t *job) -{ - dk3_fig_obj_t *obj; /* Current object to process. */ - dk3_fig_drawing_t *drw; /* Drawing to process. */ - unsigned long objno; /* Current object number. */ - - -#line 3782 "f2lud.ctr" - drw = job->drw; - objno = 0UL; - if(f2lud_driver_initialize(job, drw)) { - if(f2lud_open_output_files(job)) { - if(f2lud_start_processing(job, drw)) { - dk3sto_it_reset(drw->iobj); - while(NULL != (obj = (dk3_fig_obj_t *)dk3sto_it_next(drw->iobj))) { - if(!dk3fig_tool_is_bgrect(obj, objno)) { - f2lud_process_object(job, drw, obj, objno); - } - objno++; - } - } else { - f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_UNKNOWN); - -#line 3796 "f2lud.ctr" - } - f2lud_end_processing(job, drw); - } else { - f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_UNKNOWN); - -#line 3800 "f2lud.ctr" - } - f2lud_close_output_files(job); - } else { - f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_UNKNOWN); - -#line 3804 "f2lud.ctr" - } - f2lud_driver_end(job, drw); - -#line 3806 "f2lud.ctr" -} - |