summaryrefslogtreecommitdiff
path: root/drawinglayer/source/primitive2d/gridprimitive2d.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'drawinglayer/source/primitive2d/gridprimitive2d.cxx')
-rw-r--r--drawinglayer/source/primitive2d/gridprimitive2d.cxx350
1 files changed, 175 insertions, 175 deletions
diff --git a/drawinglayer/source/primitive2d/gridprimitive2d.cxx b/drawinglayer/source/primitive2d/gridprimitive2d.cxx
index 232c35fa66c2..66a747452103 100644
--- a/drawinglayer/source/primitive2d/gridprimitive2d.cxx
+++ b/drawinglayer/source/primitive2d/gridprimitive2d.cxx
@@ -32,221 +32,221 @@ namespace drawinglayer::primitive2d
{
void GridPrimitive2D::create2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const
{
- if(!rViewInformation.getViewport().isEmpty() && getWidth() > 0.0 && getHeight() > 0.0)
+ if(!(!rViewInformation.getViewport().isEmpty() && getWidth() > 0.0 && getHeight() > 0.0))
+ return;
+
+ // decompose grid matrix to get logic size
+ basegfx::B2DVector aScale, aTranslate;
+ double fRotate, fShearX;
+ getTransform().decompose(aScale, aTranslate, fRotate, fShearX);
+
+ // create grid matrix which transforms from scaled logic to view
+ basegfx::B2DHomMatrix aRST(basegfx::utils::createShearXRotateTranslateB2DHomMatrix(
+ fShearX, fRotate, aTranslate.getX(), aTranslate.getY()));
+ aRST *= rViewInformation.getObjectToViewTransformation();
+
+ // get step widths
+ double fStepX(getWidth());
+ double fStepY(getHeight());
+ const double fMinimalStep(10.0);
+
+ // guarantee a step width of 10.0
+ if(basegfx::fTools::less(fStepX, fMinimalStep))
{
- // decompose grid matrix to get logic size
- basegfx::B2DVector aScale, aTranslate;
- double fRotate, fShearX;
- getTransform().decompose(aScale, aTranslate, fRotate, fShearX);
-
- // create grid matrix which transforms from scaled logic to view
- basegfx::B2DHomMatrix aRST(basegfx::utils::createShearXRotateTranslateB2DHomMatrix(
- fShearX, fRotate, aTranslate.getX(), aTranslate.getY()));
- aRST *= rViewInformation.getObjectToViewTransformation();
-
- // get step widths
- double fStepX(getWidth());
- double fStepY(getHeight());
- const double fMinimalStep(10.0);
-
- // guarantee a step width of 10.0
- if(basegfx::fTools::less(fStepX, fMinimalStep))
- {
- fStepX = fMinimalStep;
- }
+ fStepX = fMinimalStep;
+ }
- if(basegfx::fTools::less(fStepY, fMinimalStep))
- {
- fStepY = fMinimalStep;
- }
+ if(basegfx::fTools::less(fStepY, fMinimalStep))
+ {
+ fStepY = fMinimalStep;
+ }
- // get relative distances in view coordinates
- double fViewStepX((rViewInformation.getObjectToViewTransformation() * basegfx::B2DVector(fStepX, 0.0)).getLength());
- double fViewStepY((rViewInformation.getObjectToViewTransformation() * basegfx::B2DVector(0.0, fStepY)).getLength());
- double fSmallStepX(1.0), fViewSmallStepX(1.0), fSmallStepY(1.0), fViewSmallStepY(1.0);
- sal_uInt32 nSmallStepsX(0), nSmallStepsY(0);
+ // get relative distances in view coordinates
+ double fViewStepX((rViewInformation.getObjectToViewTransformation() * basegfx::B2DVector(fStepX, 0.0)).getLength());
+ double fViewStepY((rViewInformation.getObjectToViewTransformation() * basegfx::B2DVector(0.0, fStepY)).getLength());
+ double fSmallStepX(1.0), fViewSmallStepX(1.0), fSmallStepY(1.0), fViewSmallStepY(1.0);
+ sal_uInt32 nSmallStepsX(0), nSmallStepsY(0);
- // setup subdivisions
- if(getSubdivisionsX())
- {
- fSmallStepX = fStepX / getSubdivisionsX();
- fViewSmallStepX = fViewStepX / getSubdivisionsX();
- }
+ // setup subdivisions
+ if(getSubdivisionsX())
+ {
+ fSmallStepX = fStepX / getSubdivisionsX();
+ fViewSmallStepX = fViewStepX / getSubdivisionsX();
+ }
- if(getSubdivisionsY())
- {
- fSmallStepY = fStepY / getSubdivisionsY();
- fViewSmallStepY = fViewStepY / getSubdivisionsY();
- }
+ if(getSubdivisionsY())
+ {
+ fSmallStepY = fStepY / getSubdivisionsY();
+ fViewSmallStepY = fViewStepY / getSubdivisionsY();
+ }
- // correct step width
- while(fViewStepX < getSmallestViewDistance())
- {
- fViewStepX *= 2.0;
- fStepX *= 2.0;
- }
+ // correct step width
+ while(fViewStepX < getSmallestViewDistance())
+ {
+ fViewStepX *= 2.0;
+ fStepX *= 2.0;
+ }
- while(fViewStepY < getSmallestViewDistance())
+ while(fViewStepY < getSmallestViewDistance())
+ {
+ fViewStepY *= 2.0;
+ fStepY *= 2.0;
+ }
+
+ // correct small step width
+ if(getSubdivisionsX())
+ {
+ while(fViewSmallStepX < getSmallestSubdivisionViewDistance())
{
- fViewStepY *= 2.0;
- fStepY *= 2.0;
+ fViewSmallStepX *= 2.0;
+ fSmallStepX *= 2.0;
}
- // correct small step width
- if(getSubdivisionsX())
- {
- while(fViewSmallStepX < getSmallestSubdivisionViewDistance())
- {
- fViewSmallStepX *= 2.0;
- fSmallStepX *= 2.0;
- }
+ nSmallStepsX = static_cast<sal_uInt32>(fStepX / fSmallStepX);
+ }
- nSmallStepsX = static_cast<sal_uInt32>(fStepX / fSmallStepX);
+ if(getSubdivisionsY())
+ {
+ while(fViewSmallStepY < getSmallestSubdivisionViewDistance())
+ {
+ fViewSmallStepY *= 2.0;
+ fSmallStepY *= 2.0;
}
- if(getSubdivisionsY())
- {
- while(fViewSmallStepY < getSmallestSubdivisionViewDistance())
- {
- fViewSmallStepY *= 2.0;
- fSmallStepY *= 2.0;
- }
+ nSmallStepsY = static_cast<sal_uInt32>(fStepY / fSmallStepY);
+ }
- nSmallStepsY = static_cast<sal_uInt32>(fStepY / fSmallStepY);
- }
+ // calculate extended viewport in which grid points may lie at all
+ basegfx::B2DRange aExtendedViewport;
- // calculate extended viewport in which grid points may lie at all
- basegfx::B2DRange aExtendedViewport;
+ if(rViewInformation.getDiscreteViewport().isEmpty())
+ {
+ // not set, use logic size to travel over all potential grid points
+ aExtendedViewport = basegfx::B2DRange(0.0, 0.0, aScale.getX(), aScale.getY());
+ }
+ else
+ {
+ // transform unit range to discrete view
+ aExtendedViewport = basegfx::B2DRange(0.0, 0.0, 1.0, 1.0);
+ basegfx::B2DHomMatrix aTrans(rViewInformation.getObjectToViewTransformation() * getTransform());
+ aExtendedViewport.transform(aTrans);
- if(rViewInformation.getDiscreteViewport().isEmpty())
- {
- // not set, use logic size to travel over all potential grid points
- aExtendedViewport = basegfx::B2DRange(0.0, 0.0, aScale.getX(), aScale.getY());
- }
- else
+ // intersect with visible part
+ aExtendedViewport.intersect(rViewInformation.getDiscreteViewport());
+
+ if(!aExtendedViewport.isEmpty())
{
- // transform unit range to discrete view
- aExtendedViewport = basegfx::B2DRange(0.0, 0.0, 1.0, 1.0);
- basegfx::B2DHomMatrix aTrans(rViewInformation.getObjectToViewTransformation() * getTransform());
+ // convert back and apply scale
+ aTrans.invert();
+ aTrans.scale(aScale.getX(), aScale.getY());
aExtendedViewport.transform(aTrans);
- // intersect with visible part
- aExtendedViewport.intersect(rViewInformation.getDiscreteViewport());
-
- if(!aExtendedViewport.isEmpty())
- {
- // convert back and apply scale
- aTrans.invert();
- aTrans.scale(aScale.getX(), aScale.getY());
- aExtendedViewport.transform(aTrans);
-
- // crop start/end in X/Y to multiples of logical step width
- const double fHalfCrossSize((rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(3.0, 0.0)).getLength());
- const double fMinX(floor((aExtendedViewport.getMinX() - fHalfCrossSize) / fStepX) * fStepX);
- const double fMaxX(ceil((aExtendedViewport.getMaxX() + fHalfCrossSize) / fStepX) * fStepX);
- const double fMinY(floor((aExtendedViewport.getMinY() - fHalfCrossSize) / fStepY) * fStepY);
- const double fMaxY(ceil((aExtendedViewport.getMaxY() + fHalfCrossSize) / fStepY) * fStepY);
-
- // put to aExtendedViewport and crop on object logic size
- aExtendedViewport = basegfx::B2DRange(
- std::max(fMinX, 0.0),
- std::max(fMinY, 0.0),
- std::min(fMaxX, aScale.getX()),
- std::min(fMaxY, aScale.getY()));
- }
+ // crop start/end in X/Y to multiples of logical step width
+ const double fHalfCrossSize((rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(3.0, 0.0)).getLength());
+ const double fMinX(floor((aExtendedViewport.getMinX() - fHalfCrossSize) / fStepX) * fStepX);
+ const double fMaxX(ceil((aExtendedViewport.getMaxX() + fHalfCrossSize) / fStepX) * fStepX);
+ const double fMinY(floor((aExtendedViewport.getMinY() - fHalfCrossSize) / fStepY) * fStepY);
+ const double fMaxY(ceil((aExtendedViewport.getMaxY() + fHalfCrossSize) / fStepY) * fStepY);
+
+ // put to aExtendedViewport and crop on object logic size
+ aExtendedViewport = basegfx::B2DRange(
+ std::max(fMinX, 0.0),
+ std::max(fMinY, 0.0),
+ std::min(fMaxX, aScale.getX()),
+ std::min(fMaxY, aScale.getY()));
}
+ }
- if(!aExtendedViewport.isEmpty())
+ if(aExtendedViewport.isEmpty())
+ return;
+
+ // prepare point vectors for point and cross markers
+ std::vector< basegfx::B2DPoint > aPositionsPoint;
+ std::vector< basegfx::B2DPoint > aPositionsCross;
+
+ for(double fX(aExtendedViewport.getMinX()); fX < aExtendedViewport.getMaxX(); fX += fStepX)
+ {
+ const bool bXZero(basegfx::fTools::equalZero(fX));
+
+ for(double fY(aExtendedViewport.getMinY()); fY < aExtendedViewport.getMaxY(); fY += fStepY)
{
- // prepare point vectors for point and cross markers
- std::vector< basegfx::B2DPoint > aPositionsPoint;
- std::vector< basegfx::B2DPoint > aPositionsCross;
+ const bool bYZero(basegfx::fTools::equalZero(fY));
- for(double fX(aExtendedViewport.getMinX()); fX < aExtendedViewport.getMaxX(); fX += fStepX)
+ if(!bXZero && !bYZero)
{
- const bool bXZero(basegfx::fTools::equalZero(fX));
-
- for(double fY(aExtendedViewport.getMinY()); fY < aExtendedViewport.getMaxY(); fY += fStepY)
+ // get discrete position and test against 3x3 area surrounding it
+ // since it's a cross
+ const double fHalfCrossSize(3.0 * 0.5);
+ const basegfx::B2DPoint aViewPos(aRST * basegfx::B2DPoint(fX, fY));
+ const basegfx::B2DRange aDiscreteRangeCross(
+ aViewPos.getX() - fHalfCrossSize, aViewPos.getY() - fHalfCrossSize,
+ aViewPos.getX() + fHalfCrossSize, aViewPos.getY() + fHalfCrossSize);
+
+ if(rViewInformation.getDiscreteViewport().overlaps(aDiscreteRangeCross))
{
- const bool bYZero(basegfx::fTools::equalZero(fY));
+ const basegfx::B2DPoint aLogicPos(rViewInformation.getInverseObjectToViewTransformation() * aViewPos);
+ aPositionsCross.push_back(aLogicPos);
+ }
+ }
- if(!bXZero && !bYZero)
- {
- // get discrete position and test against 3x3 area surrounding it
- // since it's a cross
- const double fHalfCrossSize(3.0 * 0.5);
- const basegfx::B2DPoint aViewPos(aRST * basegfx::B2DPoint(fX, fY));
- const basegfx::B2DRange aDiscreteRangeCross(
- aViewPos.getX() - fHalfCrossSize, aViewPos.getY() - fHalfCrossSize,
- aViewPos.getX() + fHalfCrossSize, aViewPos.getY() + fHalfCrossSize);
-
- if(rViewInformation.getDiscreteViewport().overlaps(aDiscreteRangeCross))
- {
- const basegfx::B2DPoint aLogicPos(rViewInformation.getInverseObjectToViewTransformation() * aViewPos);
- aPositionsCross.push_back(aLogicPos);
- }
- }
+ if(getSubdivisionsX() && !bYZero)
+ {
+ double fF(fX + fSmallStepX);
- if(getSubdivisionsX() && !bYZero)
- {
- double fF(fX + fSmallStepX);
-
- for(sal_uInt32 a(1); a < nSmallStepsX && fF < aExtendedViewport.getMaxX(); a++, fF += fSmallStepX)
- {
- const basegfx::B2DPoint aViewPos(aRST * basegfx::B2DPoint(fF, fY));
-
- if(rViewInformation.getDiscreteViewport().isInside(aViewPos))
- {
- const basegfx::B2DPoint aLogicPos(rViewInformation.getInverseObjectToViewTransformation() * aViewPos);
- aPositionsPoint.push_back(aLogicPos);
- }
- }
- }
+ for(sal_uInt32 a(1); a < nSmallStepsX && fF < aExtendedViewport.getMaxX(); a++, fF += fSmallStepX)
+ {
+ const basegfx::B2DPoint aViewPos(aRST * basegfx::B2DPoint(fF, fY));
- if(getSubdivisionsY() && !bXZero)
+ if(rViewInformation.getDiscreteViewport().isInside(aViewPos))
{
- double fF(fY + fSmallStepY);
-
- for(sal_uInt32 a(1); a < nSmallStepsY && fF < aExtendedViewport.getMaxY(); a++, fF += fSmallStepY)
- {
- const basegfx::B2DPoint aViewPos(aRST * basegfx::B2DPoint(fX, fF));
-
- if(rViewInformation.getDiscreteViewport().isInside(aViewPos))
- {
- const basegfx::B2DPoint aLogicPos(rViewInformation.getInverseObjectToViewTransformation() * aViewPos);
- aPositionsPoint.push_back(aLogicPos);
- }
- }
+ const basegfx::B2DPoint aLogicPos(rViewInformation.getInverseObjectToViewTransformation() * aViewPos);
+ aPositionsPoint.push_back(aLogicPos);
}
}
}
- // prepare return value
- const sal_uInt32 nCountPoint(aPositionsPoint.size());
- const sal_uInt32 nCountCross(aPositionsCross.size());
-
- // add PointArrayPrimitive2D if point markers were added
- if(nCountPoint)
+ if(getSubdivisionsY() && !bXZero)
{
- rContainer.push_back(new PointArrayPrimitive2D(aPositionsPoint, getBColor()));
- }
+ double fF(fY + fSmallStepY);
- // add MarkerArrayPrimitive2D if cross markers were added
- if(nCountCross)
- {
- if(!getSubdivisionsX() && !getSubdivisionsY())
- {
- // no subdivisions, so fall back to points at grid positions, no need to
- // visualize a difference between divisions and sub-divisions
- rContainer.push_back(new PointArrayPrimitive2D(aPositionsCross, getBColor()));
- }
- else
+ for(sal_uInt32 a(1); a < nSmallStepsY && fF < aExtendedViewport.getMaxY(); a++, fF += fSmallStepY)
{
- rContainer.push_back(new MarkerArrayPrimitive2D(aPositionsCross, getCrossMarker()));
+ const basegfx::B2DPoint aViewPos(aRST * basegfx::B2DPoint(fX, fF));
+
+ if(rViewInformation.getDiscreteViewport().isInside(aViewPos))
+ {
+ const basegfx::B2DPoint aLogicPos(rViewInformation.getInverseObjectToViewTransformation() * aViewPos);
+ aPositionsPoint.push_back(aLogicPos);
+ }
}
}
}
}
+
+ // prepare return value
+ const sal_uInt32 nCountPoint(aPositionsPoint.size());
+ const sal_uInt32 nCountCross(aPositionsCross.size());
+
+ // add PointArrayPrimitive2D if point markers were added
+ if(nCountPoint)
+ {
+ rContainer.push_back(new PointArrayPrimitive2D(aPositionsPoint, getBColor()));
+ }
+
+ // add MarkerArrayPrimitive2D if cross markers were added
+ if(!nCountCross)
+ return;
+
+ if(!getSubdivisionsX() && !getSubdivisionsY())
+ {
+ // no subdivisions, so fall back to points at grid positions, no need to
+ // visualize a difference between divisions and sub-divisions
+ rContainer.push_back(new PointArrayPrimitive2D(aPositionsCross, getBColor()));
+ }
+ else
+ {
+ rContainer.push_back(new MarkerArrayPrimitive2D(aPositionsCross, getCrossMarker()));
+ }
}
GridPrimitive2D::GridPrimitive2D(