@@ -295,6 +295,10 @@ DimensionAxis interpolate(const DimensionAxis &op0,
295295 DimensionAxis res;
296296
297297 res.factor = factor;
298+ res.hasMarker = !Math::Floating::is_zero (
299+ Math::Niebloid::interpolate (op0.hasMarker ,
300+ op1.hasMarker ,
301+ factor));
298302 using Val = DimensionAxis::Values::value_type;
299303
300304 const Val *latest1{};
@@ -387,7 +391,7 @@ interpolate(const SplitAxis &op0, const SplitAxis &op1, double factor)
387391 if (needMerge) {
388392 if (firstSpecial) {
389393 firstSpecial = false ;
390- return merger (val, {{}, { 1.0 } });
394+ return merger (val, {});
391395 }
392396
393397 Math::Range<> range{0.0 , 1.0 };
@@ -410,15 +414,15 @@ interpolate(const SplitAxis &op0, const SplitAxis &op1, double factor)
410414 res.parts ,
411415 Alg::merge_args{.projection = &PartPair::first,
412416 .transformer_1 =
413- one_side (merger (factor), op1.parts .empty () ),
417+ one_side (merger (factor), op1.parts .size () <= 1 ),
414418 .transformer_2 =
415- one_side (merger (1 - factor), op0.parts .empty () ),
419+ one_side (merger (1 - factor), op0.parts .size () <= 1 ),
416420 .need_merge = {needMerge},
417421 .merger = merger (factor)});
418422
419423 if (!needMerge && op0.parts .empty () != op1.parts .empty ()
420- && (! op0.dimension .empty () || op0.measure .enabled .get ())
421- && (! op1.dimension .empty () || op1.measure .enabled .get ()))
424+ && (op0.dimension .hasMarker || op0.measure .enabled .get ())
425+ && (op1.dimension .hasMarker || op1.measure .enabled .get ()))
422426 res.parts .insert ({std::nullopt ,
423427 {.weight = op0.parts .empty () ? 1 - factor : factor}});
424428
0 commit comments