xref: /trunk/main/basegfx/test/genericclipper.cxx (revision 131e08e2)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 
25 // MARKER(update_precomp.py): autogen include statement, do not remove
26 #include "precompiled_basegfx.hxx"
27 // autogenerated file with codegen.pl
28 
29 #include "preextstl.h"
30 #include "gtest/gtest.h"
31 #include "postextstl.h"
32 
33 #include <basegfx/matrix/b2dhommatrix.hxx>
34 #include <basegfx/curve/b2dcubicbezier.hxx>
35 #include <basegfx/curve/b2dbeziertools.hxx>
36 #include <basegfx/range/b2dpolyrange.hxx>
37 #include <basegfx/polygon/b2dpolygon.hxx>
38 #include <basegfx/polygon/b2dpolygontools.hxx>
39 #include <basegfx/polygon/b2dpolypolygontools.hxx>
40 #include <basegfx/polygon/b2dpolypolygoncutter.hxx>
41 #include <basegfx/polygon/b2dpolygonclipper.hxx>
42 #include <basegfx/polygon/b2dpolypolygon.hxx>
43 #include <basegfx/numeric/ftools.hxx>
44 
45 #include <boost/bind.hpp>
46 
47 using namespace ::basegfx;
48 
49 // FIXME:
50 #define RUN_OLD_FAILING_TESTS 0
51 
52 namespace basegfx2d
53 {
54 
55 class genericclipper : public ::testing::Test
56 {
57 protected:
58     B2DPolygon aSelfIntersecting;
59     B2DPolygon aShiftedRectangle;
60 
61 public:
62     // initialise your test code values here.
SetUp()63     virtual void SetUp()
64     {
65         aSelfIntersecting.append(B2DPoint(0,  0));
66         aSelfIntersecting.append(B2DPoint(0,  100));
67         aSelfIntersecting.append(B2DPoint(75, 100));
68         aSelfIntersecting.append(B2DPoint(75, 50));
69         aSelfIntersecting.append(B2DPoint(25, 50));
70         aSelfIntersecting.append(B2DPoint(25, 150));
71         aSelfIntersecting.append(B2DPoint(100,150));
72         aSelfIntersecting.append(B2DPoint(100,0));
73         aSelfIntersecting.setClosed(true);
74 
75         aShiftedRectangle = tools::createPolygonFromRect(
76             B2DRange(0,90,20,150));
77     }
78 
TearDown()79     virtual void TearDown()
80     {}
81 
validate(const char * pName,const char * pValidSvgD,B2DPolyPolygon (* pFunc)(const B2DPolyPolygon &,const B2DPolyPolygon &))82     void validate(const char* pName,
83                   const char* pValidSvgD,
84                   B2DPolyPolygon (*pFunc)(const B2DPolyPolygon&, const B2DPolyPolygon&))
85     {
86         const B2DPolyPolygon aSelfIntersect(
87             tools::prepareForPolygonOperation(aSelfIntersecting));
88         const B2DPolyPolygon aRect(
89             tools::prepareForPolygonOperation(aShiftedRectangle));
90 #if defined(VERBOSE)
91         fprintf(stderr, "%s input LHS - svg:d=\"%s\"\n",
92                 pName, rtl::OUStringToOString(
93                     basegfx::tools::exportToSvgD(
94                         aSelfIntersect, true, true, false),
95                     RTL_TEXTENCODING_UTF8).getStr() );
96         fprintf(stderr, "%s input RHS - svg:d=\"%s\"\n",
97                 pName, rtl::OUStringToOString(
98                     basegfx::tools::exportToSvgD(
99                         aRect, true, true, false),
100                     RTL_TEXTENCODING_UTF8).getStr() );
101 #endif
102 
103         const B2DPolyPolygon aRes=
104             pFunc(aSelfIntersect, aRect);
105 
106 #if defined(VERBOSE)
107         fprintf(stderr, "%s - svg:d=\"%s\"\n",
108                 pName, rtl::OUStringToOString(
109                     basegfx::tools::exportToSvgD(aRes, true, true, false),
110                     RTL_TEXTENCODING_UTF8).getStr() );
111 #endif
112 
113         rtl::OUString aValid=rtl::OUString::createFromAscii(pValidSvgD);
114 
115         ASSERT_TRUE(basegfx::tools::exportToSvgD(aRes, true, true, false) == aValid) << pName;
116     }
117 };
118 
TEST_F(genericclipper,validateOr)119 TEST_F(genericclipper, validateOr)
120 {
121 #if RUN_OLD_FAILING_TESTS
122     const char* pValid="m0 0h100v150h-75v-50h-5v50h-20v-50-10zm75 10v-50h-50v50z";
123     validate("validateOr", pValid, &tools::solvePolygonOperationOr);
124 #endif
125 }
126 
TEST_F(genericclipper,validateXor)127 TEST_F(genericclipper, validateXor)
128 {
129 #if RUN_OLD_FAILING_TESTS
130     const char* pValid="m0 0h100v150h-75v-50h-5v50h-20v-50-10zm0 10h20v-10h-20zm75 10v-50h-50v50z";
131     validate("validateXor", pValid, &tools::solvePolygonOperationXor);
132 #endif
133 }
134 
TEST_F(genericclipper,validateAnd)135 TEST_F(genericclipper, validateAnd)
136 {
137     const char* pValid="m0 100v-10h20v10z";
138     validate("validateAnd", pValid, &tools::solvePolygonOperationAnd);
139 }
140 
TEST_F(genericclipper,validateDiff)141 TEST_F(genericclipper, validateDiff)
142 {
143 #if RUN_OLD_FAILING_TESTS
144     const char* pValid="m0 90v-90h100v150h-75v-50h-5v-10zm55 10v-50h-50v50z";
145     validate("validateDiff", pValid, &tools::solvePolygonOperationDiff);
146 #endif
147 }
148 
149 // -----------------------------------------------------------------------------
150 
151 } // namespace basegfx2d
152