Skip to content

Commit bc19be9

Browse files
committed
Move extract_borders to separate files
1 parent 3f72cc6 commit bc19be9

File tree

10 files changed

+265
-241
lines changed

10 files changed

+265
-241
lines changed

include/packingsolver/irregular/shape.hpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,9 +268,6 @@ std::pair<bool, Shape> equalize_close_y(
268268
Shape clean_shape(
269269
const Shape& shape);
270270

271-
std::vector<Shape> borders(
272-
const Shape& shape);
273-
274271
bool operator==(
275272
const ShapeElement& element_1,
276273
const ShapeElement& element_2);

src/irregular/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ target_sources(PackingSolver_irregular PRIVATE
88
optimize.cpp
99
shape.cpp
1010
shape_convex_hull.cpp
11+
shape_extract_borders.cpp
1112
shape_self_intersections_removal.cpp
1213
shape_simplification.cpp
1314
shape_trapezoidation.cpp

src/irregular/branching_scheme.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "irregular/branching_scheme.hpp"
22

33
#include "irregular/shape_convex_hull.hpp"
4+
#include "irregular/shape_extract_borders.hpp"
45
#include "irregular/shape_trapezoidation.hpp"
56
#include "irregular/shape_simplification.hpp"
67

@@ -157,7 +158,7 @@ BranchingScheme::BranchingScheme(
157158
BranchingSchemeBinType& bb_bin_type_x = bin_types_[(int)Direction::LeftToRightThenBottomToTop][bin_type_id];
158159
BranchingSchemeBinType& bb_bin_type_y = bin_types_[(int)Direction::BottomToTopThenLeftToRight][bin_type_id];
159160

160-
for (const Shape& shape_border: borders(bin_type.shape)) {
161+
for (const Shape& shape_border: extract_borders(bin_type.shape)) {
161162
{
162163
Shape cleaned_shape = clean_shape(shape_border);
163164
//std::cout << cleaned_shape.to_string(0) << std::endl;

src/irregular/shape.cpp

Lines changed: 0 additions & 185 deletions
Original file line numberDiff line numberDiff line change
@@ -865,188 +865,3 @@ bool irregular::operator==(
865865

866866
return true;
867867
}
868-
869-
std::vector<Shape> packingsolver::irregular::borders(
870-
const Shape& shape)
871-
{
872-
std::vector<Shape> res;
873-
874-
auto mm = shape.compute_min_max();
875-
//std::cout << "mm.first.x " << mm.first.x
876-
// << " mm.first.y " << mm.first.y
877-
// << " mm.second.x " << mm.second.x
878-
// << " mm.second.y " << mm.second.y
879-
// << std::endl;
880-
881-
Shape shape_border;
882-
ElementPos element_0_pos = 0;
883-
for (ElementPos element_pos = 0;
884-
element_pos < shape.elements.size();
885-
++element_pos) {
886-
const ShapeElement& shape_element = shape.elements[element_pos];
887-
if (shape_element.start.x == mm.first.x) {
888-
element_0_pos = element_pos;
889-
break;
890-
}
891-
}
892-
//std::cout << "element_0_pos " << element_0_pos << std::endl;
893-
// 0: left; 1: bottom; 2: right; 3: top.
894-
const ShapeElement& element_0 = shape.elements[element_0_pos];
895-
int start_border = (element_0.start.y == mm.first.y)? 1: 0;
896-
LengthDbl start_coordinate = element_0.start.y;
897-
for (ElementPos element_pos = 0;
898-
element_pos < shape.elements.size();
899-
++element_pos) {
900-
const ShapeElement& element = shape.elements[(element_0_pos + element_pos) % shape.elements.size()];
901-
//std::cout << "element_pos " << ((element_0_pos + element_pos) % shape.elements.size())
902-
// << " / " << shape.elements.size()
903-
// << ": " << element.to_string()
904-
// << "; start_border: " << start_border
905-
// << std::endl;
906-
shape_border.elements.push_back(element);
907-
bool close = false;
908-
if (start_border == 0) {
909-
if (equal(element.end.x, mm.first.x)) {
910-
ShapeElement new_element;
911-
new_element.type = ShapeElementType::LineSegment;
912-
new_element.start = element.end;
913-
new_element.end = shape_border.elements[0].start;
914-
shape_border.elements.push_back(new_element);
915-
close = true;
916-
if (!equal(element.end.y, mm.first.y)) {
917-
start_border = 0;
918-
} else {
919-
start_border = 1;
920-
}
921-
} else if (equal(element.end.y, mm.first.y)) {
922-
if (element.end.x != shape_border.elements[0].start.x) {
923-
ShapeElement new_element_1;
924-
new_element_1.type = ShapeElementType::LineSegment;
925-
new_element_1.start = element.end;
926-
new_element_1.end = {mm.first.x, mm.first.y};
927-
shape_border.elements.push_back(new_element_1);
928-
ShapeElement new_element_2;
929-
new_element_2.type = ShapeElementType::LineSegment;
930-
new_element_2.start = new_element_1.end;
931-
new_element_2.end = shape_border.elements[0].start;
932-
shape_border.elements.push_back(new_element_2);
933-
}
934-
close = true;
935-
if (!equal(element.end.x, mm.second.x)) {
936-
start_border = 1;
937-
} else {
938-
start_border = 2;
939-
}
940-
}
941-
} else if (start_border == 1) {
942-
if (equal(element.end.y, mm.first.y)) {
943-
ShapeElement new_element;
944-
new_element.type = ShapeElementType::LineSegment;
945-
new_element.start = element.end;
946-
new_element.end = shape_border.elements[0].start;
947-
shape_border.elements.push_back(new_element);
948-
close = true;
949-
if (!equal(element.end.x, mm.second.x)) {
950-
start_border = 1;
951-
} else {
952-
start_border = 2;
953-
}
954-
} else if (equal(element.end.x, mm.second.x)) {
955-
if (element.end.y != shape_border.elements[0].start.y) {
956-
ShapeElement new_element_1;
957-
new_element_1.type = ShapeElementType::LineSegment;
958-
new_element_1.start = element.end;
959-
new_element_1.end = {mm.second.x, mm.first.y};
960-
shape_border.elements.push_back(new_element_1);
961-
ShapeElement new_element_2;
962-
new_element_2.type = ShapeElementType::LineSegment;
963-
new_element_2.start = new_element_1.end;
964-
new_element_2.end = shape_border.elements[0].start;
965-
shape_border.elements.push_back(new_element_2);
966-
}
967-
close = true;
968-
if (!equal(element.end.y, mm.second.y)) {
969-
start_border = 2;
970-
} else {
971-
start_border = 3;
972-
}
973-
}
974-
} else if (start_border == 2) {
975-
if (equal(element.end.x, mm.second.x)) {
976-
ShapeElement new_element;
977-
new_element.type = ShapeElementType::LineSegment;
978-
new_element.start = element.end;
979-
new_element.end = shape_border.elements[0].start;
980-
shape_border.elements.push_back(new_element);
981-
close = true;
982-
if (!equal(element.end.y, mm.second.y)) {
983-
start_border = 2;
984-
} else {
985-
start_border = 3;
986-
}
987-
} else if (equal(element.end.y, mm.second.y)) {
988-
if (element.end.y != shape_border.elements[0].start.y) {
989-
ShapeElement new_element_1;
990-
new_element_1.type = ShapeElementType::LineSegment;
991-
new_element_1.start = element.end;
992-
new_element_1.end = {mm.second.x, mm.second.y};
993-
shape_border.elements.push_back(new_element_1);
994-
ShapeElement new_element_2;
995-
new_element_2.type = ShapeElementType::LineSegment;
996-
new_element_2.start = new_element_1.end;
997-
new_element_2.end = shape_border.elements[0].start;
998-
shape_border.elements.push_back(new_element_2);
999-
}
1000-
close = true;
1001-
if (!equal(element.end.x, mm.second.x)) {
1002-
start_border = 3;
1003-
} else {
1004-
start_border = 0;
1005-
}
1006-
}
1007-
} else if (start_border == 3) {
1008-
if (equal(element.end.y, mm.second.y)) {
1009-
ShapeElement new_element;
1010-
new_element.type = ShapeElementType::LineSegment;
1011-
new_element.start = element.end;
1012-
new_element.end = shape_border.elements[0].start;
1013-
shape_border.elements.push_back(new_element);
1014-
close = true;
1015-
if (!equal(element.end.x, mm.first.x)) {
1016-
start_border = 3;
1017-
} else {
1018-
start_border = 0;
1019-
}
1020-
} else if (equal(element.end.x, mm.first.x)) {
1021-
if (element.end.x != shape_border.elements[0].start.x) {
1022-
ShapeElement new_element_1;
1023-
new_element_1.type = ShapeElementType::LineSegment;
1024-
new_element_1.start = element.end;
1025-
new_element_1.end = {mm.first.x, mm.second.y};
1026-
shape_border.elements.push_back(new_element_1);
1027-
ShapeElement new_element_2;
1028-
new_element_2.type = ShapeElementType::LineSegment;
1029-
new_element_2.start = new_element_1.end;
1030-
new_element_2.end = shape_border.elements[0].start;
1031-
shape_border.elements.push_back(new_element_2);
1032-
}
1033-
close = true;
1034-
if (!equal(element.end.y, mm.second.y)) {
1035-
start_border = 0;
1036-
} else {
1037-
start_border = 1;
1038-
}
1039-
}
1040-
}
1041-
//std::cout << "shape_border " << shape_border.to_string(0) << std::endl;
1042-
// New shape.
1043-
if (close) {
1044-
//std::cout << "close " << shape_border.to_string(0) << std::endl;
1045-
if (shape_border.elements.size() >= 3)
1046-
res.push_back(shape_border.reverse());
1047-
shape_border.elements.clear();
1048-
}
1049-
}
1050-
1051-
return res;
1052-
}

0 commit comments

Comments
 (0)