Skip to content

Commit

Permalink
Use sum in moire and step and repeat
Browse files Browse the repository at this point in the history
  • Loading branch information
eyal0 committed Feb 4, 2021
1 parent 24df074 commit 2ab7ea7
Show file tree
Hide file tree
Showing 34 changed files with 617 additions and 619 deletions.
5 changes: 4 additions & 1 deletion bg_operators.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ multi_polygon_type_fp reduce(const std::vector<multi_polygon_type_fp>& mpolys,

multi_polygon_type_fp sum(const std::vector<multi_polygon_type_fp>& mpolys) {
if (mpolys.size() == 0) {
return multi_polygon_type_fp();
return {};
} else if (mpolys.size() == 1) {
return mpolys[0];
}
Expand All @@ -228,6 +228,9 @@ multi_polygon_type_fp sum(const std::vector<multi_polygon_type_fp>& mpolys) {
geos_mpolys_tmp.push_back(to_geos(mpoly));
geos_mpolys.push_back(geos_mpolys_tmp.back().get());
}
if (geos_mpolys.size() == 0) {
return {};
}
try {
std::unique_ptr<geos::geom::Geometry> geos_out(
geos::operation::geounion::CascadedUnion::Union(&geos_mpolys));
Expand Down
51 changes: 23 additions & 28 deletions gerberimporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -313,12 +313,6 @@ struct mp_pair {
filled_closed_lines(filled_closed_lines) {}
multi_polygon_type_fp shapes;
multi_polygon_type_fp filled_closed_lines;
const mp_pair operator+(const mp_pair& rhs) const {
mp_pair ret;
ret.filled_closed_lines = filled_closed_lines ^ rhs.filled_closed_lines;
ret.shapes = shapes + rhs.shapes;
return ret;
}
};

// To speed up the merging, we do them in pairs so that we're mostly merging
Expand Down Expand Up @@ -360,24 +354,25 @@ multi_polygon_type_fp generate_layers(vector<pair<const gerbv_layer_t *, mp_pair
const gerbv_step_and_repeat_t& stepAndRepeat = layer->first->stepAndRepeat;
mp_pair draw_pair = layer->second;
multi_polygon_type_fp draws = draw_pair.*member;

// First duplicate in the x direction.
auto original_draw = draws;
for (int sr_x = 1; sr_x < stepAndRepeat.X; sr_x++) {
multi_polygon_type_fp translated_draws;
bg::transform(original_draw, translated_draws,
translate(stepAndRepeat.dist_X * sr_x, 0));
draws = draws + translated_draws;
if (stepAndRepeat.X > 0 || stepAndRepeat.Y > 0) {
vector<multi_polygon_type_fp> to_sum{draws};

to_sum.reserve(stepAndRepeat.X * stepAndRepeat.Y);
for (int sr_x = 0; sr_x < stepAndRepeat.X; sr_x++) {
for (int sr_y = 0; sr_y < stepAndRepeat.Y; sr_y++) {
if (sr_x == 0 && sr_y == 0) {
continue; // Already got this one.
}
multi_polygon_type_fp translated_draws;
bg::transform(draws, translated_draws,
translate(stepAndRepeat.dist_X * sr_x,
stepAndRepeat.dist_Y * sr_y));
to_sum.push_back(translated_draws);
}
}
draws = sum(to_sum);
}

// Now duplicate in the y direction, with all the x duplicates in there already.
original_draw = draws;
for (int sr_y = 1; sr_y < stepAndRepeat.Y; sr_y++) {
multi_polygon_type_fp translated_draws;
bg::transform(original_draw, translated_draws,
translate(0, stepAndRepeat.dist_Y * sr_y));
draws = draws + translated_draws;
}
if (xor_layers) {
output = output ^ draws;
} else if (polarity == GERBV_POLARITY_DARK) {
Expand All @@ -393,12 +388,12 @@ multi_polygon_type_fp generate_layers(vector<pair<const gerbv_layer_t *, mp_pair

multi_polygon_type_fp make_moire(const double * const parameters, unsigned int circle_points) {
const point_type_fp center(parameters[0], parameters[1]);
multi_polygon_type_fp moire;
vector<multi_polygon_type_fp> moire_parts;

double crosshair_thickness = parameters[6];
double crosshair_length = parameters[7];
moire = moire + make_rectangle(center, crosshair_thickness, crosshair_length, 0, 0);
moire = moire + make_rectangle(center, crosshair_length, crosshair_thickness, 0, 0);
moire_parts.push_back(make_rectangle(center, crosshair_thickness, crosshair_length, 0, 0));
moire_parts.push_back(make_rectangle(center, crosshair_length, crosshair_thickness, 0, 0));
const int max_number_of_rings = parameters[5];
const double outer_ring_diameter = parameters[2];
const double ring_thickness = parameters[3];
Expand All @@ -410,10 +405,10 @@ multi_polygon_type_fp make_moire(const double * const parameters, unsigned int c
break;
if (internal_diameter < 0)
internal_diameter = 0;
moire = moire + make_regular_polygon(center, external_diameter, circle_points, 0,
internal_diameter, circle_points);
moire_parts.push_back(make_regular_polygon(center, external_diameter, circle_points, 0,
internal_diameter, circle_points));
}
return moire;
return sum(moire_parts);
}

multi_polygon_type_fp make_thermal(point_type_fp center, coordinate_type_fp external_diameter, coordinate_type_fp internal_diameter,
Expand Down
30 changes: 15 additions & 15 deletions testing/gerbv_example/am-test-counterclockwise/expected/back.ngc
Original file line number Diff line number Diff line change
Expand Up @@ -1146,8 +1146,8 @@ G01 X-8.77768 Y4.54559
G01 X-8.77879 Y4.54505
G01 X-8.87702 Y4.50930
G01 X-8.87822 Y4.50900
G01 X-8.98173 Y4.49445
G01 X-8.98296 Y4.49441
G01 X-8.98173 Y4.49446
G01 X-8.98296 Y4.49442
G01 X-9.08723 Y4.50171
G01 X-9.08845 Y4.50192
G01 X-9.18893 Y4.53073
Expand Down Expand Up @@ -1196,8 +1196,8 @@ G01 X-9.22232 Y5.45441
G01 X-9.22121 Y5.45495
G01 X-9.12298 Y5.49070
G01 X-9.12178 Y5.49100
G01 X-9.01827 Y5.50555
G01 X-9.01704 Y5.50559
G01 X-9.01827 Y5.50554
G01 X-9.01704 Y5.50558
G01 X-8.91277 Y5.49829
G01 X-8.91155 Y5.49808
G01 X-8.81107 Y5.46927
Expand Down Expand Up @@ -1237,12 +1237,12 @@ G01 X-8.61000 Y4.68127
G01 X-8.61074 Y4.67991
G01 X-8.61772 Y4.67171
G01 X-8.61920 Y4.67099
G01 X-8.69008 Y4.60265
G01 X-8.68943 Y4.60316
G01 X-8.77946 Y4.54690
G01 X-8.87849 Y4.51095
G01 X-8.98200 Y4.49640
G01 X-9.08790 Y4.50382
G01 X-9.18915 Y4.53293
G01 X-8.98282 Y4.49638
G01 X-9.08709 Y4.50367
G01 X-9.18839 Y4.53263
G01 X-9.28145 Y4.58200
G01 X-9.31547 Y4.61044
G01 X-9.31542 Y4.61067
Expand Down Expand Up @@ -1274,8 +1274,8 @@ G01 X-9.38079 Y5.32900
G01 X-9.31056 Y5.39684
G01 X-9.22054 Y5.45310
G01 X-9.12151 Y5.48905
G01 X-9.01717 Y5.50363
G01 X-8.91209 Y5.49618
G01 X-9.01717 Y5.50362
G01 X-8.91291 Y5.49633
G01 X-8.81161 Y5.46737
G01 X-8.71855 Y5.41800
G01 X-8.68453 Y5.38955
Expand Down Expand Up @@ -1313,9 +1313,9 @@ G01 X-8.68299 Y5.38813
G01 X-8.68367 Y5.38777
G01 X-8.68444 Y5.38691
G01 X-8.71947 Y5.41626
G01 X-8.81216 Y5.46548
G01 X-8.81178 Y5.46533
G01 X-8.91264 Y5.49429
G01 X-9.01731 Y5.50166
G01 X-9.01731 Y5.50165
G01 X-9.12123 Y5.48710
G01 X-9.22023 Y5.45107
G01 X-9.30920 Y5.39543
Expand Down Expand Up @@ -1343,10 +1343,10 @@ G01 X-9.31701 Y4.61187
G01 X-9.31633 Y4.61222
G01 X-9.31556 Y4.61308
G01 X-9.28052 Y4.58374
G01 X-9.18784 Y4.53452
G01 X-9.18822 Y4.53467
G01 X-9.08736 Y4.50571
G01 X-8.98269 Y4.49834
G01 X-8.87876 Y4.51290
G01 X-8.98269 Y4.49835
G01 X-8.87877 Y4.51290
G01 X-8.77977 Y4.54893
G01 X-8.69080 Y4.60457
G01 X-8.62013 Y4.67282
Expand Down
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 2ab7ea7

Please sign in to comment.