INTEGRATION: CWS svp01 (1.2.18); FILE MERGED
2006/05/31 14:06:25 thb 1.2.18.1: #i65904# Extracted cohen-sutherland rect clip tooling into exported header (needed for basebmp)
This commit is contained in:
@@ -4,9 +4,9 @@
|
|||||||
*
|
*
|
||||||
* $RCSfile: b2dpolygonclipper.cxx,v $
|
* $RCSfile: b2dpolygonclipper.cxx,v $
|
||||||
*
|
*
|
||||||
* $Revision: 1.2 $
|
* $Revision: 1.3 $
|
||||||
*
|
*
|
||||||
* last change: $Author: kz $ $Date: 2005-11-02 13:57:47 $
|
* last change: $Author: hr $ $Date: 2006-08-11 17:41:08 $
|
||||||
*
|
*
|
||||||
* The Contents of this file are made available subject to
|
* The Contents of this file are made available subject to
|
||||||
* the terms of GNU Lesser General Public License Version 2.1.
|
* the terms of GNU Lesser General Public License Version 2.1.
|
||||||
@@ -69,6 +69,10 @@
|
|||||||
#include <basegfx/curve/b2dcubicbezier.hxx>
|
#include <basegfx/curve/b2dcubicbezier.hxx>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef _BGFX_TOOLS_RECTCLIPTOOLS_HXX
|
||||||
|
#include <basegfx/tools/rectcliptools.hxx>
|
||||||
|
#endif
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
namespace basegfx
|
namespace basegfx
|
||||||
@@ -582,17 +586,6 @@ namespace basegfx
|
|||||||
sal_uInt32 clipmask; // clipping mask, e.g. 1000 1000
|
sal_uInt32 clipmask; // clipping mask, e.g. 1000 1000
|
||||||
};
|
};
|
||||||
|
|
||||||
inline sal_uInt32 getClipFlags( const ::basegfx::B2DPoint& rV,
|
|
||||||
const ::basegfx::B2DRectangle& rR )
|
|
||||||
{
|
|
||||||
// maxY | minY | maxX | minX
|
|
||||||
sal_uInt32 clip = (rV.getX() < rR.getMinX()) << 0;
|
|
||||||
clip |= (rV.getX() > rR.getMaxX()) << 1;
|
|
||||||
clip |= (rV.getY() < rR.getMinY()) << 2;
|
|
||||||
clip |= (rV.getY() > rR.getMaxY()) << 3;
|
|
||||||
return clip;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* polygon clipping rules (straight out of Foley and Van Dam)
|
* polygon clipping rules (straight out of Foley and Van Dam)
|
||||||
@@ -606,10 +599,10 @@ namespace basegfx
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
sal_uInt32 scissorLineSegment( ::basegfx::B2DPoint *in_vertex, // input buffer
|
sal_uInt32 scissorLineSegment( ::basegfx::B2DPoint *in_vertex, // input buffer
|
||||||
sal_uInt32 in_count, // number of verts in input buffer
|
sal_uInt32 in_count, // number of verts in input buffer
|
||||||
::basegfx::B2DPoint *out_vertex, // output buffer
|
::basegfx::B2DPoint *out_vertex, // output buffer
|
||||||
scissor_plane *pPlane, // scissoring plane
|
scissor_plane *pPlane, // scissoring plane
|
||||||
const ::basegfx::B2DRectangle &rR ) // clipping rectangle
|
const ::basegfx::B2DRectangle &rR ) // clipping rectangle
|
||||||
{
|
{
|
||||||
::basegfx::B2DPoint *curr;
|
::basegfx::B2DPoint *curr;
|
||||||
::basegfx::B2DPoint *next;
|
::basegfx::B2DPoint *next;
|
||||||
@@ -625,7 +618,7 @@ namespace basegfx
|
|||||||
next = &in_vertex[(i+1)%in_count];
|
next = &in_vertex[(i+1)%in_count];
|
||||||
|
|
||||||
// perform clipping judgement & mask against current plane.
|
// perform clipping judgement & mask against current plane.
|
||||||
sal_uInt32 clip = pPlane->clipmask & ((getClipFlags(*curr,rR)<<4)|getClipFlags(*next,rR));
|
sal_uInt32 clip = pPlane->clipmask & ((getCohenSutherlandClipFlags(*curr,rR)<<4)|getCohenSutherlandClipFlags(*next,rR));
|
||||||
|
|
||||||
if(clip==0) { // both verts are inside
|
if(clip==0) { // both verts are inside
|
||||||
out_vertex[out_count++] = *next;
|
out_vertex[out_count++] = *next;
|
||||||
@@ -690,19 +683,19 @@ namespace basegfx
|
|||||||
sp[0].nx = +1.0;
|
sp[0].nx = +1.0;
|
||||||
sp[0].ny = +0.0;
|
sp[0].ny = +0.0;
|
||||||
sp[0].d = -(rRange.getMinX());
|
sp[0].d = -(rRange.getMinX());
|
||||||
sp[0].clipmask = 0x11; // 0001 0001
|
sp[0].clipmask = (RectClipFlags::LEFT << 4) | RectClipFlags::LEFT; // 0001 0001
|
||||||
sp[1].nx = -1.0;
|
sp[1].nx = -1.0;
|
||||||
sp[1].ny = +0.0;
|
sp[1].ny = +0.0;
|
||||||
sp[1].d = +(rRange.getMaxX());
|
sp[1].d = +(rRange.getMaxX());
|
||||||
sp[1].clipmask = 0x22; // 0010 0010
|
sp[1].clipmask = (RectClipFlags::RIGHT << 4) | RectClipFlags::RIGHT; // 0010 0010
|
||||||
sp[2].nx = +0.0;
|
sp[2].nx = +0.0;
|
||||||
sp[2].ny = +1.0;
|
sp[2].ny = +1.0;
|
||||||
sp[2].d = -(rRange.getMinY());
|
sp[2].d = -(rRange.getMinY());
|
||||||
sp[2].clipmask = 0x44; // 0100 0100
|
sp[2].clipmask = (RectClipFlags::TOP << 4) | RectClipFlags::TOP; // 0100 0100
|
||||||
sp[3].nx = +0.0;
|
sp[3].nx = +0.0;
|
||||||
sp[3].ny = -1.0;
|
sp[3].ny = -1.0;
|
||||||
sp[3].d = +(rRange.getMaxY());
|
sp[3].d = +(rRange.getMaxY());
|
||||||
sp[3].clipmask = 0x88; // 1000 1000
|
sp[3].clipmask = (RectClipFlags::BOTTOM << 4) | RectClipFlags::BOTTOM; // 1000 1000
|
||||||
|
|
||||||
// retrieve the number of vertices of the triangulated polygon
|
// retrieve the number of vertices of the triangulated polygon
|
||||||
const sal_uInt32 nVertexCount = rCandidate.count();
|
const sal_uInt32 nVertexCount = rCandidate.count();
|
||||||
|
Reference in New Issue
Block a user