Skip to content

Commit fa713fe

Browse files
committed
Fix all polar connectivity interpolation (without enabled)
1 parent 21d3aa9 commit fa713fe

File tree

5 files changed

+128
-122
lines changed

5 files changed

+128
-122
lines changed

src/chart/rendering/markers/abstractmarker.cpp

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,25 @@ AbstractMarker AbstractMarker::createInterpolated(
8383
aMarker.labelEnabled =
8484
fromMarker.labelEnabled + toMarker.labelEnabled;
8585

86-
auto sum = static_cast<double>(aMarker.enabled);
86+
auto enableFactorBase = static_cast<double>(toMarker.enabled);
87+
auto labelEnableFactorBase =
88+
static_cast<double>(toMarker.labelEnabled);
89+
auto enableSum = static_cast<double>(aMarker.enabled);
90+
auto labelEnableSum = static_cast<double>(aMarker.labelEnabled);
91+
92+
if (marker.polarConnection.interpolates()) {
93+
auto firstWeight = options.geometry.values[0].weight;
94+
auto secondWeight = options.geometry.values[1].weight;
95+
enableSum = firstWeight + secondWeight;
96+
enableFactorBase = secondWeight;
97+
labelEnableSum = firstWeight + secondWeight;
98+
labelEnableFactorBase = secondWeight;
99+
}
87100

88101
using Math::interpolate;
89102
using Vizzu::Draw::interpolate;
90-
if (sum > 0.0) {
91-
auto factor = static_cast<double>(toMarker.enabled) / sum;
103+
if (!Math::Floating::is_zero(enableSum)) {
104+
auto factor = enableFactorBase / enableSum;
92105
aMarker.morphToCircle = interpolate(fromMarker.morphToCircle,
93106
toMarker.morphToCircle,
94107
factor);
@@ -107,11 +120,8 @@ AbstractMarker AbstractMarker::createInterpolated(
107120
aMarker.center =
108121
interpolate(fromMarker.center, toMarker.center, factor);
109122
}
110-
sum = static_cast<double>(
111-
fromMarker.labelEnabled + toMarker.labelEnabled);
112-
if (sum > 0.0) {
113-
auto factor =
114-
static_cast<double>(toMarker.labelEnabled) / sum;
123+
if (!Math::Floating::is_zero(labelEnableSum)) {
124+
auto factor = labelEnableFactorBase / labelEnableSum;
115125
aMarker.dataRect = interpolate(fromMarker.dataRect,
116126
toMarker.dataRect,
117127
factor);

src/chart/rendering/markers/connectingmarker.cpp

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,6 @@ ConnectingMarker::ConnectingMarker(const DrawingContext &ctx,
5353
ctx.getOptions().orientation.get_or_first(lineIndex).value
5454
== Gen::Orientation::horizontal;
5555

56-
auto &&isPolar =
57-
ctx.getOptions().coordSystem.get_or_first(lineIndex).value
58-
== Gen::CoordSystem::polar;
59-
6056
lineWidth[0] = lineWidth[1] = 0;
6157

6258
const auto *prev =
@@ -117,15 +113,12 @@ ConnectingMarker::ConnectingMarker(const DrawingContext &ctx,
117113
auto prevPos = prev->position;
118114

119115
if (polar != false && isHorizontal && prev != &marker) {
120-
if (prevPos.x >= 1)
121-
prevPos.x -= 1;
122-
else if (needConnection && !otherNeedConnection
123-
&& isPolar
124-
&& marker.polarConnection
125-
.get_or_first(lineIndex)
126-
.value) {
116+
if (!otherNeedConnection
117+
&& marker.polarConnection.get_or_first(lineIndex)
118+
.value)
119+
prevPos.x = 0;
120+
else if (prevPos.x >= 1)
127121
prevPos.x -= 1;
128-
}
129122
}
130123

131124
points[3] = prevPos - prevSpacing;

src/chart/rendering/markers/rectanglemarker.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,15 @@ RectangleMarker::RectangleMarker(const Gen::Marker &marker,
2020
const Styles::Chart &style) :
2121
SingleDrawMarker(marker, options, Gen::ShapeType::rectangle)
2222
{
23-
if (marker.polarConnection.contains(true)) {
24-
enabled = enabled.more();
25-
labelEnabled = labelEnabled.more();
23+
linear = options.coordSystem.factor(Gen::CoordSystem::polar) == 0;
24+
25+
if (marker.polarConnection.interpolates()
26+
&& options.geometry.contains(Gen::ShapeType::line)) {
27+
linear = linear
28+
|| !marker.polarConnection.factor<Math::FuzzyBool>(true)
29+
.less();
2630
}
2731

28-
linear = options.coordSystem.factor(Gen::CoordSystem::polar) == 0;
2932
border = Math::FuzzyBool(true);
3033

3134
auto spacing = Geom::Size{

0 commit comments

Comments
 (0)