Skip to content

Commit 735f33d

Browse files
committed
fix center align + axis + override
1 parent 159c07c commit 735f33d

File tree

3 files changed

+44
-37
lines changed

3 files changed

+44
-37
lines changed

src/chart/generator/plotbuilder.cpp

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -345,10 +345,6 @@ void PlotBuilder::calcAxises(const Data::DataTable &dataTable,
345345
(mainAxis == AxisId::x ? subBoundRect : mainBoundRect)
346346
.min));
347347

348-
if (!mainRanges.empty())
349-
plot->getOptions()->mainAxis().range = {};
350-
if (!subRanges.empty()) plot->getOptions()->subAxis().range = {};
351-
352348
mainBoundRect =
353349
plot->getOptions()->mainAxis().range.getRange(mainBoundRect);
354350
subBoundRect =
@@ -526,7 +522,7 @@ void PlotBuilder::addAlignment(const Buckets &buckets,
526522
if (axisProps.align == Base::Align::Type::none) return;
527523

528524
if (axisProps.align == Base::Align::Type::center) {
529-
auto &&halfSize = axisRange.size() / 2.0;
525+
auto &&halfSize = axisRange.middle();
530526
axisRange = {axisRange.min - halfSize,
531527
axisRange.max - halfSize};
532528
}
@@ -585,19 +581,21 @@ PlotBuilder::addSeparation(const Buckets &buckets,
585581
max.size(),
586582
plot->getStyle().calculatedSize());
587583

588-
res[0].atRange =
589-
res[0].containsValues - res[0].containsValues.min;
590-
auto onMax = res[0].containsValues.size();
591-
for (auto i = 1U; i < res.size(); ++i) {
592-
if (!res[i].enabled) continue;
593-
onMax += splitSpace;
594-
res[i].atRange =
595-
res[i].containsValues + onMax - res[i].containsValues.min;
596-
onMax += res[i].containsValues.size();
584+
double onMax = 0.0;
585+
bool first = true;
586+
for (auto &&resItem : res) {
587+
if (!resItem.enabled) continue;
588+
if (first)
589+
first = false;
590+
else
591+
onMax += splitSpace;
592+
resItem.atRange = resItem.containsValues + onMax
593+
- resItem.containsValues.min;
594+
onMax += resItem.containsValues.size();
597595
}
598596

599597
if (plot->getOptions()->coordSystem == CoordSystem::polar
600-
&& axisIndex == AxisId::x)
598+
&& axisIndex == AxisId::x && !first)
601599
onMax += splitSpace;
602600

603601
for (auto &&bucket : buckets)
@@ -616,24 +614,25 @@ PlotBuilder::addSeparation(const Buckets &buckets,
616614

617615
auto alignedRange = maxRange;
618616
if (align == Base::Align::Type::center) {
619-
auto &&halfSize = maxRange.size() / 2.0;
617+
auto &&halfSize = maxRange.middle();
620618
alignedRange = {maxRange.min - halfSize,
621619
maxRange.max - halfSize};
622620
}
623621

624622
for (auto &resItem : res) {
625623
if (!resItem.enabled) continue;
626624

627-
resItem.atRange =
628-
((resItem.atRange - resItem.atRange.min) * maxRange.size()
629-
/ resItem.containsValues.size()
630-
+ resItem.atRange.min - resItem.containsValues.min
631-
+ maxRange.min)
632-
/ onMax;
625+
auto aligned =
626+
Base::Align{align, resItem.containsValues}.getAligned(
627+
maxRange);
628+
629+
resItem.atRange = (aligned + resItem.atRange.min
630+
- resItem.containsValues.min)
631+
/ onMax;
633632

634633
resItem.containsValues = {
635-
maxRange.rescale(resItem.containsValues.min),
636-
maxRange.rescale(resItem.containsValues.max)};
634+
aligned.rescale(resItem.containsValues.min),
635+
aligned.rescale(resItem.containsValues.max)};
637636
}
638637

639638
stats.setIfRange(axisIndex, alignedRange);

src/chart/rendering/drawaxes.cpp

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,16 @@ void DrawAxes::drawGeometries() const
6666

6767
if (ySplit.measureRange.includes(
6868
origo.getCoord(orientation(Gen::AxisId::y))))
69-
drawAxis(Gen::AxisId::x, tr, weight);
69+
drawAxis(Gen::AxisId::x,
70+
xSplit.measureRange,
71+
tr,
72+
weight);
7073
if (xSplit.measureRange.includes(
7174
origo.getCoord(orientation(Gen::AxisId::x))))
72-
drawAxis(Gen::AxisId::y, tr, weight);
75+
drawAxis(Gen::AxisId::y,
76+
ySplit.measureRange,
77+
tr,
78+
weight);
7379

7480
DrawGuides{*this}.draw(Gen::AxisId::x,
7581
xSplit.measureRange,
@@ -281,24 +287,24 @@ void DrawAxes::generateMeasure(Gen::AxisId axisIndex,
281287
}
282288
}
283289

284-
Geom::Line DrawAxes::getAxisLine(Gen::AxisId axisIndex) const
290+
Geom::Line DrawAxes::getAxisLine(Gen::AxisId axisIndex,
291+
const Math::Range<> &filter) const
285292
{
286-
auto offset = this->origo().getCoord(!orientation(axisIndex));
287-
288-
auto direction = Geom::Point::Ident(orientation(axisIndex));
289-
290-
auto p0 = direction.flip() * offset;
291-
auto p1 = p0 + direction;
292-
293-
if (offset >= 0 && offset <= 1) return {p0, p1};
293+
auto o = orientation(axisIndex);
294+
if (auto offset = this->origo().getCoord(!o);
295+
Math::Range<>{0.0, 1.0}.includes(offset))
296+
return {Geom::Point::Coord(o, filter.min, offset),
297+
Geom::Point::Coord(o, filter.max, offset)};
294298
return {};
295299
}
296300

297301
void DrawAxes::drawAxis(Gen::AxisId axisIndex,
302+
const Math::Range<> &filter,
298303
const Geom::AffineTransform &tr,
299304
double w) const
300305
{
301-
if (auto line = tr(getAxisLine(axisIndex)); !line.isPoint()) {
306+
if (auto line = tr(getAxisLine(axisIndex, filter));
307+
!line.isPoint()) {
302308
auto lineColor = *rootStyle.plot.getAxis(axisIndex).color
303309
* Math::FuzzyBool::And<double>(w,
304310
plot->guides.at(axisIndex).axis);

src/chart/rendering/drawaxes.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,15 @@ class DrawAxes : public DrawingContext
9494
void generateMeasure(Gen::AxisId axisIndex,
9595
double stepSize,
9696
double weight);
97-
[[nodiscard]] Geom::Line getAxisLine(Gen::AxisId axisIndex) const;
97+
[[nodiscard]] Geom::Line getAxisLine(Gen::AxisId axisIndex,
98+
const Math::Range<> &filter) const;
9899
[[nodiscard]] Geom::Point getTitleBasePos(Gen::AxisId axisIndex,
99100
::Anim::InterpolateIndex index) const;
100101
[[nodiscard]] Geom::Point getTitleOffset(Gen::AxisId axisIndex,
101102
::Anim::InterpolateIndex index,
102103
bool fades) const;
103104
void drawAxis(Gen::AxisId axisIndex,
105+
const Math::Range<> &filter,
104106
const Geom::AffineTransform &tr,
105107
double w) const;
106108
void drawTitle(Gen::AxisId axisIndex,

0 commit comments

Comments
 (0)