Add -f/--flip-gerber-polarity option

This commit is contained in:
jaseg 2021-03-19 20:32:13 +01:00 committed by jaseg
parent 0be9f4b3ba
commit 3288fb8345
4 changed files with 17 additions and 9 deletions

View file

@ -402,10 +402,13 @@ Options:
happy with too many digits. 5 or 6 is a reasonable choice.
``--clear-color``
SVG color to use for "clear" areas (default: white)
SVG color to use in SVG output for "clear" areas (default: white)
``--dark-color``
SVG color to use for "dark" areas (default: black)
SVG color to use in SVG output for "dark" areas (default: black)
``-f, --flip-gerber-polarity``
Flip polarity of all output gerber primitives for --format gerber.
``-d, --trace-space``
Minimum feature size of elements in vectorized graphics (trace/space) in mm. Default: 0.1mm.

View file

@ -214,7 +214,7 @@ namespace gerbolyze {
class SimpleGerberOutput : public StreamPolygonSink {
public:
SimpleGerberOutput(std::ostream &out, bool only_polys=false, int digits_int=4, int digits_frac=6, double scale=1.0, d2p offset={0,0});
SimpleGerberOutput(std::ostream &out, bool only_polys=false, int digits_int=4, int digits_frac=6, double scale=1.0, d2p offset={0,0}, bool flip_polarity=false);
virtual ~SimpleGerberOutput() {}
virtual SimpleGerberOutput &operator<<(const Polygon &poly);
virtual SimpleGerberOutput &operator<<(GerberPolarityToken pol);
@ -229,6 +229,7 @@ namespace gerbolyze {
long long int m_gerber_scale;
d2p m_offset;
double m_scale;
bool m_flip_pol;
};
class SimpleSVGOutput : public StreamPolygonSink {

View file

@ -39,6 +39,9 @@ int main(int argc, char **argv) {
{"svg_dark_color", {"--dark-color"},
"SVG color to use for \"dark\" areas (default: black)",
1},
{"flip_gerber_polarity", {"-f", "--flip-gerber-polarity"},
"Flip polarity of all output gerber primitives for --format gerber.",
0},
{"min_feature_size", {"-d", "--trace-space"},
"Minimum feature size of elements in vectorized graphics (trace/space) in mm. Default: 0.1mm.",
1},
@ -189,7 +192,7 @@ int main(int argc, char **argv) {
} else if (fmt == "gbr" || fmt == "grb" || fmt == "gerber") {
double scale = args["scale"].as<double>(1.0);
cerr << "loading @scale=" << scale << endl;
sink = new SimpleGerberOutput(*out_f, only_polys, 4, precision, scale);
sink = new SimpleGerberOutput(*out_f, only_polys, 4, precision, scale, {0,0}, args["flip_gerber_polarity"]);
} else if (fmt == "s-exp" || fmt == "sexp" || fmt == "kicad") {
if (!args["sexp_mod_name"]) {

View file

@ -27,12 +27,13 @@
using namespace gerbolyze;
using namespace std;
SimpleGerberOutput::SimpleGerberOutput(ostream &out, bool only_polys, int digits_int, int digits_frac, double scale, d2p offset)
SimpleGerberOutput::SimpleGerberOutput(ostream &out, bool only_polys, int digits_int, int digits_frac, double scale, d2p offset, bool flip_polarity)
: StreamPolygonSink(out, only_polys),
m_digits_int(digits_int),
m_digits_frac(digits_frac),
m_offset(offset),
m_scale(scale)
m_scale(scale),
m_flip_pol(flip_polarity)
{
assert(1 <= digits_int && digits_int <= 9);
assert(0 <= digits_frac && digits_frac <= 9);
@ -58,12 +59,12 @@ void SimpleGerberOutput::header_impl(d2p origin, d2p size) {
}
SimpleGerberOutput& SimpleGerberOutput::operator<<(GerberPolarityToken pol) {
if (pol == GRB_POL_DARK) {
assert(pol == GRB_POL_DARK || pol == GRB_POL_CLEAR);
if ((pol == GRB_POL_DARK) != m_flip_pol) {
m_out << "%LPD*%" << endl;
} else if (pol == GRB_POL_CLEAR) {
m_out << "%LPC*%" << endl;
} else {
assert(false);
}
return *this;