Skip to content

Commit d7f8c4b

Browse files
committed
Fix align to min
1 parent 3b99f21 commit d7f8c4b

File tree

3 files changed

+33
-22
lines changed

3 files changed

+33
-22
lines changed

src/chart/generator/plotbuilder.cpp

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -526,9 +526,8 @@ void PlotBuilder::addAlignment(const Buckets &buckets,
526526

527527
if (axisProps.align == Base::Align::Type::center) {
528528
auto &&halfSize = axisRange.size() / 2.0;
529-
if (!Math::Floating::is_zero(halfSize))
530-
axisRange = {axisRange.min - halfSize,
531-
axisRange.max - halfSize};
529+
axisRange = {axisRange.min - halfSize,
530+
axisRange.max - halfSize};
532531
}
533532

534533
const Base::Align align{axisProps.align, {0.0, 1.0}};
@@ -586,35 +585,42 @@ PlotBuilder::addSeparation(const Buckets &buckets,
586585
plot->getStyle().calculatedSize());
587586

588587
res[0].atRange =
589-
res[0].containsValues - res[0].containsValues.min * 2;
588+
res[0].containsValues - res[0].containsValues.min;
590589
auto onMax = res[0].containsValues.size();
591590
for (auto i = 1U; i < res.size(); ++i) {
592-
onMax += res[i - 1].enabled ? splitSpace : 0;
593-
res[i].atRange = res[i].containsValues + onMax
594-
- res[i].containsValues.min * 2;
591+
if (!res[i].enabled) continue;
592+
onMax += splitSpace;
593+
res[i].atRange =
594+
res[i].containsValues + onMax - res[i].containsValues.min;
595595
onMax += res[i].containsValues.size();
596596
}
597597

598598
for (auto &&bucket : buckets)
599-
for (auto &&[marker, idx] : bucket)
599+
for (auto &&[marker, idx] : bucket) {
600+
auto buc = res[idx.itemId];
601+
auto markerSize = marker.getSizeBy(axisIndex);
602+
600603
marker.setSizeBy(axisIndex,
601-
Base::Align{align, res.at(idx.itemId).atRange}
602-
.getAligned(marker.getSizeBy(axisIndex)));
604+
Base::Align{align,
605+
buc.atRange - buc.atRange.min
606+
+ buc.containsValues.min}
607+
.getAligned(markerSize - markerSize.min)
608+
+ buc.atRange.min - buc.containsValues.min);
609+
}
603610

604-
auto alignedRange =
605-
Base::Align{align, {maxRange.min, maxRange.min}}.getAligned(
606-
maxRange);
611+
auto alignedRange = maxRange;
612+
if (align == Base::Align::Type::center) {
613+
auto &&halfSize = maxRange.size() / 2.0;
614+
alignedRange = {maxRange.min - halfSize,
615+
maxRange.max - halfSize};
616+
}
607617

608-
res[0].atRange = res[0].atRange
609-
- maxRange.min * res[0].containsValues.size()
610-
/ maxRange.size();
611618
for (auto &resItem : res) {
612619
if (!resItem.enabled) continue;
613620

614621
resItem.atRange =
615-
((resItem.atRange + resItem.containsValues.min
616-
- resItem.atRange.min)
617-
* maxRange.size() / resItem.containsValues.size()
622+
((resItem.atRange - resItem.atRange.min) * maxRange.size()
623+
/ resItem.containsValues.size()
618624
+ resItem.atRange.min - resItem.containsValues.min
619625
+ maxRange.min)
620626
/ onMax;

src/chart/options/align.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ struct Align : private Math::Range<>
1717
[[nodiscard]] Range getAligned(const Range &range) const
1818
{
1919
switch (type) {
20-
case Type::none: return range - range.min + min;
20+
case Type::none: return range;
2121
case Type::center: return range - range.middle() + middle();
2222
case Type::stretch: return static_cast<const Range &>(*this);
2323
}

src/chart/rendering/drawaxes.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ namespace Vizzu::Draw
4040

4141
void DrawAxes::drawGeometries() const
4242
{
43+
auto origo = this->origo();
4344
for (auto &&xSplit : std::views::values(splits[Gen::AxisId::x]))
4445
for (auto &&ySplit :
4546
std::views::values(splits[Gen::AxisId::y])) {
@@ -63,8 +64,12 @@ void DrawAxes::drawGeometries() const
6364
tr,
6465
weight);
6566

66-
drawAxis(Gen::AxisId::x, tr, weight);
67-
drawAxis(Gen::AxisId::y, tr, weight);
67+
if (ySplit.measureRange.includes(
68+
origo.getCoord(orientation(Gen::AxisId::y))))
69+
drawAxis(Gen::AxisId::x, tr, weight);
70+
if (xSplit.measureRange.includes(
71+
origo.getCoord(orientation(Gen::AxisId::x))))
72+
drawAxis(Gen::AxisId::y, tr, weight);
6873

6974
DrawGuides{*this}.draw(Gen::AxisId::x,
7075
xSplit.measureRange,

0 commit comments

Comments
 (0)