@@ -38,11 +38,13 @@ void BubbleChart::generate()
3838 auto firstMarkerSize = baseMarker->size ();
3939 baseMarker->emplaceCircle (Geom::Point{0 , 0 }, firstMarkerSize);
4040
41- auto currMarker = baseMarker + 1 ;
42- while (currMarker != markers.end () && currMarker->negative )
43- currMarker++->emplaceCircle (Geom::Point{0 , 0 }, 0 );
44- if (currMarker == markers.end ()) return ;
41+ auto nextBaseMarker = baseMarker + 1 ;
42+ while (
43+ nextBaseMarker != markers.end () && nextBaseMarker->negative )
44+ nextBaseMarker++->emplaceCircle (Geom::Point{0 , 0 }, 0 );
45+ if (nextBaseMarker == markers.end ()) return ;
4546
47+ auto currMarker = nextBaseMarker;
4648 auto markerSize = currMarker->size ();
4749 currMarker->emplaceCircle (
4850 Geom::Point{firstMarkerSize + markerSize, 0 },
@@ -59,22 +61,25 @@ void BubbleChart::generate()
5961 if (markerSize == 0.0 ) break ;
6062
6163 if (auto &&candidate1 = getTouchingCircle (markerSize,
62- baseMarker[ 1 ] ,
64+ *nextBaseMarker ,
6365 *preMarker);
6466 candidate1
6567 && !candidate1->overlaps (baseMarker->circle (), 0.00001 )) {
6668 currMarker->emplaceCircle (*candidate1);
67- ++baseMarker;
69+ baseMarker = nextBaseMarker++;
70+ while (nextBaseMarker->negative ) ++nextBaseMarker;
6871 }
6972 else if (auto &&candidate0 = getTouchingCircle (markerSize,
7073 *baseMarker,
7174 *preMarker);
7275 candidate0
73- && !candidate0->overlaps (baseMarker[ 1 ]. circle (),
76+ && !candidate0->overlaps (nextBaseMarker-> circle (),
7477 0.00001 ))
7578 currMarker->emplaceCircle (*candidate0);
76- else
77- throw std::logic_error (" Cannot generate bubble chart" );
79+ else {
80+ // TODO bubblechart generation failed. It need a fix.
81+ break ;
82+ }
7883 preMarker = currMarker;
7984 }
8085
0 commit comments