@@ -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