27 #include <svx/strings.hrc>
44 bSetMarkedPointsSmoothPossible=
false;
45 bSetMarkedSegmentsKindPossible=
false;
68 bool b1stSmooth(
true);
71 bool bSmoothFuz(
false);
75 for(
size_t nMarkNum = 0; nMarkNum < nMarkCount; ++nMarkNum)
94 const bool bClosed(pPath->
IsClosed());
102 for (
const auto& rPt : rPts)
104 sal_uInt32 nNum(rPt);
105 sal_uInt32 nPolyNum, nPntNum;
107 if(PolyPolygonEditor::GetRelativePolyPoint(pPath->
GetPathPoly(), nNum, nPolyNum, nPntNum))
110 bool bCanSegment(bClosed || nPntNum < aLocalPolygon.count() - 1);
130 if(!bSegmFuz && bCanSegment)
132 bool bCrv(aLocalPolygon.isNextControlPointUsed(nPntNum));
141 bSegmFuz = (bCrv != bCurve);
147 if(!b1stSmooth && !bSmoothFuz)
165 if(!b1stSegm && !bSegmFuz)
202 for(
size_t nMarkNum(nMarkCount); nMarkNum > 0;)
212 if (aEditor.SetPointsSmooth(eFlags, rPts))
236 for(
size_t nMarkNum=nMarkCount; nMarkNum > 0;)
245 if (aEditor.SetSegmentsKind(eKind, rPts))
302 for (
size_t nMarkNum=nMarkCount; nMarkNum>0;)
312 if (aEditor.DeletePoints(rPts))
314 if( aEditor.GetPolyPolygon().count() )
323 AddUndo(
GetModel()->GetSdrUndoFactory().CreateUndoDeleteObject(*pPath ) );
352 for(
size_t nMarkNum = nMarkCount; nMarkNum > 0;)
364 bool bCorrectionFlag(
false);
369 sal_uInt32 nNewPt0Idx(0);
376 AddUndo(
GetModel()->GetSdrUndoFactory().CreateUndoNewObject(*pNewObj));
383 DBG_ASSERT(!bCorrectionFlag,
"Multiple index corrections at SdrPolyEditView::RipUp().");
386 bCorrectionFlag =
true;
389 for(
const auto& rPt : rPts)
391 sal_uInt32 nPntNum(rPt);
392 nPntNum += nNewPt0Idx;
399 aReplaceSet.
insert( static_cast<sal_uInt16>(nPntNum) );
401 rPts.swap(aReplaceSet);
420 for(
size_t a = 0;
a < nMarkCount; ++
a)
425 if (!pMarkedPathObject)
429 if (rSelectedPoints.
empty())
434 if(1 == rPathPolyPolygon.
count())
439 const sal_uInt16 nPointCount(aPathPolygon.GetSize());
444 || std::any_of(rSelectedPoints.
begin(), rSelectedPoints.
end(),
445 [nPointCount](
const sal_uInt16 nMarkedPointNum) {
446 return nMarkedPointNum > 0 && nMarkedPointNum < nPointCount - 1;
460 for(
size_t a = 0;
a < nMarkCount; ++
a)
465 if(pMarkedPathObject)
470 const sal_uInt16 nPolygonCount(aPathPolyPolygon.Count());
472 for(sal_uInt16 b(0); !bRetval && b < nPolygonCount; b++)
475 const sal_uInt16 nPointCount(rPathPolygon.
GetSize());
477 bRetval = (nPointCount >= 3);
491 for(
size_t a = 0; !(bOpen && bClosed) &&
a < nMarkCount; ++
a)
496 if(pMarkedPathObject)
528 for (
size_t nm=0; nm<nMarkCount; ++nm)
545 for (
const auto& rPt : rPts)
547 sal_uInt32 nPt = rPt;
548 sal_uInt32 nPolyNum, nPointNum;
550 if(PolyPolygonEditor::GetRelativePolyPoint(aXPP, nPt, nPolyNum, nPointNum))
556 Point aPos, aC1, aC2;
563 if(aNewXP.isPrevControlPointUsed(nPointNum))
570 if(aNewXP.isNextControlPointUsed(nPointNum))
577 (*pTrFunc)(aPos,&aC1,&aC2,p1,p2,p3,p4);
590 aXPP.setB2DPolygon(nPolyNum, aNewXP);
599 static void ImpMove(Point& rPt, Point* pC1, Point* pC2,
const void* p1,
const void* ,
const void* ,
const void* )
601 rPt.Move(*static_cast<const Size*>(p1));
602 if (pC1!=
nullptr) pC1->Move(*static_cast<const Size*>(p1));
603 if (pC2!=
nullptr) pC2->Move(*static_cast<const Size*>(p1));
616 static void ImpResize(Point& rPt, Point* pC1, Point* pC2,
const void* p1,
const void* p2,
const void* p3,
const void* )
618 ResizePoint(rPt,*static_cast<const Point*>(p1),*static_cast<const Fraction*>(p2),*static_cast<const Fraction*>(p3));
619 if (pC1!=
nullptr)
ResizePoint(*pC1,*static_cast<const Point*>(p1),*static_cast<const Fraction*>(p2),*static_cast<const Fraction*>(p3));
620 if (pC2!=
nullptr)
ResizePoint(*pC2,*static_cast<const Point*>(p1),*static_cast<const Fraction*>(p2),*static_cast<const Fraction*>(p3));
633 static void ImpRotate(Point& rPt, Point* pC1, Point* pC2,
const void* p1,
const void* ,
const void* p3,
const void* p4)
635 RotatePoint(rPt,*static_cast<const Point*>(p1),*static_cast<const double*>(p3),*static_cast<const double*>(p4));
636 if (pC1!=
nullptr)
RotatePoint(*pC1,*static_cast<const Point*>(p1),*static_cast<const double*>(p3),*static_cast<const double*>(p4));
637 if (pC2!=
nullptr)
RotatePoint(*pC2,*static_cast<const Point*>(p1),*static_cast<const double*>(p3),*static_cast<const double*>(p4));
bool bSetMarkedSegmentsKindPossible
B2VectorContinuity getContinuityInPoint(const B2DPolygon &rCandidate, sal_uInt32 nIndex)
void SortMarkedObjects() const
SdrPolyEditView(SdrModel &rSdrModel, OutputDevice *pOut)
static void ImpMove(Point &rPt, Point *pC1, Point *pC2, const void *p1, const void *, const void *, const void *)
const SdrUShortCont & GetMarkedPoints() const
SVX_DLLPRIVATE void ImpCheckPolyPossibilities()
void DeleteMarkedPoints() override
void ResizePoint(Point &rPnt, const Point &rRef, const Fraction &xFract, const Fraction &yFract)
bool IsUndoEnabled() const
bool ImpIsFrameHandles() const
void ForcePossibilities() const
void RipUpAtMarkedPoints() override
SdrPathSegmentKind GetMarkedSegmentsKind() const override
OUString const & GetDescriptionOfMarkedPoints() const
void SetMarkedSegmentsKind(SdrPathSegmentKind eKind) override
SVX_DLLPRIVATE void ImpTransformMarkedPoints(PPolyTrFunc pTrFunc, const void *p1, const void *p2=nullptr, const void *p3=nullptr, const void *p4=nullptr)
virtual void BrkAction() override
static void Free(SdrObject *&_rpObject)
virtual void InsertObject(SdrObject *pObj, size_t nPos=SAL_MAX_SIZE)
SdrPathSmoothKind GetMarkedPointsSmooth() const override
B2DPolygon const & getB2DPolygon(sal_uInt32 nIndex) const
SdrPathSmoothKind eMarkedPointsSmooth
OUString SvxResId(const char *pId)
this class implements some helper functions to edit a B2DPolyPolygon
void ResizeMarkedPoints(const Point &rRef, const Fraction &xFact, const Fraction &yFact)
SdrObject * RipPoint(sal_uInt32 nHdlNum, sal_uInt32 &rNewPt0Index)
void ForceUndirtyMrkPnt() const
bool IsDeleteMarkedPointsPossible() const override
SdrObjClosedKind GetMarkedObjectsClosedState() const override
virtual bool HasMarkedPoints() const
SdrObjList * GetObjList() const
Return current List.
SdrObject * GetMarkedSdrObj() const
Everything a View needs to know about a selected object.
void AddUndo(std::unique_ptr< SdrUndoAction > pUndo)
SVX_DLLPRIVATE void ImpResetPolyPossibilityFlags()
SdrPathSegmentKind eMarkedSegmentsKind
static void ImpResize(Point &rPt, Point *pC1, Point *pC2, const void *p1, const void *p2, const void *p3, const void *)
UNDERLYING_TYPE get() const
virtual void MarkListHasChanged() override
#define DBG_ASSERT(sCon, aError)
void SetPathPoly(const basegfx::B2DPolyPolygon &rPathPoly)
tools::Long FRound(double fVal)
size_t GetMarkedObjectCount() const
virtual ~SdrPolyEditView() override
SdrPageView * GetPageView() const
void SetMarkedPointsSmooth(SdrPathSmoothKind eKind) override
std::vector< sal_uInt16 >::const_reverse_iterator const_reverse_iterator
sal_uInt32 GetOrdNum() const
The order number (aka ZOrder, aka z-index) determines whether a SdrObject is located above or below a...
const_iterator end() const
const_reverse_iterator rend() const
virtual SdrObject * RemoveObject(size_t nObjNum)
virtual sal_uInt32 GetHdlCount() const override
Via GetHdlCount the number of Handles can be retrieved.
bool bSetMarkedPointsSmoothPossible
const_iterator begin() const
void RotateMarkedPoints(const Point &rRef, Degree100 nAngle)
const_reverse_iterator rbegin() const
void RotatePoint(Point &rPnt, const Point &rRef, double sn, double cs)
bool IsOpenCloseMarkedObjectsPossible() const override
bool IsSetMarkedSegmentsKindPossible() const override
bool IsRipUpAtMarkedPointsPossible() const override
void AdjustMarkHdl(SfxViewShell *pOtherShell=nullptr)
static void ImpRotate(Point &rPt, Point *pC1, Point *pC2, const void *p1, const void *, const void *p3, const void *p4)
void MoveMarkedPoints(const Size &rSiz)
const basegfx::B2DPolyPolygon & GetPathPoly() const
bool MarkObj(const Point &rPnt, short nTol=-2, bool bToggle=false, bool bDeep=false)
SdrMark * GetSdrMarkByIndex(size_t nNum) const
std::pair< const_iterator, bool > insert(Value &&x)
bool IsSetMarkedPointsSmoothPossible() const override
SdrModel * GetModel() const
void CheckPolyPossibilitiesHelper(SdrMark *pM, bool &b1stSmooth, bool &b1stSegm, bool &bCurve, bool &bSmoothFuz, bool &bSegmFuz, basegfx::B2VectorContinuity &eSmooth)