@@ -379,10 +379,10 @@ RendererAgg::draw_polygon(const Py::Tuple& args) {
379
379
return Py::Object ();
380
380
381
381
382
- // dump the x.y vertices into a double array for faster look ahread
382
+ // dump the x.y vertices into a double array for faster look ahead
383
383
// and behind access
384
- double xs [Npoints];
385
- double ys [Npoints];
384
+ double *xs = new double [Npoints];
385
+ double *ys = new double [Npoints];
386
386
387
387
for (size_t i=0 ; i<Npoints; i++) {
388
388
Py::SeqBase<Py::Object> xy (points[i]);
@@ -406,6 +406,10 @@ RendererAgg::draw_polygon(const Py::Tuple& args) {
406
406
path.close_polygon ();
407
407
408
408
_fill_and_stroke (path, gc, face, false );
409
+
410
+ delete [] xs;
411
+ delete [] ys;
412
+
409
413
_VERBOSE (" RendererAgg::draw_polygon DONE" );
410
414
return Py::Object ();
411
415
@@ -960,10 +964,10 @@ RendererAgg::draw_poly_collection(const Py::Tuple& args) {
960
964
double xo = Py::Float (pos[0 ]);
961
965
double yo = Py::Float (pos[1 ]);
962
966
try {
963
- xyo = transOffset->operator ()(xo, yo);
967
+ xyo = transOffset->operator ()(xo, yo);
964
968
}
965
969
catch (...) {
966
- throw Py::ValueError (" Domain error on transOffset->operator in draw_line_collection" );
970
+ throw Py::ValueError (" Domain error on transOffset->operator in draw_line_collection" );
967
971
}
968
972
969
973
}
@@ -976,22 +980,25 @@ RendererAgg::draw_poly_collection(const Py::Tuple& args) {
976
980
977
981
// dump the verts to double arrays so we can do more efficient
978
982
// look aheads and behinds when doing snapto pixels
979
- double xs[Nverts], ys[Nverts];
983
+ double *xs = new double [Nverts];
984
+ double *ys = new double [Nverts];
980
985
for (size_t j=0 ; j<Nverts; j++) {
981
986
thisvert = thisverts[j];
982
987
double x = Py::Float (thisvert[0 ]);
983
988
double y = Py::Float (thisvert[1 ]);
984
989
try {
985
- xy = transform->operator ()(x, y);
990
+ xy = transform->operator ()(x, y);
986
991
}
987
992
catch (...) {
988
- throw Py::ValueError (" Domain error on eval_scalars in RendererAgg::draw_poly_collection" );
993
+ delete [] xs;
994
+ delete [] ys;
995
+ throw Py::ValueError (" Domain error on eval_scalars in RendererAgg::draw_poly_collection" );
989
996
}
990
997
991
998
992
999
if (usingOffsets) {
993
- xy.first += xyo.first ;
994
- xy.second += xyo.second ;
1000
+ xy.first += xyo.first ;
1001
+ xy.second += xyo.second ;
995
1002
}
996
1003
997
1004
xy.second = height - xy.second ;
@@ -1006,21 +1013,21 @@ RendererAgg::draw_poly_collection(const Py::Tuple& args) {
1006
1013
double y = ys[j];
1007
1014
1008
1015
if (j==0 ) {
1009
- if (xs[j] == xs[Nverts-1 ]) x = (int )xs[j] + 0.5 ;
1010
- if (ys[j] == ys[Nverts-1 ]) y = (int )ys[j] + 0.5 ;
1016
+ if (xs[j] == xs[Nverts-1 ]) x = (int )xs[j] + 0.5 ;
1017
+ if (ys[j] == ys[Nverts-1 ]) y = (int )ys[j] + 0.5 ;
1011
1018
}
1012
1019
else if (j==Nverts-1 ) {
1013
- if (xs[j] == xs[0 ]) x = (int )xs[j] + 0.5 ;
1014
- if (ys[j] == ys[0 ]) y = (int )ys[j] + 0.5 ;
1020
+ if (xs[j] == xs[0 ]) x = (int )xs[j] + 0.5 ;
1021
+ if (ys[j] == ys[0 ]) y = (int )ys[j] + 0.5 ;
1015
1022
}
1016
1023
1017
1024
if (j < Nverts-1 ) {
1018
- if (xs[j] == xs[j+1 ]) x = (int )xs[j] + 0.5 ;
1019
- if (ys[j] == ys[j+1 ]) y = (int )ys[j] + 0.5 ;
1025
+ if (xs[j] == xs[j+1 ]) x = (int )xs[j] + 0.5 ;
1026
+ if (ys[j] == ys[j+1 ]) y = (int )ys[j] + 0.5 ;
1020
1027
}
1021
1028
if (j>0 ) {
1022
- if (xs[j] == xs[j-1 ]) x = (int )xs[j] + 0.5 ;
1023
- if (ys[j] == ys[j-1 ]) y = (int )ys[j] + 0.5 ;
1029
+ if (xs[j] == xs[j-1 ]) x = (int )xs[j] + 0.5 ;
1030
+ if (ys[j] == ys[j-1 ]) y = (int )ys[j] + 0.5 ;
1024
1031
}
1025
1032
1026
1033
if (j==0 ) path.move_to (x,y);
@@ -1041,12 +1048,12 @@ RendererAgg::draw_poly_collection(const Py::Tuple& args) {
1041
1048
theRasterizer->add_path (path);
1042
1049
1043
1050
if (isaa) {
1044
- rendererAA->color (facecolor);
1045
- agg::render_scanlines (*theRasterizer, *slineP8, *rendererAA);
1051
+ rendererAA->color (facecolor);
1052
+ agg::render_scanlines (*theRasterizer, *slineP8, *rendererAA);
1046
1053
}
1047
1054
else {
1048
- rendererBin->color (facecolor);
1049
- agg::render_scanlines (*theRasterizer, *slineBin, *rendererBin);
1055
+ rendererBin->color (facecolor);
1056
+ agg::render_scanlines (*theRasterizer, *slineBin, *rendererBin);
1050
1057
}
1051
1058
} // renderer face
1052
1059
@@ -1069,15 +1076,18 @@ RendererAgg::draw_poly_collection(const Py::Tuple& args) {
1069
1076
1070
1077
// render antialiased or not
1071
1078
if ( isaa ) {
1072
- rendererAA->color (edgecolor);
1073
- agg::render_scanlines (*theRasterizer, *slineP8, *rendererAA);
1079
+ rendererAA->color (edgecolor);
1080
+ agg::render_scanlines (*theRasterizer, *slineP8, *rendererAA);
1074
1081
}
1075
1082
else {
1076
- rendererBin->color (edgecolor);
1077
- agg::render_scanlines (*theRasterizer, *slineBin, *rendererBin);
1083
+ rendererBin->color (edgecolor);
1084
+ agg::render_scanlines (*theRasterizer, *slineBin, *rendererBin);
1078
1085
}
1079
1086
} // rendered edge
1080
1087
1088
+ delete [] xs;
1089
+ delete [] ys;
1090
+
1081
1091
} // for every poly
1082
1092
return Py::Object ();
1083
1093
}
@@ -1127,8 +1137,8 @@ RendererAgg::draw_regpoly_collection(const Py::Tuple& args) {
1127
1137
double thisx, thisy;
1128
1138
1129
1139
// dump the x.y vertices into a double array for faster access
1130
- double xverts[Nverts];
1131
- double yverts[Nverts];
1140
+ double * xverts = new double [Nverts];
1141
+ double * yverts = new double [Nverts];
1132
1142
Py::SeqBase<Py::Object> xy;
1133
1143
for (size_t i=0 ; i<Nverts; i++) {
1134
1144
xy = Py::SeqBase<Py::Object>(verts[i]);
@@ -1145,6 +1155,8 @@ RendererAgg::draw_regpoly_collection(const Py::Tuple& args) {
1145
1155
offsetPair = transOffset->operator ()(xo, yo);
1146
1156
}
1147
1157
catch (...) {
1158
+ delete [] xverts;
1159
+ delete [] yverts;
1148
1160
throw Py::ValueError (" Domain error on eval_scalars in RendererAgg::draw_regpoly_collection" );
1149
1161
}
1150
1162
@@ -1178,12 +1190,12 @@ RendererAgg::draw_regpoly_collection(const Py::Tuple& args) {
1178
1190
theRasterizer->add_path (path);
1179
1191
1180
1192
if (isaa) {
1181
- rendererAA->color (facecolor);
1182
- agg::render_scanlines (*theRasterizer, *slineP8, *rendererAA);
1193
+ rendererAA->color (facecolor);
1194
+ agg::render_scanlines (*theRasterizer, *slineP8, *rendererAA);
1183
1195
}
1184
1196
else {
1185
- rendererBin->color (facecolor);
1186
- agg::render_scanlines (*theRasterizer, *slineBin, *rendererBin);
1197
+ rendererBin->color (facecolor);
1198
+ agg::render_scanlines (*theRasterizer, *slineBin, *rendererBin);
1187
1199
}
1188
1200
} // renderer face
1189
1201
@@ -1205,16 +1217,18 @@ RendererAgg::draw_regpoly_collection(const Py::Tuple& args) {
1205
1217
1206
1218
// render antialiased or not
1207
1219
if ( isaa ) {
1208
- rendererAA->color (edgecolor);
1209
- agg::render_scanlines (*theRasterizer, *slineP8, *rendererAA);
1220
+ rendererAA->color (edgecolor);
1221
+ agg::render_scanlines (*theRasterizer, *slineP8, *rendererAA);
1210
1222
}
1211
1223
else {
1212
- rendererBin->color (edgecolor);
1213
- agg::render_scanlines (*theRasterizer, *slineBin, *rendererBin);
1224
+ rendererBin->color (edgecolor);
1225
+ agg::render_scanlines (*theRasterizer, *slineBin, *rendererBin);
1214
1226
}
1215
1227
} // rendered edge
1216
1228
1217
1229
} // for every poly
1230
+ delete [] xverts;
1231
+ delete [] yverts;
1218
1232
return Py::Object ();
1219
1233
}
1220
1234
@@ -1355,7 +1369,7 @@ RendererAgg::_render_lines_path(PathSource &path, const GCAgg& gc) {
1355
1369
1356
1370
// path_t transpath(path, xytrans);
1357
1371
1358
- if (gc.dasha ==NULL ) { // no dashes
1372
+ if (gc.dasha ==NULL ) { // no dashes
1359
1373
stroke_t stroke (path);
1360
1374
stroke.width (gc.linewidth );
1361
1375
stroke.line_cap (gc.cap );
@@ -1920,32 +1934,37 @@ RendererAgg::write_png(const Py::Tuple& args)
1920
1934
struct png_color_8_struct sig_bit;
1921
1935
png_uint_32 row;
1922
1936
1923
- png_bytep row_pointers[height];
1937
+ png_bytep * row_pointers = new png_bytep [height];
1924
1938
for (row = 0 ; row < height; ++row) {
1925
1939
row_pointers[row] = pixBuffer + row * width * 4 ;
1926
1940
}
1927
1941
1928
1942
1929
- if (fp == NULL )
1943
+ if (fp == NULL ) {
1944
+ delete [] row_pointers;
1930
1945
throw Py::RuntimeError (" Could not open file" );
1946
+ }
1931
1947
1932
1948
1933
1949
png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL , NULL , NULL );
1934
1950
if (png_ptr == NULL ) {
1935
1951
if (fpclose) fclose (fp);
1952
+ delete [] row_pointers;
1936
1953
throw Py::RuntimeError (" Could not create write struct" );
1937
1954
}
1938
1955
1939
1956
info_ptr = png_create_info_struct (png_ptr);
1940
1957
if (info_ptr == NULL ) {
1941
1958
if (fpclose) fclose (fp);
1942
1959
png_destroy_write_struct (&png_ptr, &info_ptr);
1960
+ delete [] row_pointers;
1943
1961
throw Py::RuntimeError (" Could not create info struct" );
1944
1962
}
1945
1963
1946
1964
if (setjmp (png_ptr->jmpbuf )) {
1947
1965
if (fpclose) fclose (fp);
1948
1966
png_destroy_write_struct (&png_ptr, &info_ptr);
1967
+ delete [] row_pointers;
1949
1968
throw Py::RuntimeError (" Error building image" );
1950
1969
}
1951
1970
@@ -1975,6 +1994,7 @@ RendererAgg::write_png(const Py::Tuple& args)
1975
1994
1976
1995
png_destroy_write_struct (&png_ptr, &info_ptr);
1977
1996
1997
+ delete [] row_pointers;
1978
1998
1979
1999
if (fpclose) fclose (fp);
1980
2000
0 commit comments