summaryrefslogtreecommitdiff
path: root/support/dktools/dk3fig.c
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-10-12 03:04:00 +0000
committerNorbert Preining <norbert@preining.info>2020-10-12 03:04:00 +0000
commit0ce40abb18ec02ec6fd6bcc5f21612c88daa7578 (patch)
tree416289fe1448873fd8ca33051f50ad85bffa8aaa /support/dktools/dk3fig.c
parentfdb18507cd80dc17f5a5256153d34668b4f4e61c (diff)
CTAN sync 202010120303
Diffstat (limited to 'support/dktools/dk3fig.c')
-rw-r--r--support/dktools/dk3fig.c1449
1 files changed, 0 insertions, 1449 deletions
diff --git a/support/dktools/dk3fig.c b/support/dktools/dk3fig.c
deleted file mode 100644
index 713d4a4998..0000000000
--- a/support/dktools/dk3fig.c
+++ /dev/null
@@ -1,1449 +0,0 @@
-/*
-Copyright (C) 2011-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: dk3fig.ctr
-*/
-
-/** @file dk3fig.c The dk3fig module.
-*/
-
-
-#line 1118 "dk3fig.ctr"
-
-
-#include "dk3all.h"
-#include "dk3fig.h"
-#include "dk3unused.h"
-
-
-
-
-
-#line 1127 "dk3fig.ctr"
-
-
-
-/** Localized message texts.
-*/
-static dkChar const * const dk3fig_messages[] = {
-/* 0 */
-dkT("dk3fig.str"),
-
-/* 1 */
-dkT("Syntax error in Fig input!"),
-
-/* 2 */
-dkT("Color redefined!"),
-
-/* 3 */
-dkT("Mathematical problem in arc calculation!"),
-
-/* 4 */
-dkT("Object processing failed!"),
-
-/* 5 */
-dkT("Arrowhead calculation failed!"),
-
-/* 6 */
-dkT("Error while reading input file!"),
-
-/* 7 */
-dkT("Color not found, using black as default color!"),
-
-/* 8 */
-dkT("Unknown object type!"),
-
-/* 9 */
-dkT("Can not fill open graphics path!"),
-
-/* 10 */
-dkT("Converted to closed graphics path for filling."),
-
-NULL
-
-
-#line 1179 "dk3fig.ctr"
-};
-
-
-
-
-dkChar const * const *
-dk3fig_get_localized_messages(dk3_app_t *app)
-{
- dkChar const * const *back = NULL;
- if(app) {
- back = dk3app_messages(
- app, dk3fig_messages[0], (dkChar const **)dk3fig_messages
- );
- }
- return back;
-}
-
-
-
-/** Compare two text objects.
- This function is used to sort text objects.
- @param pl Left text object.
- @param pr Right text object.
- @return Comparison result.
-*/
-static
-int
-dk3fig_obj_text_compare(dk3_fig_obj_t const *pl, dk3_fig_obj_t const *pr)
-{
- int back = 0;
- /*
- Non-special texts before special texts.
- */
- if(((pl->dt).txt.ff) & DK3_FIG_FONT_FLAG_SPECIAL) {
- if(!(((pr->dt).txt.ff) & DK3_FIG_FONT_FLAG_SPECIAL)) {
- back = 1;
- }
- } else {
- if(((pr->dt).txt.ff) & DK3_FIG_FONT_FLAG_SPECIAL) {
- back = -1;
- }
- }
- /*
- Font selection type.
- */
- if(0 == back) {
- if(((pl->dt).txt.ff) & DK3_FIG_FONT_FLAG_PS) {
- if(!(((pr->dt).txt.ff) & DK3_FIG_FONT_FLAG_PS)) {
- back = 1;
- }
- } else {
- if(((pr->dt).txt.ff) & DK3_FIG_FONT_FLAG_PS) {
- back = -1;
- }
- }
- }
- /*
- Font number.
- */
- if(0 == back) {
- if((pl->dt).txt.fo > (pr->dt).txt.fo) {
- back = 1;
- } else {
- if((pl->dt).txt.fo < (pr->dt).txt.fo) {
- back = -1;
- }
- }
- }
- /*
- Font size.
- */
- if(0 == back) {
- if((pl->dt).txt.fs > (pr->dt).txt.fs) {
- back = 1;
- } else {
- if((pl->dt).txt.fs < (pr->dt).txt.fs) {
- back = -1;
- }
- }
- }
- /*
- Text string.
- */
- if(0 == back) {
- back = dk3str_c8_cmp((pl->dt).txt.st, (pr->dt).txt.st);
- if(back < -1) back = -1;
- if(back > 1) back = 1;
- }
- return back;
-}
-
-
-
-/** Compare two non-text objects.
- @param pl Left object.
- @param pr Right object.
- @return Comparison result.
-*/
-static
-int
-dk3fig_obj_path_compare(dk3_fig_obj_t const *pl, dk3_fig_obj_t const *pr)
-{
- int back = 0;
- /*
- Line width.
- */
- if(0 == back) {
- if(pl->lw > pr->lw) { back = 1; }
- else { if(pl->lw < pr->lw) { back = -1; } }
- }
- /*
- Pen color.
- */
- if(0 == back) {
- if(pl->pc > pr->pc) { back = 1; }
- else { if(pl->pc < pr->pc) { back = -1; } }
- }
- /*
- Line cap.
- */
- if(0 == back) {
- if(pl->cs > pr->cs) { back = 1; }
- else { if(pl->cs < pr->cs) { back = -1; } }
- }
- /*
- Line join.
- */
- if(0 == back) {
- if(pl->js > pr->js) { back = 1; }
- else { if(pl->js < pr->js) { back = -1; } }
- }
- /*
- Line style, style value for equal line style.
- */
- if(0 == back) {
- if(pl->ls > pr->ls) { back = 1; }
- else { if(pl->ls < pr->ls) { back = -1; } }
- if(0 == back) {
- if(pl->sv > pr->sv) { back = 1; }
- else { if(pl->sv < pr->sv) { back = -1; } }
- }
- }
- /*
- Non-closed before closed.
- */
- if(0 == back) {
- if(pl->cl) {
- if(pr->cl) {
- /*
- Fill color.
- */
- if(pl->fc > pr->fc) { back = 1; }
- else { if(pl->fc < pr->fc) { back = -1; } }
- /*
- Fill style.
- */
- if(0 == back) {
- if(pl->fi > pr->fi) { back = 1; }
- else { if(pl->fi < pr->fi) { back = -1; } }
- }
- } else {
- back = 1;
- }
- } else {
- if(pr->cl) {
- back = -1;
- }
- }
- }
- /*
- Object type.
- */
- if(0 == back) {
- if(pl->ot > pr->ot) { back = 1; }
- else { if(pl->ot < pr->ot) { back = -1; } }
- }
- /*
- Sub type.
- */
- if(0 == back) {
- if(pl->st > pr->st) { back = 1; }
- else { if(pl->st < pr->st) { back = -1; } }
- }
- return back;
-}
-
-
-
-/** Compare two Fig objects for sorted storing.
- We must draw the deepest layer elements first (by definition).
- Additionally we sort elements by multiple attributes
- (non-text elements before texts, pen color, fill color and type,
- line style, line width, cap style, join style) to group elements
- with equal attributes. This is done to minimize instructions
- for writing colors, line style, line width...
- @param l Left Fig object.
- @param r Right Fig object.
- @param cr Comparison criteria (ignored).
- @return Comparison result.
-*/
-static
-int
-dk3fig_obj_compare(void const *l, void const *r, int DK3_ARG_UNUSED(cr) )
-{
- int back = 0;
- dk3_fig_obj_t const *pl;
- dk3_fig_obj_t const *pr;
-
- DK3_UNUSED_ARG(cr)
- if(l) {
- if(r) {
- pl = (dk3_fig_obj_t const *)l;
- pr = (dk3_fig_obj_t const *)r;
- /*
- Deepest layers first.
- */
- if(pl->la > pr->la) { back = -1; }
- else { if(pl->la < pr->la) { back = 1; } }
- /*
- Non-texts before texts.
- */
- if(0 == back) {
- if(DK3_FIG_OBJ_TEXT == pl->ot) {
- if(!(DK3_FIG_OBJ_TEXT == pr->ot)) {
- back = 1;
- } else {
- back = dk3fig_obj_text_compare(pl, pr);
- }
- } else {
- if(DK3_FIG_OBJ_TEXT == pr->ot) {
- back = -1;
- } else {
- back = dk3fig_obj_path_compare(pl, pr);
- }
- }
- }
- /*
- Line number of definition.
- */
- if(0 == back) {
- if(pl->li > pr->li) { back = 1; }
- else { if(pl->li < pr->li) { back = -1; } }
- }
- } else back = 1;
- } else {
- if(r) back = -1;
- }
- return back;
-}
-
-
-
-/** Destroy arrowhead, release memory.
- @param ah Arrowhead to destroy.
-*/
-static
-void
-dk3fig_ah_delete(dk3_fig_ah_t *ah)
-{
-
-
-#line 1439 "dk3fig.ctr"
- if(ah) {
- if(ah->o1) {
-
-#line 1441 "dk3fig.ctr"
- dk3fig_obj_delete((dk3_fig_obj_t *)(ah->o1));
- }
- if(ah->o2) {
-
-#line 1444 "dk3fig.ctr"
- dk3fig_obj_delete((dk3_fig_obj_t *)(ah->o2));
- }
- dk3_delete(ah);
- }
-
-#line 1448 "dk3fig.ctr"
-}
-
-
-
-/** Create new arrowhead structure.
- @param app Application structure for diagnostics.
- @return Pointer to new structure on success, NULL on error.
-*/
-static
-dk3_fig_ah_t *
-dk3fig_ah_new(dk3_app_t *app)
-{
- dk3_fig_ah_t *back = NULL;
- back = dk3_new_app(dk3_fig_ah_t,1,app);
- if(back) {
- back->o1 = NULL;
- back->o2 = NULL;
- back->wi = 0.0;
- back->he = 0.0;
- back->as = 0;
- back->af = 0;
- }
- return back;
-}
-
-
-
-void
-dk3fig_obj_delete(dk3_fig_obj_t *obj)
-{
-
-
-#line 1479 "dk3fig.ctr"
- if(obj) {
- if(obj->af) {
-
-#line 1481 "dk3fig.ctr"
- dk3fig_ah_delete(obj->af);
- }
- if(obj->ab) {
-
-#line 1484 "dk3fig.ctr"
- dk3fig_ah_delete(obj->ab);
- }
- switch(obj->ot) {
- case DK3_FIG_OBJ_TEXT: {
-
-#line 1488 "dk3fig.ctr"
- if((obj->dt).txt.st) {
- dk3_release((obj->dt).txt.st);
- }
- } break;
- case DK3_FIG_OBJ_SPLINE: {
-
-#line 1493 "dk3fig.ctr"
- if((obj->dt).spl.po) {
- dk3_release((obj->dt).spl.po);
- }
- if((obj->dt).spl.fslc) {
- dk3_release((obj->dt).spl.fslc);
- }
- } break;
- case DK3_FIG_OBJ_POLYLINE: {
-
-#line 1501 "dk3fig.ctr"
- if((obj->dt).pol.po) {
- dk3_release((obj->dt).pol.po);
- }
- if((obj->dt).pol.fn) {
- dk3_release((obj->dt).pol.fn);
- }
- } break;
- }
- obj->af = NULL;
- obj->ab = NULL;
- dk3_delete(obj);
- }
-
-#line 1513 "dk3fig.ctr"
-}
-
-
-
-/** Reset all members of a drawing object.
- @param drw Drawing object to reset.
-*/
-static
-void
-dk3fig_initialize_empty_drawing(dk3_fig_drawing_t *drw)
-{
-
-
-#line 1525 "dk3fig.ctr"
- dk3bb_reset(&(drw->bb));
- drw->msg = NULL;
- drw->app = NULL;
- drw->sobj = NULL;
- drw->iobj = NULL;
- drw->scol = NULL;
- drw->icol = NULL;
- drw->cobj = NULL;
- drw->dsd = NULL;
- drw->res = 1200.0;
- drw->lineno = 0UL;
- drw->lres = 0;
- drw->cind = 0;
- drw->cxy = 0;
- drw->state = 0;
- drw->ec = 0;
- drw->srctype = DK3_FIG_SRCTYPE_UNKNOWN;
- drw->xssbs = 8;
- drw->qbs = 4;
- drw->transcol = -2;
- drw->coah = 0;
- drw->xsah = 0;
- drw->cosp = 0;
- drw->cofop = 1;
- drw->ahbs = 0;
- drw->bbts = 0;
- drw->arcspp = 8.0;
- drw->splspp = 8.0;
- drw->minspp = 4;
- drw->codi = 3;
- drw->xsprec = 0.04; /* originally 1200.0 / 25400.0 */
- drw->lwbp = 0.9; /* 1/80 inch */
-
-
-#line 1558 "dk3fig.ctr"
-}
-
-
-
-/** Compare two Fig colors.
- @param l Left object.
- @param r Right color object or number.
- @param cr Comparison criteria (0=color/color, 1=color/number).
- @return Comparison result.
-*/
-static
-int
-dk3fig_color_compare(void const *l, void const *r, int cr)
-{
- int back = 0;
- dk3_fig_color_t const *pl;
- dk3_fig_color_t const *pr;
- int *ip;
- if(l) {
- if(r) {
- pl = (dk3_fig_color_t const *)l;
- pr = (dk3_fig_color_t const *)r;
- ip = (int *)r;
- switch(cr) {
- case 1: {
- if(pl->i > (*ip)) {
- back = 1;
- } else {
- if(pl->i < (*ip)) {
- back = -1;
- }
- }
- } break;
- default: {
- if(pl->i > pr->i) {
- back = 1;
- } else {
- if(pl->i < pr->i) {
- back = -1;
- }
- }
- } break;
- }
- } else back = 1;
- } else {
- if(r) back = -1;
- }
- return back;
-}
-
-
-dk3_fig_drawing_t *
-dk3fig_drawing_new(dk3_app_t *app, dkChar const * const *msg)
-{
- dk3_fig_drawing_t *back = NULL;
-
-
-#line 1614 "dk3fig.ctr"
- if(app) {
- back = dk3_new_app(dk3_fig_drawing_t,1,app);
- if(back) {
- dk3fig_initialize_empty_drawing(back);
- back->app = app;
- back->msg = msg;
- back->sobj = dk3sto_open_app(app);
- if(back->sobj) {
- dk3sto_set_comp(back->sobj, dk3fig_obj_compare, 0);
- back->iobj = dk3sto_it_open(back->sobj);
- if(back->iobj) {
- back->scol = dk3sto_open_app(app);
- if(back->scol) {
- dk3sto_set_comp(back->scol, dk3fig_color_compare, 0);
- back->icol = dk3sto_it_open(back->scol);
- if(back->icol) {
- /* Place for further initialization here */
- } else {
-
-#line 1632 "dk3fig.ctr"
- dk3fig_drawing_delete(back);
- back = NULL;
- }
- } else {
-
-#line 1636 "dk3fig.ctr"
- dk3fig_drawing_delete(back);
- back = NULL;
- }
- } else {
-
-#line 1640 "dk3fig.ctr"
- dk3fig_drawing_delete(back);
- back = NULL;
- }
- } else {
-
-#line 1644 "dk3fig.ctr"
- dk3fig_drawing_delete(back);
- back = NULL;
- }
- } else {
-
-#line 1648 "dk3fig.ctr"
- }
- }
-
-#line 1650 "dk3fig.ctr"
- return back;
-}
-
-
-
-void
-dk3fig_drawing_delete(dk3_fig_drawing_t *drw)
-{
- dk3_fig_color_t *co; /* Current color to release. */
- dk3_fig_obj_t *po; /* Current Fig object to release. */
-
-
-#line 1661 "dk3fig.ctr"
- if(drw) {
- /*
- Remove all objects.
- */
- if(drw->sobj) {
- if(drw->iobj) {
- dk3sto_it_reset(drw->iobj);
- while(NULL != (po = (dk3_fig_obj_t *)dk3sto_it_next(drw->iobj))) {
- dk3fig_obj_delete(po);
- }
- dk3sto_it_close(drw->iobj);
- }
- dk3sto_close(drw->sobj);
- }
- /*
- Remove all colors.
- */
- if(drw->scol) {
- if(drw->icol) {
- dk3sto_it_reset(drw->icol);
- while(NULL != (co = (dk3_fig_color_t *)dk3sto_it_next(drw->icol))) {
-
-
-#line 1683 "dk3fig.ctr"
- dk3_delete(co);
- }
- dk3sto_it_close(drw->icol);
- }
- dk3sto_close(drw->scol);
- }
- /*
- Reset all members.
- */
- dk3fig_initialize_empty_drawing(drw);
- /*
- Release memory.
- */
- drw->app = NULL;
- drw->msg = NULL;
- dk3_delete(drw);
- }
-
-#line 1700 "dk3fig.ctr"
-}
-
-
-
-/** Internal function to create Fig object and initialize it.
- @param li Line number of object definition in file.
- @param la Layer number.
- @param ot Object type.
- @param st Object subtype.
- @param lw Line width.
- @param pc Pen color.
- @param fc Fill color.
- @param fi Fill type.
- @param cs Cap style.
- @param js Join style.
- @param ls Line style.
- @param sv Style value.
- @param af Flag: Arrowhead forward.
- @param ab Flag: Arrowhead backward.
- @param po Flag: Path object (non-text object).
- @param cl Flag: Closed path object.
- @param app Application structure for diagnostics, may be NULL.
- @return Pointer to new object on success, NULL on error.
-*/
-static
-dk3_fig_obj_t *
-dk3fig_obj_internal_new(
- unsigned long li,
- int la,
- int ot,
- int st,
- int lw,
- int pc,
- int fc,
- int fi,
- int cs,
- int js,
- int ls,
- double sv,
- int af,
- int ab,
- int po,
- int cl,
- dk3_app_t *app
-)
-{
- dk3_fig_obj_t *back = NULL;
-
-
-#line 1748 "dk3fig.ctr"
- back = dk3_new_app(dk3_fig_obj_t,1,app);
- if(back) {
-
-#line 1750 "dk3fig.ctr"
- back->af = NULL;
- back->ab = NULL;
- back->dsd = NULL;
- back->sv = sv;
- back->li = li;
- back->la = la;
- back->ot = ot;
- back->st = st;
- back->lw = lw;
- back->pc = pc;
- back->fc = fc;
- back->fi = fi;
- back->cs = cs;
- back->js = js;
- back->ls = ls;
- back->cl = ((cl) ? 0x01 : 0x00);
-
-#line 1766 "dk3fig.ctr"
- if(back->lw < 0) {
- back->lw = 0;
- if(po) {
-
-#line 1769 "dk3fig.ctr"
- /* +++++ Warning: Illegal line width corrected! */
- }
- }
- if(back->pc < -1) {
-
-#line 1773 "dk3fig.ctr"
- back->pc = -1;
- /* +++++ Warning: Illegal pen color definition corrected! */
- }
- if(back->fc < DK3_FIG_COLOR_DEFAULT) {
- back->fc = DK3_FIG_COLOR_DEFAULT;
- if((po) && (cl)) {
-
-#line 1779 "dk3fig.ctr"
- /* +++++ Warning: Illegal fill color definition corrected! */
- }
- }
- if(back->fi < DK3_FIG_COLOR_DEFAULT) {
- back->fi = DK3_FIG_COLOR_DEFAULT;
- if((po) && (cl)) {
-
-#line 1785 "dk3fig.ctr"
- /* +++++ Warning: Illegal fill style corrected! */
- }
- } else {
- if(back->fi > 62) {
- back->fi = 62;
- if((po) && (cl)) {
-
-#line 1791 "dk3fig.ctr"
- /* +++++ Warning: Illegal fill style corrected! */
- }
- } else {
- if((DK3_FIG_COLOR_BLACK == fc) || (DK3_FIG_COLOR_WHITE == fc)) {
- if((back->fi >= 21) && (back->fi <= 40)) {
- back->fi = 20;
- if((po) && (cl)) {
-
-#line 1798 "dk3fig.ctr"
- /* +++++ Warning: Illegal fill style corrected! */
- }
- }
- }
- }
- }
- if(DK3_FIG_LC_BUTT != back->cs) {
- if(DK3_FIG_LC_ROUND != back->cs) {
- if(DK3_FIG_LC_PROJECTING != back->cs) {
- back->cs = DK3_FIG_LC_BUTT;
- if(po) {
-
-#line 1809 "dk3fig.ctr"
- /* +++++ Warning: Illegal line cap style corrected! */
- }
- }
- }
- }
- if(DK3_FIG_LJ_MITER != back->js) {
- if(DK3_FIG_LJ_ROUND != back->js) {
- if(DK3_FIG_LJ_BEVEL != back->js) {
- back->js = DK3_FIG_LJ_MITER;
- if(po) {
-
-#line 1819 "dk3fig.ctr"
- /* +++++ Warning: Illegal line join style corrected! */
- }
- }
- }
- }
- if(back->ls < DK3_FIG_LS_SOLID) {
- back->ls = DK3_FIG_LS_SOLID;
- if(ls < DK3_FIG_LS_DEFAULT) {
- if(po) {
-
-#line 1828 "dk3fig.ctr"
- /* +++++ Warning: Illegal line style corrected! */
- }
- }
- } else {
- if(back->ls > DK3_FIG_LS_DASH_TRIPLE_DOTTED) {
- back->ls = DK3_FIG_LS_SOLID;
- if(po) {
-
-#line 1835 "dk3fig.ctr"
- /* +++++ Warning: Illegal line style corrected! */
- }
- }
- }
- } else {
-
-#line 1840 "dk3fig.ctr"
- }
- if((po) && (!(cl))) {
-
-#line 1842 "dk3fig.ctr"
- if(NULL != back) {
- if(af) {
-
-#line 1844 "dk3fig.ctr"
- back->af = dk3fig_ah_new(app);
- if(!(back->af)) {
- dk3fig_obj_delete(back);
- back = NULL;
- }
- }
- }
- if (NULL != back) {
- if(ab) {
-
-#line 1853 "dk3fig.ctr"
- back->ab = dk3fig_ah_new(app);
- if(!(back->ab)) {
- dk3fig_obj_delete(back);
- back = NULL;
- }
- }
- }
- } else {
-
-#line 1861 "dk3fig.ctr"
- if((af) || (ab)) {
-
-#line 1862 "dk3fig.ctr"
- /* +++++ Warning: Arrowhead ignored for closed path! */
- }
- }
-
-#line 1865 "dk3fig.ctr"
- return back;
-}
-
-
-
-/** Initialize details for arc.
- @param obj Object to initialize.
-*/
-static
-void
-dk3fig_initialize_arc_details(dk3_fig_obj_t *obj)
-{
- (obj->dt).arc.xc = 0.0;
- (obj->dt).arc.yc = 0.0;
- (obj->dt).arc.ra = 0.0;
- (obj->dt).arc.x1 = 0.0;
- (obj->dt).arc.y1 = 0.0;
- (obj->dt).arc.x2 = 0.0;
- (obj->dt).arc.y2 = 0.0;
- (obj->dt).arc.x3 = 0.0;
- (obj->dt).arc.y3 = 0.0;
- (obj->dt).arc.as = 0.0;
- (obj->dt).arc.ae = 0.0;
- (obj->dt).arc.di = 0x00;
-}
-
-
-
-/** Initialize ellipse details.
- @param obj Object to initialize.
-*/
-static
-void
-dk3fig_initialize_ellipse_details(dk3_fig_obj_t *obj)
-{
- (obj->dt).ell.an = 0.0;
- (obj->dt).ell.cx = 0.0;
- (obj->dt).ell.cy = 0.0;
- (obj->dt).ell.rx = 0.0;
- (obj->dt).ell.ry = 0.0;
-}
-
-
-
-/** Initialize polyline details.
- @param obj Object to initialize.
- @param np Number of points.
- @param app Application structure for diagnostics.
- @return 1 on success, 0 on error (not enough memory).
-*/
-static
-int
-dk3fig_initialize_polyline_details(dk3_fig_obj_t *obj,size_t np,dk3_app_t *app)
-{
- int back = 0;
- (obj->dt).pol.fn = NULL;
- (obj->dt).pol.po = NULL;
- (obj->dt).pol.ra = 0.0;
- (obj->dt).pol.xs = 0.0;
- (obj->dt).pol.ys = 0.0;
- (obj->dt).pol.xe = 0.0;
- (obj->dt).pol.ye = 0.0;
- (obj->dt).pol.np = np;
- (obj->dt).pol.flf = 0;
- (obj->dt).pol.po = dk3_new_app(dk3_fig_poly_point_t,np,app);
- if((obj->dt).pol.po) {
- back = 1;
- }
- return back;
-}
-
-
-
-/** Initialize spline details.
- @param obj Object to initialize.
- @param np Number of spline points.
- @param app Application structure for diagnostics.
- @return 1 on success, 0 on error (not enough memory).
-*/
-static
-int
-dk3fig_initialize_spline_details(dk3_fig_obj_t *obj,size_t np,dk3_app_t *app)
-{
- double *xptr;
- size_t i;
- int back = 0;
- (obj->dt).spl.po = NULL;
- (obj->dt).spl.fslc = NULL;
- (obj->dt).spl.ts = -1.0;
- (obj->dt).spl.te = -1.0;
- (obj->dt).spl.np = np;
- (obj->dt).spl.po = dk3_new_app(dk3_fig_spline_point_t, np, app);
- if((obj->dt).spl.po) {
- back = 1;
- switch(obj->st) {
- case 0: case 2: case 4: {
- if(((obj->af) || (obj->ab)) && (2 <= np)) {
- (obj->dt).spl.fslc = dk3_new_app(double, (np-1), app);
- if((obj->dt).spl.fslc) {
- /* Initialize cache to -1 */
- xptr = (obj->dt).spl.fslc;
- i = np - 1;
- while(i--) { *(xptr++) = -1.0; }
- } else {
- back = 0;
- }
- }
- } break;
- }
- }
- return back;
-}
-
-
-
-/** Initialize text details.
- @param obj Object to initialize.
- @param tx Text for text object.
- @param app Application structure for diagnostics.
- @return 1 on success, 0 on error (not enough memory).
-*/
-static
-int
-dk3fig_initialize_text_details(dk3_fig_obj_t *obj,char const *tx,dk3_app_t *app)
-{
- int back = 0;
- (obj->dt).txt.st = NULL;
- (obj->dt).txt.x = 0.0;
- (obj->dt).txt.y = 0.0;
- (obj->dt).txt.an = 0.0;
- (obj->dt).txt.fs = 0.0;
- (obj->dt).txt.he = 0.0;
- (obj->dt).txt.wi = 0.0;
- (obj->dt).txt.fo = 0;
- (obj->dt).txt.ff = 0;
- (obj->dt).txt.st = dk3str_c8_dup_app(tx, app);
- if((obj->dt).txt.st) {
- back = 1;
- }
- return back;
-}
-
-
-
-dk3_fig_obj_t *
-dk3fig_obj_new(
- unsigned long li,
- int la,
- int ot,
- int st,
- int lw,
- int pc,
- int fc,
- int fi,
- int cs,
- int js,
- int ls,
- double sv,
- int af,
- int ab,
- size_t np,
- char const *txt,
- dk3_app_t *app
-)
-{
- dk3_fig_obj_t *back = NULL;
-
-
-#line 2032 "dk3fig.ctr"
- if((la < 0) || (la > 999)) {
- /* +++++ Warning: Illegal layer number! */
- }
- switch(ot) {
- case DK3_FIG_OBJ_ARC: {
-
-#line 2037 "dk3fig.ctr"
- switch(st) {
- case DK3_FIG_OBJ_SUB_ARC_OPEN: {
-
-#line 2039 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 0, app
- );
- } break;
- case DK3_FIG_OBJ_SUB_ARC_CLOSED: {
-
-#line 2044 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 1, app
- );
- } break;
- case 0: {
-
-#line 2049 "dk3fig.ctr"
- /* +++++ Warning: jFig closed arc bug. */
- back = dk3fig_obj_internal_new(
- li, la, ot, DK3_FIG_OBJ_SUB_ARC_CLOSED,
- lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 0, app
- );
- } break;
- default: {
-
-#line 2056 "dk3fig.ctr"
- /* +++++ Warning: Illegal sub type corrected! */
- back = dk3fig_obj_internal_new(
- li, la, ot, DK3_FIG_OBJ_SUB_ARC_CLOSED,
- lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 0, app
- );
- } break;
- }
- if(back) {
- dk3fig_initialize_arc_details(back);
- }
- } break;
- case DK3_FIG_OBJ_ELLIPSE: {
-
-#line 2068 "dk3fig.ctr"
- switch(st) {
- case DK3_FIG_OBJ_SUB_ELL_RADII: {
-
-#line 2070 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 1, app
- );
- } break;
- case DK3_FIG_OBJ_SUB_ELL_DIAMETERS: {
-
-#line 2075 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 1, app
- );
- } break;
- case DK3_FIG_OBJ_SUB_CIR_RADIUS: {
-
-#line 2080 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 1, app
- );
- } break;
- case DK3_FIG_OBJ_SUB_CIR_DIAMETER: {
-
-#line 2085 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 1, app
- );
- } break;
- default: {
-
-#line 2090 "dk3fig.ctr"
- /* +++++ Warning: Illegal sub type corrected! */
- back = dk3fig_obj_internal_new(
- li, la, ot, DK3_FIG_OBJ_SUB_ELL_RADII,
- lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 1, app
- );
- } break;
- }
- if(back) {
- dk3fig_initialize_ellipse_details(back);
- }
- } break;
- case DK3_FIG_OBJ_POLYLINE: {
-
-#line 2102 "dk3fig.ctr"
- switch(st) {
- case DK3_FIG_OBJ_SUB_POLYLINE: {
-
-#line 2104 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 0, app
- );
- } break;
- case DK3_FIG_OBJ_SUB_BOX: {
-
-#line 2109 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 1, app
- );
- } break;
- case DK3_FIG_OBJ_SUB_POLYGON: {
-
-#line 2114 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 1, app
- );
- } break;
- case DK3_FIG_OBJ_SUB_ARCBOX: {
-
-#line 2119 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 1, app
- );
- } break;
- case DK3_FIG_OBJ_SUB_IMAGE: {
-
-#line 2124 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 1, app
- );
- } break;
- default: {
-
-#line 2129 "dk3fig.ctr"
- /* +++++ Warning: Illegal sub type corrected! */
- back = dk3fig_obj_internal_new(
- li, la, ot, DK3_FIG_OBJ_SUB_POLYLINE,
- lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 0, app
- );
- } break;
- }
- if(back) {
- if(!dk3fig_initialize_polyline_details(back, np, app)) {
- dk3fig_obj_delete(back);
- back = NULL;
- }
- }
- } break;
- case DK3_FIG_OBJ_SPLINE: {
-
-#line 2144 "dk3fig.ctr"
- switch(st) {
- case DK3_FIG_OBJ_SUB_OPEN_APPRO: {
-
-#line 2146 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 0, app
- );
- } break;
- case DK3_FIG_OBJ_SUB_CLOSED_APPRO: {
-
-#line 2151 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 1, app
- );
- } break;
- case DK3_FIG_OBJ_SUB_OPEN_INT: {
-
-#line 2156 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 0, app
- );
- } break;
- case DK3_FIG_OBJ_SUB_CLOSED_INT: {
-
-#line 2161 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 1, app
- );
- } break;
- case DK3_FIG_OBJ_SUB_OPEN_X: {
-
-#line 2166 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 0, app
- );
- } break;
- case DK3_FIG_OBJ_SUB_CLOSED_X: {
-
-#line 2171 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 1, app
- );
- } break;
- default: {
-
-#line 2176 "dk3fig.ctr"
- /* +++++ Warning: Illegal sub type corrected! */
- back = dk3fig_obj_internal_new(
- li, la, ot, DK3_FIG_OBJ_SUB_OPEN_X,
- lw, pc, fc, fi, cs, js, ls, sv, af, ab, 1, 0, app
- );
- } break;
- }
- if(back) {
- if(!dk3fig_initialize_spline_details(back, np, app)) {
- dk3fig_obj_delete(back);
- back = NULL;
- }
- }
- } break;
- case DK3_FIG_OBJ_TEXT: {
-
-#line 2191 "dk3fig.ctr"
- if(txt) {
-
-#line 2192 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, st, lw, pc, fc, fi, cs, js, ls, sv, af, ab, 0, 0, app
- );
- if(back) {
- if(!dk3fig_initialize_text_details(back, txt, app)) {
- dk3fig_obj_delete(back);
- back = NULL;
- }
- }
- } else {
-
-#line 2202 "dk3fig.ctr"
- /* +++++ ERROR: No text specified! */
- }
- } break;
- case DK3_FIG_OBJ_PSEUDO_HALF_CIRCLE: {
-
-#line 2206 "dk3fig.ctr"
- back = dk3fig_obj_internal_new(
- li, la, ot, ((st) ? 1 : 0),
- lw, pc, fc, fi, cs, js, ls, sv, af, ab, 0,
- ((st) ? 1 : 0),
- app
- );
- } break;
- default: {
-
-#line 2214 "dk3fig.ctr"
- /* +++++ ERROR: Can not create object! */
- } break;
- }
-
-#line 2217 "dk3fig.ctr"
- return back;
-}
-
-
-void
-dk3fig_obj_init(dk3_fig_obj_t *obj)
-{
- if(obj) {
- dk3mem_res((void *)obj, sizeof(dk3_fig_obj_t));
- obj->af = NULL;
- obj->ab = NULL;
- obj->dsd = NULL;
- obj->sv = 0.0;
- }
-}
-
-
-
-void
-dk3fig_set_options_bsegs(dk3_fig_drawing_t *drw, size_t xssbs, size_t qbs)
-{
- if(drw) {
- drw->xssbs = xssbs;
- drw->qbs = qbs;
- if(xssbs < 2) drw->xssbs = 2;
- if(qbs < 2) drw->qbs = 2;
- }
-}
-
-
-
-void
-dk3fig_set_options_lwbp(dk3_fig_drawing_t *drw, double val)
-{
- if (drw) {
- drw->lwbp = val;
- }
-}
-
-
-
-void
-dk3fig_set_options_coah(dk3_fig_drawing_t *drw, int val)
-{
- if(drw) {
- drw->coah = ((val) ? 1 : 0);
- }
-}
-
-
-
-void
-dk3fig_set_options_xsah(dk3_fig_drawing_t *drw, int val)
-{
- if (drw) {
- drw->xsah = ((val) ? 1 : 0);
- }
-}
-
-
-
-void
-dk3fig_set_options_cosp(dk3_fig_drawing_t *drw, int val)
-{
- if(drw) {
- drw->cosp = ((val) ? 1 : 0);
- }
-}
-
-
-
-void
-dk3fig_set_options_bbts(dk3_fig_drawing_t *drw, int val)
-{
- if(drw) {
- drw->bbts = ((val) ? 1 : 0);
- }
-}
-
-
-
-void
-dk3fig_set_options_cofop(dk3_fig_drawing_t *drw, int val)
-{
- if(drw) {
- drw->cofop = ((val) ? 1 : 0);
- }
-}
-
-
-
-void
-dk3fig_set_options_ah_bisection(dk3_fig_drawing_t *drw, int val)
-{
- if(drw) {
- drw->ahbs = ((val) ? 1 : 0);
- }
-}
-
-
-
-void
-dk3fig_set_options_srctype(dk3_fig_drawing_t *drw, int val)
-{
- if(drw) {
- drw->srctype = val;
- }
-}
-
-
-
-void
-dk3fig_set_options_arrows(
- dk3_fig_drawing_t *drw,
- double arcspp,
- double splspp,
- size_t minspp
-)
-{
- if(drw) {
- drw->arcspp = arcspp;
- if(drw->arcspp < 2.0) { drw->arcspp = 2.0; }
- drw->splspp = splspp;
- if(drw->splspp < 2.0) { drw->splspp = 2.0; }
- drw->minspp = minspp;
- if(drw->minspp < 2) { drw->minspp = 2; }
- }
-}
-
-
-
-void
-dk3fig_set_options_iteration_precision(
- dk3_fig_drawing_t *drw,
- double prec
-)
-{
- if(drw) {
- drw->xsprec = fabs(prec);
- if(drw->xsprec < 1.0e-24) {
- drw->xsprec = 1.0e-24;
- }
- }
-}
-
-
-void
-dk3fig_gs_init(dk3_graphics_state_t *gs)
-{
- if(gs) {
- (gs->c1).r = (gs->c1).g = (gs->c1).b = 0.0;
- (gs->c2).r = (gs->c2).g = (gs->c2).b = 0.0;
- gs->lw = -1.0;
- gs->sv = -1.0;
- gs->slw = -1.0;
- gs->lc = gs->lj = gs->ls = 0;
- gs->hc1 = gs->hc2 = gs->hlc = gs->hlj = gs->hlw = gs->hls = 0;
- gs->hfn = 0; gs->fs = -1.0; gs->fn = -1;
- }
-}
-
-
-
-void
-dk3fig_set_options_codi(
- dk3_fig_drawing_t *drw,
- size_t codi
-)
-{
- if(drw) {
- drw->codi = codi;
- }
-}
-
-
-
-void
-dk3fig_set_ec(dk3_fig_drawing_t *drw, int ec)
-{
- if(drw) {
- if(0 == drw->ec) {
- drw->ec = ec;
- }
- }
-}
-
-