56 LineInfo::LineInfo(
LineStyle eStyle, sal_Int32 nWidth ) : mpImplLineInfo()
58 mpImplLineInfo->meStyle = eStyle;
59 mpImplLineInfo->mnWidth = nWidth;
62 LineInfo::LineInfo(
const LineInfo& ) =
default;
64 LineInfo::LineInfo(
LineInfo&& ) =
default;
66 LineInfo::~LineInfo() =
default;
72 bool LineInfo::operator==(
const LineInfo& rLineInfo )
const
74 return mpImplLineInfo == rLineInfo.mpImplLineInfo;
77 void LineInfo::SetStyle(
LineStyle eStyle )
79 mpImplLineInfo->
meStyle = eStyle;
82 void LineInfo::SetWidth( sal_Int32 nWidth )
84 mpImplLineInfo->
mnWidth = nWidth;
87 void LineInfo::SetDashCount( sal_uInt16 nDashCount )
92 void LineInfo::SetDashLen( sal_Int32 nDashLen )
97 void LineInfo::SetDotCount( sal_uInt16 nDotCount )
102 void LineInfo::SetDotLen( sal_Int32 nDotLen )
107 void LineInfo::SetDistance( sal_Int32 nDistance )
121 void LineInfo::SetLineCap(css::drawing::LineCap eLineCap)
123 if(eLineCap != mpImplLineInfo->
meLineCap)
129 bool LineInfo::IsDefault()
const
131 return( !mpImplLineInfo->
mnWidth
133 && ( css::drawing::LineCap_BUTT == mpImplLineInfo->
meLineCap));
138 VersionCompatRead aCompat( rIStm );
139 sal_uInt16 nTmp16(0);
144 rLineInfo.mpImplLineInfo->
mnWidth = nTmp32;
146 if( aCompat.GetVersion() >= 2 )
150 rLineInfo.mpImplLineInfo->
mnDashLen = nTmp32;
152 rLineInfo.mpImplLineInfo->
mnDotLen = nTmp32;
154 rLineInfo.mpImplLineInfo->
mnDistance = nTmp32;
157 if( aCompat.GetVersion() >= 3 )
163 if( aCompat.GetVersion() >= 4 )
166 rIStm.
ReadUInt16( nTmp16 ); rLineInfo.mpImplLineInfo->
meLineCap =
static_cast<css::drawing::LineCap
>(nTmp16);
174 VersionCompatWrite aCompat( rOStm, 4 );
196 void LineInfo::applyToB2DPolyPolygon(
200 o_rFillPolyPolygon.
clear();
202 if(!io_rLinePolyPolygon.
count())
207 ::std::vector< double > fDotDashArray;
208 const double fDashLen(GetDashLen());
209 const double fDotLen(GetDotLen());
210 const double fDistance(GetDistance());
212 for(sal_uInt16
a(0);
a < GetDashCount();
a++)
214 fDotDashArray.push_back(fDashLen);
215 fDotDashArray.push_back(fDistance);
218 for(sal_uInt16 b(0); b < GetDotCount(); b++)
220 fDotDashArray.push_back(fDotLen);
221 fDotDashArray.push_back(fDistance);
224 const double fAccumulated(::std::accumulate(fDotDashArray.begin(), fDotDashArray.end(), 0.0));
226 if(fAccumulated > 0.0)
230 for(
auto const& rPolygon : io_rLinePolyPolygon)
237 aResult.
append(aLineTarget);
240 io_rLinePolyPolygon = aResult;
244 if(!(GetWidth() > 1 && io_rLinePolyPolygon.
count()))
247 const double fHalfLineWidth((GetWidth() * 0.5) + 0.5);
249 for(
auto const& rPolygon : io_rLinePolyPolygon)
258 io_rLinePolyPolygon.clear();
SvStream & WriteUInt16(sal_uInt16 nUInt16)
SvStream & WriteInt32(sal_Int32 nInt32)
SvStream & ReadUInt16(sal_uInt16 &rUInt16)
B2DPolyPolygon createAreaGeometry(const B2DPolygon &rCandidate, double fHalfLineWidth, B2DLineJoin eJoin, css::drawing::LineCap eCap, double fMaxAllowedAngle=basegfx::deg2rad(12.5), double fMaxPartOfEdge=0.4, double fMiterMinimumAngle=basegfx::deg2rad(15.0), basegfx::triangulator::B2DTriangleVector *pTriangles=nullptr)
exports com.sun.star. drawing
void applyLineDashing(const B2DPolygon &rCandidate, const std::vector< double > &rDotDashArray, B2DPolyPolygon *pLineTarget, B2DPolyPolygon *pGapTarget, double fDotDashLength)
SvStream & ReadLineInfo(SvStream &rIStm, LineInfo &rLineInfo)
SvStream & ReadInt32(sal_Int32 &rInt32)
bool operator==(const ImplLineInfo &) const
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
basegfx::B2DLineJoin meLineJoin
css::drawing::LineCap meLineCap
SvStream & WriteLineInfo(SvStream &rOStm, const LineInfo &rLineInfo)