summaryrefslogtreecommitdiff
path: root/basegfx/source/polygon/b3dpolypolygontools.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'basegfx/source/polygon/b3dpolypolygontools.cxx')
-rw-r--r--basegfx/source/polygon/b3dpolypolygontools.cxx240
1 files changed, 126 insertions, 114 deletions
diff --git a/basegfx/source/polygon/b3dpolypolygontools.cxx b/basegfx/source/polygon/b3dpolypolygontools.cxx
index 660d43288ae2..dd7fa412235e 100644
--- a/basegfx/source/polygon/b3dpolypolygontools.cxx
+++ b/basegfx/source/polygon/b3dpolypolygontools.cxx
@@ -17,6 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <rtl/instance.hxx>
#include <basegfx/polygon/b3dpolypolygontools.hxx>
#include <basegfx/range/b3drange.hxx>
#include <basegfx/polygon/b3dpolypolygon.hxx>
@@ -25,7 +26,6 @@
#include <numeric>
#include <basegfx/matrix/b3dhommatrix.hxx>
#include <basegfx/numeric/ftools.hxx>
-#include <osl/mutex.hxx>
//////////////////////////////////////////////////////////////////////////////
// predefines
@@ -53,127 +53,139 @@ namespace basegfx
return aRetval;
}
- B3DPolyPolygon createUnitCubePolyPolygon()
+ namespace
{
- static B3DPolyPolygon aRetval;
- ::osl::Mutex m_mutex;
-
- if(!aRetval.count())
+ struct theUnitCubePolyPolygon : public rtl::StaticWithInit<B3DPolyPolygon,
+ theUnitCubePolyPolygon>
{
- B3DPolygon aTemp;
- aTemp.append(B3DPoint(0.0, 0.0, 1.0));
- aTemp.append(B3DPoint(0.0, 1.0, 1.0));
- aTemp.append(B3DPoint(1.0, 1.0, 1.0));
- aTemp.append(B3DPoint(1.0, 0.0, 1.0));
- aTemp.setClosed(true);
- aRetval.append(aTemp);
-
- aTemp.clear();
- aTemp.append(B3DPoint(0.0, 0.0, 0.0));
- aTemp.append(B3DPoint(0.0, 1.0, 0.0));
- aTemp.append(B3DPoint(1.0, 1.0, 0.0));
- aTemp.append(B3DPoint(1.0, 0.0, 0.0));
- aTemp.setClosed(true);
- aRetval.append(aTemp);
-
- aTemp.clear();
- aTemp.append(B3DPoint(0.0, 0.0, 0.0));
- aTemp.append(B3DPoint(0.0, 0.0, 1.0));
- aRetval.append(aTemp);
-
- aTemp.clear();
- aTemp.append(B3DPoint(0.0, 1.0, 0.0));
- aTemp.append(B3DPoint(0.0, 1.0, 1.0));
- aRetval.append(aTemp);
-
- aTemp.clear();
- aTemp.append(B3DPoint(1.0, 1.0, 0.0));
- aTemp.append(B3DPoint(1.0, 1.0, 1.0));
- aRetval.append(aTemp);
-
- aTemp.clear();
- aTemp.append(B3DPoint(1.0, 0.0, 0.0));
- aTemp.append(B3DPoint(1.0, 0.0, 1.0));
- aRetval.append(aTemp);
- }
-
- return aRetval;
+ B3DPolyPolygon operator()()
+ {
+ B3DPolyPolygon aRetval;
+ B3DPolygon aTemp;
+ aTemp.append(B3DPoint(0.0, 0.0, 1.0));
+ aTemp.append(B3DPoint(0.0, 1.0, 1.0));
+ aTemp.append(B3DPoint(1.0, 1.0, 1.0));
+ aTemp.append(B3DPoint(1.0, 0.0, 1.0));
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+
+ aTemp.clear();
+ aTemp.append(B3DPoint(0.0, 0.0, 0.0));
+ aTemp.append(B3DPoint(0.0, 1.0, 0.0));
+ aTemp.append(B3DPoint(1.0, 1.0, 0.0));
+ aTemp.append(B3DPoint(1.0, 0.0, 0.0));
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+
+ aTemp.clear();
+ aTemp.append(B3DPoint(0.0, 0.0, 0.0));
+ aTemp.append(B3DPoint(0.0, 0.0, 1.0));
+ aRetval.append(aTemp);
+
+ aTemp.clear();
+ aTemp.append(B3DPoint(0.0, 1.0, 0.0));
+ aTemp.append(B3DPoint(0.0, 1.0, 1.0));
+ aRetval.append(aTemp);
+
+ aTemp.clear();
+ aTemp.append(B3DPoint(1.0, 1.0, 0.0));
+ aTemp.append(B3DPoint(1.0, 1.0, 1.0));
+ aRetval.append(aTemp);
+
+ aTemp.clear();
+ aTemp.append(B3DPoint(1.0, 0.0, 0.0));
+ aTemp.append(B3DPoint(1.0, 0.0, 1.0));
+ aRetval.append(aTemp);
+ return aRetval;
+ }
+ };
}
- B3DPolyPolygon createUnitCubeFillPolyPolygon()
+ B3DPolyPolygon createUnitCubePolyPolygon()
{
- static B3DPolyPolygon aRetval;
- ::osl::Mutex m_mutex;
+ return theUnitCubePolyPolygon::get();
+ }
- if(!aRetval.count())
+ namespace
+ {
+ struct theUnitCubeFillPolyPolygon : public rtl::StaticWithInit<B3DPolyPolygon,
+ theUnitCubeFillPolyPolygon>
{
- B3DPolygon aTemp;
-
- // all points
- const B3DPoint A(0.0, 0.0, 0.0);
- const B3DPoint B(0.0, 1.0, 0.0);
- const B3DPoint C(1.0, 1.0, 0.0);
- const B3DPoint D(1.0, 0.0, 0.0);
- const B3DPoint E(0.0, 0.0, 1.0);
- const B3DPoint F(0.0, 1.0, 1.0);
- const B3DPoint G(1.0, 1.0, 1.0);
- const B3DPoint H(1.0, 0.0, 1.0);
-
- // create bottom
- aTemp.append(D);
- aTemp.append(A);
- aTemp.append(E);
- aTemp.append(H);
- aTemp.setClosed(true);
- aRetval.append(aTemp);
-
- // create front
- aTemp.clear();
- aTemp.append(B);
- aTemp.append(A);
- aTemp.append(D);
- aTemp.append(C);
- aTemp.setClosed(true);
- aRetval.append(aTemp);
-
- // create left
- aTemp.clear();
- aTemp.append(E);
- aTemp.append(A);
- aTemp.append(B);
- aTemp.append(F);
- aTemp.setClosed(true);
- aRetval.append(aTemp);
-
- // create top
- aTemp.clear();
- aTemp.append(C);
- aTemp.append(G);
- aTemp.append(F);
- aTemp.append(B);
- aTemp.setClosed(true);
- aRetval.append(aTemp);
-
- // create right
- aTemp.clear();
- aTemp.append(H);
- aTemp.append(G);
- aTemp.append(C);
- aTemp.append(D);
- aTemp.setClosed(true);
- aRetval.append(aTemp);
-
- // create back
- aTemp.clear();
- aTemp.append(F);
- aTemp.append(G);
- aTemp.append(H);
- aTemp.append(E);
- aTemp.setClosed(true);
- aRetval.append(aTemp);
- }
+ B3DPolyPolygon operator()()
+ {
+ B3DPolyPolygon aRetval;
+ B3DPolygon aTemp;
+
+ // all points
+ const B3DPoint A(0.0, 0.0, 0.0);
+ const B3DPoint B(0.0, 1.0, 0.0);
+ const B3DPoint C(1.0, 1.0, 0.0);
+ const B3DPoint D(1.0, 0.0, 0.0);
+ const B3DPoint E(0.0, 0.0, 1.0);
+ const B3DPoint F(0.0, 1.0, 1.0);
+ const B3DPoint G(1.0, 1.0, 1.0);
+ const B3DPoint H(1.0, 0.0, 1.0);
+
+ // create bottom
+ aTemp.append(D);
+ aTemp.append(A);
+ aTemp.append(E);
+ aTemp.append(H);
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+
+ // create front
+ aTemp.clear();
+ aTemp.append(B);
+ aTemp.append(A);
+ aTemp.append(D);
+ aTemp.append(C);
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+
+ // create left
+ aTemp.clear();
+ aTemp.append(E);
+ aTemp.append(A);
+ aTemp.append(B);
+ aTemp.append(F);
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+
+ // create top
+ aTemp.clear();
+ aTemp.append(C);
+ aTemp.append(G);
+ aTemp.append(F);
+ aTemp.append(B);
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+
+ // create right
+ aTemp.clear();
+ aTemp.append(H);
+ aTemp.append(G);
+ aTemp.append(C);
+ aTemp.append(D);
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+
+ // create back
+ aTemp.clear();
+ aTemp.append(F);
+ aTemp.append(G);
+ aTemp.append(H);
+ aTemp.append(E);
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+ return aRetval;
+ }
+ };
+ }
- return aRetval;
+ B3DPolyPolygon createUnitCubeFillPolyPolygon()
+ {
+ return theUnitCubeFillPolyPolygon::get();
}
B3DPolyPolygon createCubePolyPolygonFromB3DRange( const B3DRange& rRange)