21#include <svx/strings.hrc>
77 bool bTextRota90(
false);
78 bool bShowUnit(
false);
89 switch(eMeasureFieldKind)
91 case SdrMeasureFieldKind::Value:
95 if(eMeasureUnit == FieldUnit::NONE)
96 eMeasureUnit = eModUIUnit;
101 if(eMeasureUnit != eModUIUnit)
109 aFact *= aMeasureScale;
132 if(
aStr.indexOf(cDec) != -1 || (cDecAlt &&
aStr.indexOf(cDecAlt) != -1))
134 sal_Int32 nLen2(
aStr.getLength() - 1);
136 while(
aStr[nLen2] ==
'0')
142 if(
aStr[nLen2] == cDec || (cDecAlt &&
aStr[nLen2] == cDecAlt))
154 case SdrMeasureFieldKind::Unit:
160 if(eMeasureUnit == FieldUnit::NONE)
161 eMeasureUnit = eModUIUnit;
168 case SdrMeasureFieldKind::Rotate90Blanks:
186 return std::make_unique<sdr::properties::MeasureProperties>(*
this);
194 return std::make_unique<sdr::contact::ViewContactOfSdrMeasureObj>(*
this);
340 const double fOldWidth(std::max(aPolygonRange.
getWidth(), 1.0));
341 const double fScale(
static_cast<double>(nNewWidth) / fOldWidth);
356 Point aDelt(aP2); aDelt-=aP1;
362 tools::Long nArrow1Len=0;
bool bArrow1Center=
false;
363 tools::Long nArrow2Len=0;
bool bArrow2Center=
false;
370 bool bPfeileAussen =
false;
378 nArrow1Wdt = -nLineWdt * nArrow1Wdt / 100;
382 nArrow2Wdt = -nLineWdt * nArrow2Wdt / 100;
393 nArrowNeed=nArrow1Len+nArrow2Len+(nArrow1Wdt+nArrow2Wdt)/2;
394 if (rPol.
nLineLen<nArrowNeed) bPfeileAussen =
true;
395 nShortLen=(nArrow1Len+nArrow1Wdt + nArrow2Len+nArrow2Wdt) /2;
399 if (rPol.
eUsedTextVPos == css::drawing::MeasureTextVertPos_AUTO)
402 if (rPol.
eUsedTextVPos == css::drawing::MeasureTextVertPos_CENTERED)
411 if (rPol.
eUsedTextHPos==css::drawing::MeasureTextHorzPos_AUTO) {
412 bool bOutside =
false;
414 if (nNeedSiz>rPol.
nLineLen) bOutside =
true;
416 if (nNeedSiz+nArrowNeed>rPol.
nLineLen) bPfeileAussen =
true;
418 tools::Long nSmallNeed=nArrow1Len+nArrow2Len+(nArrow1Wdt+nArrow2Wdt)/2/4;
419 if (nNeedSiz+nSmallNeed>rPol.
nLineLen) bPfeileAussen =
true;
421 rPol.
eUsedTextHPos=bOutside ? css::drawing::MeasureTextHorzPos_LEFTOUTSIDE : css::drawing::MeasureTextHorzPos_INSIDE;
423 if (rPol.
eUsedTextHPos != css::drawing::MeasureTextHorzPos_INSIDE) bPfeileAussen =
true;
432 double nLineSin=sin(
a);
433 double nLineCos=cos(
a);
443 if (nTmpAngle>=18000_deg100) {
454 double nHlpSin=nLineCos;
455 double nHlpCos=-nLineSin;
483 Point aMainlinePt1(aP1.
X()+dx,aP1.
Y()+dy);
484 Point aMainlinePt2(aP2.
X()+dx,aP2.
Y()+dy);
485 if (!bPfeileAussen) {
507 if (rPol.
eUsedTextHPos==css::drawing::MeasureTextHorzPos_LEFTOUTSIDE) nLen1=nArrow1Len+nTextWdt;
508 if (rPol.
eUsedTextHPos==css::drawing::MeasureTextHorzPos_RIGHTOUTSIDE) nLen2=nArrow2Len+nTextWdt;
527 aRetval.
append(aPartPolyA);
534 aRetval.
append(aPartPolyA);
542 aRetval.
append(aPartPolyA);
548 aRetval.
append(aPartPolyA);
553 aRetval.
append(aPartPolyA);
560 std::optional<Color>& rpTxtColor, std::optional<Color>& rpFldColor, std::optional<FontLineStyle>& rpFldLineStyle, OUString& rRet)
const
564 if (pMeasureField!=
nullptr) {
566 if (rpFldColor && !bEdit)
583 if(pOutlinerParaObject==
nullptr)
601 rOutliner.
SetText(*pOutlinerParaObject);
650 case css::drawing::MeasureTextHorzPos_LEFTOUTSIDE: aTextPos.
setX(aPt1b.
X()-aTextSize2.
Width()-nArr1Len-nLWdt );
break;
651 case css::drawing::MeasureTextHorzPos_RIGHTOUTSIDE: aTextPos.
setX(aPt1b.
X()+nLen+nArr2Len+nLWdt );
break;
652 default: aTextPos.
setX(aPt1b.
X() ); aTextSize2.
setWidth(nLen );
655 case css::drawing::MeasureTextVertPos_CENTERED:
656 aTextPos.
setY(aPt1b.
Y()-aTextSize2.
Height()/2 );
break;
657 case css::drawing::MeasureTextVertPos_WEST: {
658 if (!bUpsideDown) aTextPos.
setY(aPt1b.
Y()+nLWdt );
659 else aTextPos.
setY(aPt1b.
Y()-aTextSize2.
Height()-nLWdt );
662 if (!bUpsideDown) aTextPos.
setY(aPt1b.
Y()-aTextSize2.
Height()-nLWdt );
663 else aTextPos.
setY(aPt1b.
Y()+nLWdt );
672 case css::drawing::MeasureTextHorzPos_LEFTOUTSIDE: aTextPos.
setX(aPt1b.
X()-aTextSize2.
Height()-nArr1Len );
break;
673 case css::drawing::MeasureTextHorzPos_RIGHTOUTSIDE: aTextPos.
setX(aPt1b.
X()+nLen+nArr2Len );
break;
677 case css::drawing::MeasureTextVertPos_CENTERED:
678 aTextPos.
setY(aPt1b.
Y()+aTextSize2.
Width()/2 );
break;
679 case css::drawing::MeasureTextVertPos_WEST: {
680 if (!bBelowRefEdge) aTextPos.
setY(aPt1b.
Y()+aTextSize2.
Width()+nLWdt );
681 else aTextPos.
setY(aPt1b.
Y()-nLWdt );
684 if (!bBelowRefEdge) aTextPos.
setY(aPt1b.
Y()-nLWdt );
685 else aTextPos.
setY(aPt1b.
Y()+aTextSize2.
Width()+nLWdt );
719 if (!
aName.isEmpty())
727 return SvxResId(STR_ObjNamePluralMEASURE);
752 for (sal_uInt32 nHdlNum=0; nHdlNum<6; ++nHdlNum)
758 case 2: aPt=
aPt1;
break;
759 case 3: aPt=
aPt2;
break;
764 pHdl->SetObjHdlNum(nHdlNum);
766 rHdlList.
AddHdl(std::move(pHdl));
784 if(nHdlNum != 2 && nHdlNum != 3)
900 bool bAnf=nHdlNum==2;
909 if (!bHLin || !bVLin) {
912 double nXFact=0;
if (!bVLin) nXFact=
static_cast<double>(ndx)/
static_cast<double>(ndx0);
913 double nYFact=0;
if (!bHLin) nYFact=
static_cast<double>(ndy)/
static_cast<double>(ndy0);
914 bool bHor=bHLin || (!bVLin && (nXFact>nYFact) ==bBigOrtho);
915 bool bVer=bVLin || (!bHLin && (nXFact<=nYFact)==bBigOrtho);
994 return PointerStyle::Cross;
1076 if (
i==0)
return aPt1;
1107 return std::make_unique<SdrMeasureObjGeoData>();
1143 sal_uInt16 nLoopStart(0);
1149 aPolyPoly.
append(aTmpPolyPolygon[0].getB2DPolygon());
1156 pPath->SetMergedItemSet(aSet);
1157 pPath->SetStyleSheet(pStyleSheet,
true);
1158 pGroup->GetSubList()->NbcInsertObject(pPath.get());
1171 aPolyPoly.
append(aTmpPolyPolygon[0].getB2DPolygon());
1177 pPath->SetMergedItemSet(aSet);
1178 pPath->SetStyleSheet(pStyleSheet,
true);
1180 pGroup->GetSubList()->NbcInsertObject(pPath.get());
1186 aPolyPoly.
append(aTmpPolyPolygon[1].getB2DPolygon());
1192 pPath->SetMergedItemSet(aSet);
1193 pPath->SetStyleSheet(pStyleSheet,
true);
1195 pGroup->GetSubList()->NbcInsertObject(pPath.get());
1208 aPolyPoly.
append(aTmpPolyPolygon[0].getB2DPolygon());
1214 pPath->SetMergedItemSet(aSet);
1215 pPath->SetStyleSheet(pStyleSheet,
true);
1217 pGroup->GetSubList()->NbcInsertObject(pPath.get());
1223 aPolyPoly.
append(aTmpPolyPolygon[1].getB2DPolygon());
1229 pPath->SetMergedItemSet(aSet);
1230 pPath->SetStyleSheet(pStyleSheet,
true);
1232 pGroup->GetSubList()->NbcInsertObject(pPath.get());
1238 for(;nLoopStart<
nCount;nLoopStart++)
1241 aPolyPoly.
append(aTmpPolyPolygon[nLoopStart].getB2DPolygon());
1247 pPath->SetMergedItemSet(aSet);
1248 pPath->SetStyleSheet(pStyleSheet,
true);
1250 pGroup->GetSubList()->NbcInsertObject(pPath.get());
1335 if (!bBelowRefEdge) {
1349 else eRet=EEAnchorMode::VCenterLeft;
1353 else eRet=EEAnchorMode::VCenterRight;
1357 else eRet=EEAnchorMode::VCenterHCenter;
1404 aPosA += aAnchorOffset;
1405 aPosB += aAnchorOffset;
1413 if(aNewPt1 ==
aPt1 && aNewPt2 ==
aPt2)
virtual sal_Int32 GetParagraphCount() const=0
const Fraction & X() const
sal_Int32 GetNumerator() const
sal_Int32 GetDenominator() const
Degree100 m_nRotationAngle
const OUString & getNumDecimalSepAlt() const
const OUString & getNumDecimalSep() const
const EditTextObject & GetTextObject() const
void SetText(const OutlinerParaObject &)
void QuickInsertText(const OUString &rText, const ESelection &rSel)
void QuickInsertField(const SvxFieldItem &rFld, const ESelection &rSel)
std::optional< OutlinerParaObject > CreateParaObject(sal_Int32 nStartPara=0, sal_Int32 nParaCount=EE_PARA_ALL) const
void SetStyleSheet(sal_Int32 nPara, SfxStyleSheet *pStyle)
bool SetUpdateLayout(bool bUpdate)
void SetParaAttribs(sal_Int32 nPara, const SfxItemSet &)
constexpr tools::Long Y() const
void setX(tools::Long nX)
void Move(tools::Long nHorzMove, tools::Long nVertMove)
void setY(tools::Long nY)
tools::Long AdjustY(tools::Long nVertMove)
tools::Long AdjustX(tools::Long nHorzMove)
constexpr tools::Long X() const
tools::Rectangle maSnapRect
bool IsCreate1stPointAsCenter() const
sal_Int32 GetPointCount() const
const Point & GetStart() const
SdrView * GetView() const
const SdrHdl * GetHdl() const
const Point & GetNow() const
void SetOrtho8Possible(bool bOn=true)
void SetEndDragChangesAttributes(bool bOn)
void AddHdl(std::unique_ptr< SdrHdl > pHdl)
sal_uInt32 GetObjHdlNum() const
SdrMeasureFieldKind GetMeasureFieldKind() const
virtual ~SdrMeasureObjGeoData() override
virtual bool IsPolyObj() const override
virtual void NbcShear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear) override
virtual bool hasSpecialDrag() const override
The standard transformations (Move,Resize,Rotate,Mirror,Shear) are taken over by the View (TakeXorPol...
virtual void SaveGeoData(SdrObjGeoData &rGeo) const override
virtual void TakeTextRect(SdrOutliner &rOutliner, tools::Rectangle &rTextRect, bool bNoEditText, tools::Rectangle *pAnchorRect, bool bLineWidth=true) const override
virtual bool applySpecialDrag(SdrDragStat &rDrag) override
virtual std::unique_ptr< sdr::contact::ViewContact > CreateObjectSpecificViewContact() override
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
virtual EEAnchorMode GetOutlinerViewAnchorMode() const override
virtual sal_uInt32 GetPointCount() const override
virtual void NbcMirror(const Point &rRef1, const Point &rRef2) override
virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix &rMatrix, const basegfx::B2DPolyPolygon &rPolyPolygon) override
virtual PointerStyle GetCreatePointer() const override
get the cursor/pointer that signals creating this object
virtual void BrkCreate(SdrDragStat &rStat) override
OUString TakeRepresentation(SdrMeasureFieldKind eMeasureFieldKind) const
void ImpTakeAttr(ImpMeasureRec &rRec) const
virtual void TakeUnrotatedSnapRect(tools::Rectangle &rRect) const override
virtual Point GetPoint(sal_uInt32 i) const override
void ImpEvalDrag(ImpMeasureRec &rRec, const SdrDragStat &rDrag) const
virtual bool MovCreate(SdrDragStat &rStat) override
virtual void TakeTextAnchorRect(tools::Rectangle &rAnchorRect) const override
virtual rtl::Reference< SdrObject > DoConvertToPolyObj(bool bBezier, bool bAddText) const override
virtual void NbcSetPoint(const Point &rPnt, sal_uInt32 i) override
virtual bool EndCreate(SdrDragStat &rStat, SdrCreateCmd eCmd) override
virtual ~SdrMeasureObj() override
virtual void NbcRotate(const Point &rRef, Degree100 nAngle, double sn, double cs) override
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const override
virtual sal_uInt32 GetSnapPointCount() const override
snap to special points of an Object (polygon points, center of circle)
virtual rtl::Reference< SdrObject > CloneSdrObject(SdrModel &rTargetModel) const override
virtual OUString TakeObjNamePlural() const override
virtual OutlinerParaObject * GetOutlinerParaObject() const override
virtual bool BegCreate(SdrDragStat &rStat) override
Every object must be able to create itself interactively.
virtual bool beginSpecialDrag(SdrDragStat &rDrag) const override
virtual OUString TakeObjNameSingul() const override
friend class SdrMeasureField
virtual std::unique_ptr< sdr::properties::BaseProperties > CreateObjectSpecificProperties() override
virtual sal_uInt32 GetHdlCount() const override
Via GetHdlCount the number of Handles can be retrieved.
virtual void AddToHdlList(SdrHdlList &rHdlList) const override
virtual bool BegTextEdit(SdrOutliner &rOutl) override
virtual Degree100 GetRotateAngle() const override
virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix &rMatrix, basegfx::B2DPolyPolygon &rPolyPolygon) const override
void ImpCalcGeometrics(const ImpMeasureRec &rRec, ImpMeasurePoly &rPol) const
virtual bool BckCreate(SdrDragStat &rStat) override
virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat &rDrag) const override
Polygon dragged by the user when creating the object.
virtual OUString getSpecialDragComment(const SdrDragStat &rDrag) const override
virtual void RecalcSnapRect() override
Snap is not done on the BoundRect but if possible on logic coordinates (i.e.
virtual void NbcSetOutlinerParaObject(std::optional< OutlinerParaObject > pTextObject) override
virtual bool CalcFieldValue(const SvxFieldItem &rField, sal_Int32 nPara, sal_uInt16 nPos, bool bEdit, std::optional< Color > &rpTxtColor, std::optional< Color > &rpFldColor, std::optional< FontLineStyle > &rpFldLineStyle, OUString &rRet) const override
virtual void NbcMove(const Size &rSiz) override
The methods Move, Resize, Rotate, Mirror, Shear, SetSnapRect and SetLogicRect call the corresponding ...
virtual std::unique_ptr< SdrObjGeoData > NewGeoData() const override
A derived class must override these 3 methods if it has own geometric data that must be saved for Und...
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override
The Xor-Polygon is required by the View to drag the object.
virtual void TakeTextEditArea(Size *pPaperMin, Size *pPaperMax, tools::Rectangle *pViewInit, tools::Rectangle *pViewMin) const override
virtual Point GetSnapPoint(sal_uInt32 i) const override
virtual SdrObjKind GetObjIdentifier() const override
virtual void RestoreGeoData(const SdrObjGeoData &rGeo) override
virtual const Size & GetTextSize() const override
static basegfx::B2DPolyPolygon ImpCalcXPoly(const ImpMeasurePoly &rPol)
FieldUnit GetUIUnit() const
OUString GetMetricString(tools::Long nVal, bool bNoUnitChars=false, sal_Int32 nNumDigits=-1) const
static OUString GetUnitString(FieldUnit eUnit)
All geometrical data of an arbitrary object for use in undo/redo.
const Point & GetAnchorPos() const
void ActionChanged() const
bool LineGeometryUsageIsNecessary() const
void BroadcastObjectChange() const
bool mbSupportTextIndentingOnLineWidthChange
void SetObjectItem(const SfxPoolItem &rItem)
SdrModel & getSdrModelFromSdrObject() const
SdrObjUserCall * m_pUserCall
SfxStyleSheet * GetStyleSheet() const
virtual const OUString & GetName() const
void SendUserCall(SdrUserCallType eUserCall, const tools::Rectangle &rBoundRect) const
virtual void SetChanged()
virtual const tools::Rectangle & GetLastBoundRect() const
const SfxItemSet & GetMergedItemSet() const
virtual void SetBoundRectDirty()
virtual void SetBoundAndSnapRectsDirty(bool bNotMyself=false, bool bRecursive=true)
const SfxItemSet & GetObjectItemSet() const
SdrTextHorzAdjust GetTextHorizontalAdjust() const
virtual void SaveGeoData(SdrObjGeoData &rGeo) const override
virtual void NbcMirror(const Point &rRef1, const Point &rRef2) override
virtual void RestoreGeoData(const SdrObjGeoData &rGeo) override
virtual void NbcShear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear) override
virtual void NbcMove(const Size &rSiz) override
The methods Move, Resize, Rotate, Mirror, Shear, SetSnapRect and SetLogicRect call the corresponding ...
tools::Long GetTextLowerDistance() const
Bottom inner spacing to borders.
virtual void TakeTextEditArea(Size *pPaperMin, Size *pPaperMax, tools::Rectangle *pViewInit, tools::Rectangle *pViewMin) const
SdrOutliner & ImpGetDrawOutliner() const
virtual bool BegTextEdit(SdrOutliner &rOutl)
virtual const Size & GetTextSize() const
virtual void TakeTextAnchorRect(::tools::Rectangle &rAnchorRect) const
virtual OutlinerParaObject * GetOutlinerParaObject() const override
friend class SdrMeasureObj
tools::Long GetTextLeftDistance() const
Left inner spacing to borders
tools::Long GetTextRightDistance() const
Right inner spacing to borders
virtual bool CalcFieldValue(const SvxFieldItem &rField, sal_Int32 nPara, sal_uInt16 nPos, bool bEdit, std::optional< Color > &rpTxtColor, std::optional< Color > &rpFldColor, std::optional< FontLineStyle > &rpFldLineStyle, OUString &rRet) const
virtual void TakeTextRect(SdrOutliner &rOutliner, tools::Rectangle &rTextRect, bool bNoEditText, tools::Rectangle *pAnchorRect, bool bLineWidth=true) const
virtual void NbcSetOutlinerParaObject(std::optional< OutlinerParaObject > pTextObject) override
SdrTextVertAdjust GetTextVerticalAdjust() const
rtl::Reference< SdrObject > ImpConvertAddText(rtl::Reference< SdrObject > pObj, bool bBezier) const
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
void setRectangle(tools::Rectangle const &rRectangle)
tools::Long GetTextUpperDistance() const
Top inner spacing to borders.
virtual void NbcRotate(const Point &rRef, Degree100 nAngle, double sn, double cs) override
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
constexpr tools::Long Height() const
tools::Long AdjustHeight(tools::Long n)
void setWidth(tools::Long nWidth)
tools::Long AdjustWidth(tools::Long n)
void setHeight(tools::Long nHeight)
constexpr tools::Long Width() const
const LocaleDataWrapper & GetLocaleData() const
const SvxFieldData * GetField() const
tools::Rectangle GetBoundRect() const
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
B2DRange getB2DRange() const
void append(const basegfx::B2DPoint &rPoint, sal_uInt32 nCount)
B2DVector getRange() const
B2DPoint getMinimum() const
OUString SvxResId(TranslateId aId)
constexpr TypedWhichId< SvxFieldItem > EE_FEATURE_FIELD(EE_FEATURE_NOTCONV+1)
tools::Long FRound(double fVal)
B2DHomMatrix createScaleTranslateB2DHomMatrix(double fScaleX, double fScaleY, double fTranslateX, double fTranslateY)
B2IRange fround(const B2DRange &rRange)
@ SDRTEXTVERTADJUST_BOTTOM
@ SDRTEXTVERTADJUST_CENTER
@ SDRTEXTHORZADJUST_CENTER
@ SDRTEXTHORZADJUST_RIGHT
css::drawing::MeasureTextVertPos eUsedTextVPos
tools::Long nShortLineLen
css::drawing::MeasureTextHorzPos eUsedTextHPos
tools::Long nHelpline1Len
tools::Long nHelplineDist
tools::Long nHelplineOverhang
css::drawing::MeasureTextHorzPos eWantTextHPos
tools::Long nHelpline2Len
css::drawing::MeasureTextVertPos eWantTextVPos
Degree100 nTextAutoAngleView
constexpr TypedWhichId< SdrMetricItem > SDRATTR_MEASUREHELPLINE1LEN(SDRATTR_MEASURE_FIRST+6)
constexpr TypedWhichId< SdrYesNoItem > SDRATTR_MEASURETEXTUPSIDEDOWN(SDRATTR_MEASURE_FIRST+10)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_MEASUREHELPLINE2LEN(SDRATTR_MEASURE_FIRST+7)
constexpr TypedWhichId< SdrYesNoItem > SDRATTR_MEASURESHOWUNIT(SDRATTR_MEASURE_FIRST+14)
constexpr TypedWhichId< SdrMeasureTextRota90Item > SDRATTR_MEASURETEXTROTA90(SDRATTR_MEASURE_FIRST+9)
constexpr TypedWhichId< SdrMeasureTextVPosItem > SDRATTR_MEASURETEXTVPOS(SDRATTR_MEASURE_FIRST+2)
constexpr TypedWhichId< SdrMeasureBelowRefEdgeItem > SDRATTR_MEASUREBELOWREFEDGE(SDRATTR_MEASURE_FIRST+8)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_MEASUREHELPLINEOVERHANG(SDRATTR_MEASURE_FIRST+4)
constexpr TypedWhichId< SdrAngleItem > SDRATTR_MEASURETEXTAUTOANGLEVIEW(SDRATTR_MEASURE_FIRST+17)
constexpr TypedWhichId< SdrMeasureScaleItem > SDRATTR_MEASURESCALE(SDRATTR_MEASURE_FIRST+13)
constexpr TypedWhichId< SdrMeasureUnitItem > SDRATTR_MEASUREUNIT(SDRATTR_MEASURE_FIRST+12)
constexpr TypedWhichId< SdrMeasureTextHPosItem > SDRATTR_MEASURETEXTHPOS(SDRATTR_MEASURE_FIRST+1)
constexpr TypedWhichId< SdrMeasureDecimalPlacesItem > SDRATTR_MEASUREDECIMALPLACES(SDRATTR_MEASURE_FIRST+20)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_MEASURELINEDIST(SDRATTR_MEASURE_FIRST+3)
constexpr TypedWhichId< SdrMeasureTextAutoAngleItem > SDRATTR_MEASURETEXTAUTOANGLE(SDRATTR_MEASURE_FIRST+16)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_MEASUREHELPLINEDIST(SDRATTR_MEASURE_FIRST+5)
@ Measure
object that represents a SdrPage
static tools::Long impGetLineStartEndDistance(const basegfx::B2DPolyPolygon &rPolyPolygon, tools::Long nNewWidth, bool bCenter)
FrPair GetMapFactor(MapUnit eS, MapUnit eD)
Degree100 GetAngle(const Point &rPnt)
The Y axis points down! The function negates the Y axis, when calculating the angle,...
void MirrorPoint(Point &rPnt, const Point &rRef1, const Point &rRef2)
tools::Long GetLen(const Point &rPnt)
Determine sector within the cartesian coordinate system.
tools::Long BigMulDiv(tools::Long nVal, tools::Long nMul, tools::Long nDiv)
Degree100 NormAngle36000(Degree100 a)
Normalize angle to -180.00..179.99.
void ShearPoint(Point &rPnt, const Point &rRef, double tn, bool bVShear=false)
void RotatePoint(Point &rPnt, const Point &rRef, double sn, double cs)
void ResizePoint(Point &rPnt, const Point &rRef, const Fraction &xFract, const Fraction &yFract)
SdrMetricItem makeSdrMeasureLineDistItem(tools::Long nVal)
SdrMetricItem makeSdrMeasureHelpline1LenItem(tools::Long nVal)
SdrMetricItem makeSdrMeasureHelpline2LenItem(tools::Long nVal)
constexpr TypedWhichId< XLineStartWidthItem > XATTR_LINESTARTWIDTH(XATTR_LINE_FIRST+6)
constexpr TypedWhichId< XLineWidthItem > XATTR_LINEWIDTH(XATTR_LINE_FIRST+2)
constexpr TypedWhichId< XLineEndItem > XATTR_LINEEND(XATTR_LINE_FIRST+5)
constexpr TypedWhichId< XLineStartItem > XATTR_LINESTART(XATTR_LINE_FIRST+4)
constexpr TypedWhichId< XLineEndCenterItem > XATTR_LINEENDCENTER(XATTR_LINE_FIRST+9)
constexpr TypedWhichId< XLineStartCenterItem > XATTR_LINESTARTCENTER(XATTR_LINE_FIRST+8)
constexpr TypedWhichId< XLineEndWidthItem > XATTR_LINEENDWIDTH(XATTR_LINE_FIRST+7)