30 #include <svx/strings.hrc>
63 long nMaxRad=(std::max(nWdt,nHgt)+1) /2;
67 if (nWdt==0) aRetval.
setX(0 );
68 if (nHgt==0) aRetval.
setY(0 );
73 if (std::abs(nHgt)>32767 || std::abs(aRetval.
Y())>32767) {
76 aRetval.
setY(aRetval.
Y()*nHgt/nWdt );
82 if (std::abs(nWdt)>32767 || std::abs(aRetval.
X())>32767) {
85 aRetval.
setX(aRetval.
X()*nWdt/nHgt );
99 return std::make_unique<sdr::properties::CircleProperties>(*this);
107 return std::make_unique<sdr::contact::ViewContactOfSdrCircObj>(*this);
118 default: assert(
false);
154 long nAngleDif=nNewEndWink-nNewStartWink;
157 if (nAngleDif==36000)
nEndAngle+=nAngleDif;
183 default: assert(
false);
203 bNeed = eLine != drawing::LineStyle_NONE && eLine != drawing::LineStyle_SOLID;
206 if(!bNeed && eLine != drawing::LineStyle_NONE)
229 bNeed = eFill != drawing::FillStyle_NONE && eFill != drawing::FillStyle_SOLID;
255 aCenter.getX(), aCenter.getY()));
262 const double fStart((((36000 - nEnd) % 36000) / 18000.0) *
F_PI);
263 const double fEnd((((36000 - nStart) % 36000) / 18000.0) *
F_PI);
276 if(bCloseUsingCenter)
281 aSector.
append(aCircPolygon);
282 aCircPolygon = aSector;
296 -aTopLeft.getX(), -aTopLeft.getY()));
319 const char* pID=STR_ObjNameSingulCIRC;
341 if (!aName.isEmpty())
348 return sName.makeStringAndClear();
353 const char* pID=STR_ObjNamePluralCIRC;
377 return CloneHelper< SdrCircObj >(rTargetModel);
499 std::unique_ptr<SdrHdl> pH(
new SdrHdl(aPnt,eLocalKind));
500 pH->SetPointNum(nPNum);
501 pH->SetObj(const_cast<SdrCircObj*>(
this));
503 rHdlList.
AddHdl(std::move(pH));
606 const ImpCircUser* pU =
static_cast<const ImpCircUser*
>(rDrag.
GetUser());
624 return aBuf.makeStringAndClear();
639 return aBuf.makeStringAndClear();
649 void ImpCircUser::SetCreateParams(
SdrDragStat const & rStat)
654 nWdt=aR.Right()-aR.Left();
655 nHgt=aR.Bottom()-aR.Top();
660 if (nWdt==0) aP.
setX(0 );
661 if (nHgt==0) aP.setY(0 );
663 if (nHgt!=0) aP.setY(aP.Y()*nWdt/nHgt );
665 if (nWdt!=0) aP.setX(aP.X()*nHgt/nWdt );
702 ImpCircUser* pU=
static_cast<ImpCircUser*
>(rStat.
GetUser());
705 rStat.
SetUser(std::unique_ptr<ImpCircUser>(pU));
707 pU->SetCreateParams(rStat);
724 ImpCircUser* pU=
static_cast<ImpCircUser*
>(rStat.
GetUser());
747 ImpCircUser* pU=
static_cast<ImpCircUser*
>(rStat.
GetUser());
790 const ImpCircUser* pU =
static_cast<const ImpCircUser*
>(rDrag.
GetUser());
824 return PointerStyle::Cross;
845 if (bXMirr || bYMirr) {
854 if (! (bXMirr && bYMirr)) {
860 if (bXMirr!=bYMirr) {
877 long nAngleDif=nE0-nS0;
880 if (nAngleDif==36000)
nEndAngle+=nAngleDif;
903 long nMaxRad=(std::max(nWdt,nHgt)+1) /2;
908 if (nWdt==0) aTmpPt1.
setX(0 );
909 if (nHgt==0) aTmpPt1.
setY(0 );
914 if (nWdt==0) aTmpPt2.
setX(0 );
915 if (nHgt==0) aTmpPt2.
setY(0 );
949 if (nAngleDif==36000)
nEndAngle+=nAngleDif;
998 Union(rRect,aPntStart);
999 Union(rRect,aPntEnd);
1000 if ((a<=18000 && e>=18000) || (a>e && (a<=18000 || e>=18000))) {
1003 if ((a<=27000 && e>=27000) || (a>e && (a<=27000 || e>=27000))) {
1009 if ((a<=9000 && e>=9000) || (a>e && (a<=9000 || e>=9000))) {
1021 rRect.
Move(aDst.X(),aDst.Y());
1032 rRect.
Move(aTmpPt.X(),aTmpPt.Y());
1104 if(bKindChg || bAngleChg)
B2DPolygon const & createPolygonFromUnitCircle(sal_uInt32 nStartQuadrant=0)
static SVX_DLLPRIVATE void ImpSetCreateParams(SdrDragStat &rStat)
B2DPoint getCenter() const
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
void append(const basegfx::B2DPoint &rPoint, sal_uInt32 nCount)
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
Detects when a stylesheet is changed.
tools::Rectangle GetBoundRect() const
SdrCircObj & operator=(const SdrCircObj &rObj)
virtual void SetObjectItemDirect(const SfxPoolItem &rItem)=0
virtual sal_uInt16 GetObjIdentifier() const override
void ShearPoint(Point &rPnt, const Point &rRef, double tn, bool bVShear=false)
virtual SdrObjGeoData * NewGeoData() const override
A derived class must override these 3 methods if it has own geometric data that must be saved for Und...
#define XATTR_LINEENDWIDTH
virtual OUString TakeObjNameSingul() const override
const Point & GetStart() const
bool ImpCanConvTextToCurve() const
SVX_DLLPRIVATE basegfx::B2DPolygon ImpCalcXPolyCirc(const SdrCircKind eKind, const tools::Rectangle &rRect1, long nStart, long nEnd) const
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override
The Xor-Polygon is required by the View to drag the object.
sal_uInt32 GetPointNum() const
virtual void SetBoundRectDirty()
virtual void RecalcSnapRect() override
Snap is not done on the BoundRect but if possible on logic coordinates (i.e.
static void Union(tools::Rectangle &rR, const Point &rP)
SdrObjectUniquePtr ImpConvertAddText(SdrObjectUniquePtr pObj, bool bBezier) const
const Point & GetPoint(sal_Int32 nNum) const
virtual bool applySpecialDrag(SdrDragStat &rDrag) override
virtual SdrObjectUniquePtr DoConvertToPolyObj(bool bBezier, bool bAddText) const override
virtual sdr::properties::BaseProperties & GetProperties() const
virtual void TakeUnrotatedSnapRect(tools::Rectangle &rRect) const override
virtual const tools::Rectangle & GetSnapRect() const override
All geometrical data of an arbitrary object for use in undo/redo.
long NormAngle36000(long a)
Normalize angle to -180.00..179.99.
virtual bool HasText() const override
SdrCircKind ToSdrCircKind(SdrObjKind eKind)
virtual void NbcMirror(const Point &rRef1, const Point &rRef2) override
Rectangle objects (rectangle, circle, ...)
const SdrHdl * GetHdl() const
static OUString GetAngleString(long nAngle)
virtual void BrkCreate(SdrDragStat &rStat) override
virtual bool hasSpecialDrag() const override
The standard transformations (Move,Resize,Rotate,Mirror,Shear) are taken over by the View (TakeXorPol...
OUString SvxResId(const char *pId)
virtual void SaveGeoData(SdrObjGeoData &rGeo) const override
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const override
virtual bool MovCreate(SdrDragStat &rStat) override
#define SDRATTR_CIRCENDANGLE
virtual Point GetSnapPoint(sal_uInt32 i) const override
const SfxItemSet & GetObjectItemSet() const
SdrAngleItem makeSdrCircEndAngleItem(long nAngle)
virtual bool BckCreate(SdrDragStat &rStat) override
void SetOrtho4Possible(bool bOn=true)
void TakeCreateRect(tools::Rectangle &rRect) const
B2DHomMatrix createScaleTranslateB2DHomMatrix(double fScaleX, double fScaleY, double fTranslateX, double fTranslateY)
tools::Rectangle maSnapRect
virtual sal_uInt32 GetSnapPointCount() const override
snap to special points of an Object (polygon points, center of circle)
virtual void AddToHdlList(SdrHdlList &rHdlList) const override
SVX_DLLPRIVATE void ImpSetCircInfoToAttr()
void SetNoSnap(bool bOn=true)
virtual bool applySpecialDrag(SdrDragStat &rDrag) override
virtual OUString getSpecialDragComment(const SdrDragStat &rDrag) const override
const XPolygon & GetXPoly() const
SdrObject * GetCreateObj() const
tools::Rectangle aOutRect
SdrPathObjUniquePtr ImpConvertMakeObj(const basegfx::B2DPolyPolygon &rPolyPolygon, bool bClosed, bool bBezier) const
virtual std::unique_ptr< sdr::properties::BaseProperties > CreateObjectSpecificProperties() override
sal_Int32 GetPointCount() const
void MirrorPoint(Point &rPnt, const Point &rRef1, const Point &rRef2)
SdrView * GetView() const
bool IsAngleSnapEnabled() const
virtual void SaveGeoData(SdrObjGeoData &rGeo) const override
long GetSnapAngle() const
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
virtual bool beginSpecialDrag(SdrDragStat &rDrag) const override
virtual bool BegCreate(SdrDragStat &rStat) override
Every object must be able to create itself interactively.
virtual ~SdrCircObj() override
SdrAngleItem makeSdrCircStartAngleItem(long nAngle)
long BigMulDiv(long nVal, long nMul, long nDiv)
void transform(const basegfx::B2DHomMatrix &rMatrix)
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
SdrRectObj & operator=(const SdrRectObj &rCopy)
void setClosed(bool bNew)
void RotatePoint(Point &rPnt, const Point &rRef, double sn, double cs)
void SetActionRect(const tools::Rectangle &rR)
virtual OUString getSpecialDragComment(const SdrDragStat &rDrag) const override
virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat &rDrag) const override
Polygon dragged by the user when creating the object.
sal_Int32 GetDenominator() const
virtual void RestGeoData(const SdrObjGeoData &rGeo) override
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
virtual SVX_DLLPRIVATE void RecalcXPoly() override
Subclasses should override RecalcXPoly() by creating an XPolygon instance with new and assigning it t...
virtual OUString TakeObjNamePlural() const override
virtual void NbcMirror(const Point &rRef1, const Point &rRef2) override
OUString ImpGetDescriptionStr(const char *pStrCacheID) const
virtual sal_uInt32 GetHdlCount() const override
Via GetHdlCount the number of Handles can be retrieved.
B2DPolygon createPolygonFromEllipseSegment(const B2DPoint &rCenter, double fRadiusX, double fRadiusY, double fStart, double fEnd)
void SetUser(std::unique_ptr< SdrDragStatUserData > pU)
virtual void NbcShear(const Point &rRef, long nAngle, double tn, bool bVShear) override
std::unique_ptr< XPolygon > mpXPoly
B2DPoint getMinimum() const
virtual PointerStyle GetCreatePointer() const override
get the cursor/pointer that signals creating this object
sal_Int32 GetNumerator() const
static Point GetAnglePnt(const tools::Rectangle &rR, long nAngle)
virtual bool EndCreate(SdrDragStat &rStat, SdrCreateCmd eCmd) override
std::unique_ptr< SdrObject, SdrObjectFreeOp > SdrObjectUniquePtr
SdrCircObj(SdrModel &rSdrModel, SdrCircKind eNewKind)
const Point & GetNow() const
virtual bool beginSpecialDrag(SdrDragStat &rDrag) const
long GetAngle(const Point &rPnt)
The Y axis points down! The function negates the Y axis, when calculating the angle, such that GetAngle(Point(0,-1))=90 deg.
SVX_DLLPRIVATE void ImpSetAttrToCircInfo()
virtual void RestGeoData(const SdrObjGeoData &rGeo) override
virtual void SetRectsDirty(bool bNotMyself=false, bool bRecursive=true)
virtual void NbcMove(const Size &aSiz) override
The methods Move, Resize, Rotate, Mirror, Shear, SetSnapRect and SetLogicRect call the corresponding ...
#define SDRATTR_CIRCSTARTANGLE
#define XATTR_LINESTARTWIDTH
bool LineGeometryUsageIsNecessary() const
SVX_DLLPRIVATE bool PaintNeedsXPolyCirc() const
SdrDragStatUserData * GetUser() const
B2DHomMatrix createShearXRotateTranslateB2DHomMatrix(double fShearX, double fRadiant, double fTranslateX, double fTranslateY)
virtual void NbcSetSnapRect(const tools::Rectangle &rRect) override
B2DHomMatrix createTranslateB2DHomMatrix(double fTranslateX, double fTranslateY)
virtual void SetChanged()
virtual void NbcShear(const Point &rRef, long nAngle, double tn, bool bVShear) override
static void ImpJustifyRect(tools::Rectangle &rRect)
void AddHdl(std::unique_ptr< SdrHdl > pHdl)
virtual bool IsFontwork() const
virtual SdrCircObj * CloneSdrObject(SdrModel &rTargetModel) const override
SdrHdlKind GetKind() const
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
Detects when a stylesheet is changed.
rectangle (round corners optional)
virtual std::unique_ptr< sdr::contact::ViewContact > CreateObjectSpecificViewContact() override