From c0c4fdf5272de630363fab17435cf987d63d8848 Mon Sep 17 00:00:00 2001 From: Torsten Paul Date: Sat, 2 Aug 2014 19:33:13 +0200 Subject: [PATCH] Handle $fn, $fa and $fs for CSG output. --- src/FreetypeRenderer.h | 12 ++++++++++-- src/text.cc | 8 ++++++-- .../text-font-alignment-tests-expected.csg | 14 +++++++------- .../text-font-composition-expected.csg | 2 +- .../text-font-direction-tests-expected.csg | 8 ++++---- .../text-font-simple-tests-expected.csg | 2 +- .../dumptest/text-font-symbol-expected.csg | 18 +++++++++--------- .../dumptest/text-font-tests-expected.csg | 12 ++++++------ 8 files changed, 44 insertions(+), 32 deletions(-) diff --git a/src/FreetypeRenderer.h b/src/FreetypeRenderer.h index e164882f..e4aec726 100644 --- a/src/FreetypeRenderer.h +++ b/src/FreetypeRenderer.h @@ -47,6 +47,12 @@ public: void set_fn(double fn) { this->fn = fn; } + void set_fa(double fa) { + this->fa = fa; + } + void set_fs(double fs) { + this->fs = fs; + } void set_segments(double segments) { this->segments = segments; } @@ -82,10 +88,12 @@ public: << "\", script = \"" << params.script << "\", halign = \"" << params.halign << "\", valign = \"" << params.valign - << "\", $fn = " << params.fn; + << "\", $fn = " << params.fn + << ", $fa = " << params.fa + << ", $fs = " << params.fs; } private: - double size, spacing, fn, segments; + double size, spacing, fn, fa, fs, segments; std::string text, font, direction, language, script, halign, valign; friend class FreetypeRenderer; diff --git a/src/text.cc b/src/text.cc index 2864e2db..64254b90 100644 --- a/src/text.cc +++ b/src/text.cc @@ -55,8 +55,12 @@ AbstractNode *TextModule::instantiate(const Context *ctx, const ModuleInstantiat c.setVariables(args, evalctx); double fn = c.lookup_variable("$fn").toDouble(); - double fs = c.lookup_variable("$fs").toDouble(); double fa = c.lookup_variable("$fa").toDouble(); + double fs = c.lookup_variable("$fs").toDouble(); + + node->params.set_fn(fn); + node->params.set_fa(fa); + node->params.set_fs(fs); double size = lookup_double_variable_with_default(c, "size", 10.0); int segments = Calc::get_fragments_from_r(size, fn, fs, fa); @@ -65,8 +69,8 @@ AbstractNode *TextModule::instantiate(const Context *ctx, const ModuleInstantiat // the resolution will be better matching the detail level of // other objects. int text_segments = std::max(((int)floor(segments / 8)) + 1, 2); + node->params.set_size(size); - node->params.set_fn(segments); node->params.set_segments(text_segments); node->params.set_text(lookup_string_variable_with_default(c, "text", "")); node->params.set_spacing(lookup_double_variable_with_default(c, "spacing", 1.0)); diff --git a/tests/regression/dumptest/text-font-alignment-tests-expected.csg b/tests/regression/dumptest/text-font-alignment-tests-expected.csg index 9aa8f915..960a63a6 100644 --- a/tests/regression/dumptest/text-font-alignment-tests-expected.csg +++ b/tests/regression/dumptest/text-font-alignment-tests-expected.csg @@ -7,7 +7,7 @@ group() { color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "top", $fn = 7); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "top", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -16,7 +16,7 @@ group() { color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "center", $fn = 7); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "center", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 70], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -25,7 +25,7 @@ group() { color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 7); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 100], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -34,7 +34,7 @@ group() { color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "bottom", $fn = 7); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "bottom", $fn = 0, $fa = 12, $fs = 2); } } group() { @@ -45,7 +45,7 @@ group() { color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 7); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 249.2], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -54,7 +54,7 @@ group() { color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 7); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 316.1], [0, 1, 0, 70], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -63,7 +63,7 @@ group() { color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "right", valign = "baseline", $fn = 7); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "right", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } diff --git a/tests/regression/dumptest/text-font-composition-expected.csg b/tests/regression/dumptest/text-font-composition-expected.csg index 9671302b..77019c18 100644 --- a/tests/regression/dumptest/text-font-composition-expected.csg +++ b/tests/regression/dumptest/text-font-composition-expected.csg @@ -1,3 +1,3 @@ group() { - text(text = "Å", size = 40, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 7); + text(text = "Å", size = 40, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } diff --git a/tests/regression/dumptest/text-font-direction-tests-expected.csg b/tests/regression/dumptest/text-font-direction-tests-expected.csg index 35c454c4..d4f1eaac 100644 --- a/tests/regression/dumptest/text-font-direction-tests-expected.csg +++ b/tests/regression/dumptest/text-font-direction-tests-expected.csg @@ -7,7 +7,7 @@ group() { color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltl", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 7); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltl", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 90], [0, 1, 0, 60], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -16,7 +16,7 @@ group() { color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "rtl", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 7); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "rtl", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 160], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -25,7 +25,7 @@ group() { color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ttb", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 7); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ttb", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 60], [0, 1, 0, 140], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { @@ -34,7 +34,7 @@ group() { color([0, 0, 1, 1]) { square(size = [0.5, 20], center = false); } - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "btt", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 7); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "btt", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } diff --git a/tests/regression/dumptest/text-font-simple-tests-expected.csg b/tests/regression/dumptest/text-font-simple-tests-expected.csg index db086747..790bfbff 100644 --- a/tests/regression/dumptest/text-font-simple-tests-expected.csg +++ b/tests/regression/dumptest/text-font-simple-tests-expected.csg @@ -1,3 +1,3 @@ group() { - text(text = "T-X-U", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 2); + text(text = "T-X-U", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 2, $fa = 12, $fs = 2); } diff --git a/tests/regression/dumptest/text-font-symbol-expected.csg b/tests/regression/dumptest/text-font-symbol-expected.csg index cc22d96c..14199379 100644 --- a/tests/regression/dumptest/text-font-symbol-expected.csg +++ b/tests/regression/dumptest/text-font-symbol-expected.csg @@ -2,35 +2,35 @@ group() { group() { group() { multmatrix([[1, 0, 0, -180], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "0123", size = 40, spacing = 1, font = "MarVoSym", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 7); + text(text = "0123", size = 40, spacing = 1, font = "MarVoSym", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, -180], [0, 1, 0, 70], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "ABCD", size = 40, spacing = 1, font = "MarVoSym", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 7); + text(text = "ABCD", size = 40, spacing = 1, font = "MarVoSym", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, -180], [0, 1, 0, 130], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "abcd", size = 40, spacing = 1, font = "MarVoSym", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 7); + text(text = "abcd", size = 40, spacing = 1, font = "MarVoSym", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "0123", size = 40, spacing = 1, font = "Amiri", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 7); + text(text = "0123", size = 40, spacing = 1, font = "Amiri", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 70], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "ABCD", size = 40, spacing = 1, font = "Amiri", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 7); + text(text = "ABCD", size = 40, spacing = 1, font = "Amiri", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 130], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "abcd", size = 40, spacing = 1, font = "Amiri", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 7); + text(text = "abcd", size = 40, spacing = 1, font = "Amiri", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } group() { multmatrix([[1, 0, 0, 180], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "0123", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 7); + text(text = "0123", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 180], [0, 1, 0, 70], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "ABCD", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 7); + text(text = "ABCD", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 180], [0, 1, 0, 130], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "abcd", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 7); + text(text = "abcd", size = 40, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } } diff --git a/tests/regression/dumptest/text-font-tests-expected.csg b/tests/regression/dumptest/text-font-tests-expected.csg index 751ead2f..394ec103 100644 --- a/tests/regression/dumptest/text-font-tests-expected.csg +++ b/tests/regression/dumptest/text-font-tests-expected.csg @@ -1,20 +1,20 @@ group() { multmatrix([[0.70710678118, 0.5, -0.5, 0], [-0.70710678118, 0.5, -0.5, 0], [0, 0.70710678118, 0.70710678118, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 80], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 7); + text(text = "OpenSCAD", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "الخط الأميري", size = 20, spacing = 1, font = "Amiri:style=Regular", direction = "rtl", language = "ar", script = "arabic", halign = "left", valign = "baseline", $fn = 7); + text(text = "الخط الأميري", size = 20, spacing = 1, font = "Amiri:style=Regular", direction = "rtl", language = "ar", script = "arabic", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } - text(text = "الخط الأميري", size = 20, spacing = 1, font = "Amiri:style=Regular", direction = "rtl", language = "ar", script = "arabic", halign = "left", valign = "baseline", $fn = 7); + text(text = "الخط الأميري", size = 20, spacing = 1, font = "Amiri:style=Regular", direction = "rtl", language = "ar", script = "arabic", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); multmatrix([[1, 0, 0, 0], [0, 1, 0, -40], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "типографика", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "ru", script = "latin", halign = "left", valign = "baseline", $fn = 7); + text(text = "типографика", size = 20, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "ru", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 0], [0, 1, 0, -80], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "positional", size = 30, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 7); + text(text = "positional", size = 30, spacing = 1, font = "Liberation Sans:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 0], [0, 1, 0, -100], [0, 0, 1, 0], [0, 0, 0, 1]]) { - text(text = "parameters", size = 12, spacing = 1, font = "Amiri:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 7); + text(text = "parameters", size = 12, spacing = 1, font = "Amiri:style=Regular", direction = "ltr", language = "en", script = "latin", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2); } } }