@@ -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;
0 commit comments