/* ......... 2015 Ivan Mahonin This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ { name: (Two squares) a: ( ( ((0, 0), (200, 0), (200, 200), (0, 200)) ) ) b: ((((100, 100), (300, 100), (300, 300), (100, 300)))) add: ((((0, 0), (200, 0), (200, 100), (300, 100), (300, 300), (100, 300), (100, 200), (0, 200)))) subtract: ((((0, 0), (200, 0), (200, 100), (100, 100), (100, 200), (0, 200)))) intersection: ((((100, 100), (200, 100), (200, 200), (100, 200)))) xor: ( (((0, 0), (200, 0), (200, 100), (100, 100), (100, 200), (0, 200))), (((200, 200), (200, 100), (300, 100), (300, 300), (100, 300), (100, 200))) ) } { name: (Self touch) a: ((( (100, 100), (200, 0), (400, 0), (400, 300), (0, 300), (0, 200), (100, 100), (100, 200), (200, 200), (200, 100) ))) b: ( (( (100, 0), (200, 0), (200, 300), (100, 300) )), (( (250, 100), (350, 100), (350, 200), (250, 200) )) ) add: ((( (100, 100), (100, 0), (400, 0), (400, 300), (0, 300), (0, 200) ))) subtract: ( ( ( (100, 100), (100, 300), (0, 300), (0, 200) ) ), ( ( (200, 0), (400, 0), (400, 300), (200, 300) ), ( (250, 100), (250, 200), (350, 200), (350, 100) ) ) ) intersection: ( (( (100, 100), (200, 0), (200, 100) )), (( (100, 200), (200, 200), (200, 300), (100, 300) )), (( (250, 100), (350, 100), (350, 200), (250, 200) )) ) xor: ( ( ( (100, 0), (200, 0), (100, 100) ) ), ( ( (100, 100), (200, 100), (200, 0), (400, 0), (400, 300), (200, 300), (200, 200), (100, 200), (100, 300), (0, 300), (0, 200) ), ( (250, 100), (250, 200), (350, 200), (350, 100) ) ) ) } { name: (Bad contours - cross) badA: ((( (0, 0), (0, 100), (200, 0), (200, 100) ))) a: ( (( (0, 0), (100, 50), (0, 100) )), (( (200, 0), (200, 100), (100, 50) )) ) } { name: (Bad contours - hole) badA: ( (( (0, 0), (300, 0), (300, 300), (0, 300) )), (( (100, 100), (200, 100), (200, 200), (100, 200) )) ) a: (( ( (0, 0), (300, 0), (300, 300), (0, 300) ), ( (100, 100), (100, 200), (200, 200), (200, 100) ) )) }