@@ -89,9 +89,11 @@ void LayerSettings::registerFeature(QgsFeature& f)
89
89
double labelX, labelY; // will receive label size
90
90
calculateLabelSize (labelText, labelX, labelY);
91
91
92
- // std::cout << labelX << " " << labelY << std::endl;
93
92
MyLabel* lbl = new MyLabel (f.id (), labelText, GEOSGeom_clone ( f.geometry ()->asGeos () ) );
94
93
94
+ // record the created geometry - it will be deleted at the end.
95
+ geometries.append (lbl);
96
+
95
97
// register feature to the layer
96
98
palLayer->registerFeature (lbl->strId (), lbl, labelX, labelY);
97
99
@@ -106,6 +108,7 @@ void LayerSettings::registerFeature(QgsFeature& f)
106
108
PalLabeling::PalLabeling (QgsMapCanvas* mapCanvas)
107
109
: mMapCanvas(mapCanvas), mPal(NULL )
108
110
{
111
+
109
112
// find out engine defaults
110
113
Pal p;
111
114
mCandPoint = p.getPointP ();
@@ -244,6 +247,7 @@ void PalLabeling::initPal()
244
247
case Popmusic_Tabu_Chain: s = POPMUSIC_TABU_CHAIN; break ;
245
248
}
246
249
mPal ->setSearch (s);
250
+ // mPal->setSearch(FALP);
247
251
248
252
// set number of candidates generated per feature
249
253
mPal ->setPointP (mCandPoint );
@@ -278,7 +282,7 @@ void PalLabeling::doLabeling(QPainter* painter)
278
282
{
279
283
labels = mPal ->labeller (scale, bbox, NULL , false );
280
284
}
281
- catch ( std::exception e )
285
+ catch ( std::exception& e )
282
286
{
283
287
std::cerr << " PAL EXCEPTION :-( " << e.what () << std::endl;
284
288
return ;
@@ -308,14 +312,22 @@ void PalLabeling::doLabeling(QPainter* painter)
308
312
painter->drawText (0 ,0 , ((MyLabel*)label->getGeometry ())->text ());
309
313
painter->restore ();
310
314
311
- delete label->getGeometry ();
312
315
delete label;
313
316
}
314
317
315
318
std::cout << " LABELING draw: " << t.elapsed () << " ms" << std::endl;
316
319
317
320
delete labels;
318
321
322
+ // delete all allocated geometries for features
323
+ for (int i = 0 ; i < mLayers .count (); i++)
324
+ {
325
+ LayerSettings& lyr = mLayers [i];
326
+ for (QList<MyLabel*>::iterator git = lyr.geometries .begin (); git != lyr.geometries .end (); ++git)
327
+ delete *git;
328
+ lyr.geometries .clear ();
329
+ }
330
+
319
331
// re-create PAL
320
332
initPal ();
321
333
}
0 commit comments