68 #include <config_auto.h>
72 #include "allheaders.h"
78 static const l_int32 MinCompsForBinSort = 200;
114 return (
BOXA *)ERROR_PTR(
"boxas not defined", __func__, NULL);
117 return (
BOXA *)ERROR_PTR(
"boxad not made", __func__, NULL);
118 for (i = 0; i < n; i++) {
121 return (
BOXA *)ERROR_PTR(
"boxs not found", __func__, NULL);
123 boxd =
boxTransform(boxs, shiftx, shifty, scalex, scaley);
158 return (
BOX *)ERROR_PTR(
"box not defined", __func__, NULL);
159 if (box->
w <= 0 || box->
h <= 0)
162 return boxCreate((l_int32)(L_MAX(0, scalex * (box->
x + shiftx) + 0.5)),
163 (l_int32)(L_MAX(0, scaley * (box->
y + shifty) + 0.5)),
164 (l_int32)(L_MAX(1.0, scalex * box->
w + 0.5)),
165 (l_int32)(L_MAX(1.0, scaley * box->
h + 0.5)));
218 return (
BOXA *)ERROR_PTR(
"boxas not defined", __func__, NULL);
221 return (
BOXA *)ERROR_PTR(
"boxad not made", __func__, NULL);
222 for (i = 0; i < n; i++) {
225 return (
BOXA *)ERROR_PTR(
"boxs not found", __func__, NULL);
228 xcen, ycen, angle, order);
301 l_int32 bx, by, bw, bh, tx, ty, tw, th;
302 l_int32 xcent, ycent;
303 l_float32 sina, cosa, xdif, ydif, rx, ry, rw, rh;
307 return (
BOX *)ERROR_PTR(
"boxs not defined", __func__, NULL);
310 return (
BOX *)ERROR_PTR(
"order invalid", __func__, NULL);
313 if (bw <= 0 || bh <= 0)
321 tx = (l_int32)(scalex * (bx + shiftx) + 0.5);
322 ty = (l_int32)(scaley * (by + shifty) + 0.5);
323 tw = (l_int32)(L_MAX(1.0, scalex * bw + 0.5));
324 th = (l_int32)(L_MAX(1.0, scaley * bh + 0.5));
325 xcent = (l_int32)(scalex * xcen + 0.5);
326 ycent = (l_int32)(scaley * ycen + 0.5);
330 xdif = tx + 0.5 * tw - xcent;
331 ydif = ty + 0.5 * th - ycent;
332 rw = L_ABS(tw * cosa) + L_ABS(th * sina);
333 rh = L_ABS(th * cosa) + L_ABS(tw * sina);
334 rx = xcent + xdif * cosa - ydif * sina - 0.5 * rw;
335 ry = ycent + ydif * cosa + xdif * sina - 0.5 * rh;
336 boxd =
boxCreate((l_int32)rx, (l_int32)ry, (l_int32)rw,
340 tx = (l_int32)(scalex * bx + shiftx + 0.5);
341 ty = (l_int32)(scaley * by + shifty + 0.5);
342 tw = (l_int32)(L_MAX(1.0, scalex * bw + 0.5));
343 th = (l_int32)(L_MAX(1.0, scaley * bh + 0.5));
344 xcent = (l_int32)(scalex * xcen + 0.5);
345 ycent = (l_int32)(scaley * ycen + 0.5);
349 xdif = tx + 0.5 * tw - xcent;
350 ydif = ty + 0.5 * th - ycent;
351 rw = L_ABS(tw * cosa) + L_ABS(th * sina);
352 rh = L_ABS(th * cosa) + L_ABS(tw * sina);
353 rx = xcent + xdif * cosa - ydif * sina - 0.5 * rw;
354 ry = ycent + ydif * cosa + xdif * sina - 0.5 * rh;
355 boxd =
boxCreate((l_int32)rx, (l_int32)ry, (l_int32)rw,
365 xdif = bx + 0.5 * bw - xcen;
366 ydif = by + 0.5 * bh - ycen;
367 rw = L_ABS(bw * cosa) + L_ABS(bh * sina);
368 rh = L_ABS(bh * cosa) + L_ABS(bw * sina);
369 rx = xcen + xdif * cosa - ydif * sina - 0.5 * rw;
370 ry = ycen + ydif * cosa + xdif * sina - 0.5 * rh;
372 tx = (l_int32)(scalex * (rx + shiftx) + 0.5);
373 ty = (l_int32)(scaley * (ry + shifty) + 0.5);
374 tw = (l_int32)(L_MAX(1.0, scalex * rw + 0.5));
375 th = (l_int32)(L_MAX(1.0, scaley * rh + 0.5));
384 xdif = bx + 0.5 * bw - xcen;
385 ydif = by + 0.5 * bh - ycen;
386 rw = L_ABS(bw * cosa) + L_ABS(bh * sina);
387 rh = L_ABS(bh * cosa) + L_ABS(bw * sina);
388 rx = xcen + xdif * cosa - ydif * sina - 0.5 * rw;
389 ry = ycen + ydif * cosa + xdif * sina - 0.5 * rh;
391 tx = (l_int32)(scalex * rx + shiftx + 0.5);
392 ty = (l_int32)(scaley * ry + shifty + 0.5);
393 tw = (l_int32)(L_MAX(1.0, scalex * rw + 0.5));
394 th = (l_int32)(L_MAX(1.0, scaley * rh + 0.5));
405 xdif = tx + 0.5 * bw - xcen;
406 ydif = ty + 0.5 * bh - ycen;
407 rw = L_ABS(bw * cosa) + L_ABS(bh * sina);
408 rh = L_ABS(bh * cosa) + L_ABS(bw * sina);
409 rx = xcen + xdif * cosa - ydif * sina - 0.5 * rw;
410 ry = ycen + ydif * cosa + xdif * sina - 0.5 * rh;
412 tx = (l_int32)(scalex * rx + 0.5);
413 ty = (l_int32)(scaley * ry + 0.5);
414 tw = (l_int32)(L_MAX(1.0, scalex * rw + 0.5));
415 th = (l_int32)(L_MAX(1.0, scaley * rh + 0.5));
418 tx = (l_int32)(scalex * bx + 0.5);
419 ty = (l_int32)(scaley * by + 0.5);
420 tw = (l_int32)(L_MAX(1.0, scalex * bw + 0.5));
421 th = (l_int32)(L_MAX(1.0, scaley * bh + 0.5));
422 xcent = (l_int32)(scalex * xcen + 0.5);
423 ycent = (l_int32)(scaley * ycen + 0.5);
430 xdif = tx + 0.5 * tw - xcent;
431 ydif = ty + 0.5 * th - ycent;
432 rw = L_ABS(tw * cosa) + L_ABS(th * sina);
433 rh = L_ABS(th * cosa) + L_ABS(tw * sina);
434 rx = xcent + xdif * cosa - ydif * sina - 0.5 * rw;
435 ry = ycent + ydif * cosa + xdif * sina - 0.5 * rh;
437 tx = (l_int32)(rx + shiftx + 0.5);
438 ty = (l_int32)(ry + shifty + 0.5);
439 tw = (l_int32)(rw + 0.5);
440 th = (l_int32)(rh + 0.5);
473 return (
BOXA *)ERROR_PTR(
"boxas not defined", __func__, NULL);
474 if (rotation < 0 || rotation > 3)
475 return (
BOXA *)ERROR_PTR(
"rotation not in {0,1,2,3}", __func__, NULL);
481 return (
BOXA *)ERROR_PTR(
"boxad not made", __func__, NULL);
482 for (i = 0; i < n; i++) {
485 return (
BOXA *)ERROR_PTR(
"boxs not found", __func__, NULL);
518 l_int32 bx, by, bw, bh, xdist, ydist;
521 return (
BOX *)ERROR_PTR(
"box not defined", __func__, NULL);
522 if (rotation < 0 || rotation > 3)
523 return (
BOX *)ERROR_PTR(
"rotation not in {0,1,2,3}", __func__, NULL);
528 if (bw <= 0 || bh <= 0)
534 else if (rotation == 2)
570 l_int32 i, n, x, y, full;
575 return (
BOXA *)ERROR_PTR(
"boxas not defined", __func__, NULL);
578 return (
BOXA *)ERROR_PTR(
"boxas not full", __func__, NULL);
580 return (
BOXA *)ERROR_PTR(
"pta not defined", __func__, NULL);
581 if (dir != 1 && dir != -1)
582 return (
BOXA *)ERROR_PTR(
"invalid dir", __func__, NULL);
585 return (
BOXA *)ERROR_PTR(
"boxas and pta not same size", __func__, NULL);
588 return (
BOXA *)ERROR_PTR(
"boxad not made", __func__, NULL);
589 for (i = 0; i < n; i++) {
629 l_int32 i, n, x, y, w, h, size;
633 if (pnaindex) *pnaindex = NULL;
635 return (
BOXA *)ERROR_PTR(
"boxas not defined", __func__, NULL);
637 L_WARNING(
"boxas is empty\n", __func__);
648 return (
BOXA *)ERROR_PTR(
"invalid sort type", __func__, NULL);
650 return (
BOXA *)ERROR_PTR(
"invalid sort order", __func__, NULL);
653 if (n > MinCompsForBinSort &&
657 return boxaBinSort(boxas, sorttype, sortorder, pnaindex);
661 return (
BOXA *)ERROR_PTR(
"na not made", __func__, NULL);
662 for (i = 0; i < n; i++) {
704 L_WARNING(
"invalid sort type\n", __func__);
712 return (
BOXA *)ERROR_PTR(
"naindex not made", __func__, NULL);
751 l_int32 i, n, x, y, w, h;
755 if (pnaindex) *pnaindex = NULL;
757 return (
BOXA *)ERROR_PTR(
"boxas not defined", __func__, NULL);
759 L_WARNING(
"boxas is empty\n", __func__);
765 return (
BOXA *)ERROR_PTR(
"invalid sort type", __func__, NULL);
767 return (
BOXA *)ERROR_PTR(
"invalid sort order", __func__, NULL);
771 return (
BOXA *)ERROR_PTR(
"na not made", __func__, NULL);
772 for (i = 0; i < n; i++) {
792 L_WARNING(
"invalid sort type\n", __func__);
800 return (
BOXA *)ERROR_PTR(
"naindex not made", __func__, NULL);
829 return (
BOXA *)ERROR_PTR(
"boxas not defined", __func__, NULL);
831 L_WARNING(
"boxas is empty\n", __func__);
835 return (
BOXA *)ERROR_PTR(
"naindex not defined", __func__, NULL);
838 for (i = 0; i < n; i++) {
902 l_int32 i, index, h, nt, ne, n, m, ival;
904 BOXA *boxa, *boxae, *boxan, *boxa1, *boxa2, *boxa3, *boxav, *boxavs;
905 BOXAA *baa, *baa1, *baad;
906 NUMA *naindex, *nae, *nan, *nah, *nav, *na1, *na2, *nad, *namap;
907 NUMAA *naa, *naa1, *naad;
909 if (pnaad) *pnaad = NULL;
911 return (
BOXAA *)ERROR_PTR(
"boxas not defined", __func__, NULL);
913 return (
BOXAA *)ERROR_PTR(
"boxas is empty", __func__, NULL);
918 return (
BOXAA *)ERROR_PTR(
"boxa not made", __func__, NULL);
926 for (i = 0; i < nt; i++) {
953 for (i = 0; i < ne; i++) {
986 for (i = 0; i < n; i++) {
1003 for (i = 0; i < n; i++) {
1020 for (i = 0; i < m; i++) {
1040 for (i = 0; i < m; i++) {
1047 for (i = 0; i < m; i++) {
1084 l_int32 ntot, boxtot, i, j, n, nn, index;
1091 return (
BOXAA *)ERROR_PTR(
"boxas not defined", __func__, NULL);
1093 return (
BOXAA *)ERROR_PTR(
"boxas is empty", __func__, NULL);
1095 return (
BOXAA *)ERROR_PTR(
"naindex not defined", __func__, NULL);
1100 return (
BOXAA *)ERROR_PTR(
"element count mismatch", __func__, NULL);
1104 for (i = 0; i < n; i++) {
1108 for (j = 0; j < nn; j++) {
1155 l_int32 keepinvalid)
1157 l_int32 i, n, left, top, right, bot, w, h;
1159 if (!pnal && !pnat && !pnar && !pnab && !pnaw && !pnah)
1160 return ERROR_INT(
"no output requested", __func__, 1);
1161 if (pnal) *pnal = NULL;
1162 if (pnat) *pnat = NULL;
1163 if (pnar) *pnar = NULL;
1164 if (pnab) *pnab = NULL;
1165 if (pnaw) *pnaw = NULL;
1166 if (pnah) *pnah = NULL;
1168 return ERROR_INT(
"boxa not defined", __func__, 1);
1170 return ERROR_INT(
"no valid boxes", __func__, 1);
1179 for (i = 0; i < n; i++) {
1181 if (!keepinvalid && (w <= 0 || h <= 0))
1183 right = left + w - 1;
1234 l_int32 keepinvalid)
1236 l_int32 i, n, left, top, right, bot, w, h;
1238 if (!pptal && !pptar && !pptat && !pptab && !pptaw && !pptah)
1239 return ERROR_INT(
"no output requested", __func__, 1);
1240 if (pptal) *pptal = NULL;
1241 if (pptat) *pptat = NULL;
1242 if (pptar) *pptar = NULL;
1243 if (pptab) *pptab = NULL;
1244 if (pptaw) *pptaw = NULL;
1245 if (pptah) *pptah = NULL;
1247 return ERROR_INT(
"boxa not defined", __func__, 1);
1249 return ERROR_INT(
"no valid boxes", __func__, 1);
1258 for (i = 0; i < n; i++) {
1260 if (!keepinvalid && (w <= 0 || h <= 0))
1262 right = left + w - 1;
1264 if (pptal)
ptaAddPt(*pptal, i, left);
1265 if (pptat)
ptaAddPt(*pptat, i, top);
1266 if (pptar)
ptaAddPt(*pptar, i, right);
1267 if (pptab)
ptaAddPt(*pptab, i, bot);
1298 l_int32 i, n, left, top, right, bot, w, h;
1302 return (
PTA *)ERROR_PTR(
"boxa not defined", __func__, NULL);
1305 return (
PTA *)ERROR_PTR(
"invalid location", __func__, NULL);
1309 return (
PTA *)ERROR_PTR(
"pta not made", __func__, NULL);
1311 for (i = 0; i < n; i++) {
1313 right = left + w - 1;
1315 if (w == 0 || h == 0) {
1330 ptaAddPt(pta, (left + right) / 2, (top + bot) / 2);
1381 l_float32 xval, yval, rval, bval, wval, hval;
1382 NUMA *nax, *nay, *nar, *nab, *naw, *nah;
1391 return ERROR_INT(
"boxa not defined", __func__, 1);
1392 if (fract < 0.0 || fract > 1.0)
1393 return ERROR_INT(
"fract not in [0.0 ... 1.0]", __func__, 1);
1395 return ERROR_INT(
"no valid boxes in boxa", __func__, 1);
1402 *px = (l_int32)xval;
1406 *py = (l_int32)yval;
1410 *pr = (l_int32)rval;
1414 *pb = (l_int32)bval;
1418 *pw = (l_int32)wval;
1422 *ph = (l_int32)hval;
1461 return ERROR_INT(
"boxa not defined", __func__, 1);
1463 return ERROR_INT(
"no valid boxes in boxa", __func__, 1);
1482 l_int32 i, n, bw, bh;
1483 l_float32 sumw, sumh;
1488 return ERROR_INT(
"boxa not defined", __func__, 1);
1490 return ERROR_INT(
"boxa is empty", __func__, 1);
1493 for (i = 0; i < n; i++) {
1499 if (pw) *pw = sumw / n;
1500 if (ph) *ph = sumh / n;
1537 l_int32 i, n, x, y, w, h, xmax, ymax, xmin, ymin, found;
1541 if (!pw && !ph && !pbox && !pboxa)
1542 return ERROR_INT(
"no ptrs defined", __func__, 1);
1545 if (pbox) *pbox = NULL;
1546 if (pboxa) *pboxa = NULL;
1548 return ERROR_INT(
"baa not defined", __func__, 1);
1552 return ERROR_INT(
"no boxa in baa", __func__, 1);
1556 xmin = ymin = 100000000;
1558 for (i = 0; i < n; i++) {
1563 if (w > 0 && h > 0) {
1565 xmin = L_MIN(xmin, x);
1566 ymin = L_MIN(ymin, y);
1567 xmax = L_MAX(xmax, x + w);
1568 ymax = L_MAX(ymax, y + h);
1578 *pbox =
boxCreate(xmin, ymin, xmax - xmin, ymax - ymin);
1618 if (pnaindex) *pnaindex = NULL;
1620 return (
BOXA *)ERROR_PTR(
"baa not defined", __func__, NULL);
1622 return (
BOXA *)ERROR_PTR(
"invalid copyflag", __func__, NULL);
1625 *pnaindex = naindex;
1630 for (i = 0; i < n; i++) {
1639 for (j = 0; j < m; j++) {
1678 l_int32 i, j, m, n, mval, nshort;
1679 BOXA *boxat, *boxad;
1683 return (
BOXA *)ERROR_PTR(
"baa not defined", __func__, NULL);
1685 return (
BOXA *)ERROR_PTR(
"invalid copyflag", __func__, NULL);
1689 for (i = 0; i < n; i++) {
1692 mval = L_MIN(m, num);
1693 nshort = num - mval;
1694 for (j = 0; j < mval; j++) {
1698 for (j = 0; j < nshort; j++) {
1733 l_int32 i, j, n, nbaa, index;
1739 return (
BOXAA *)ERROR_PTR(
"boxa not defined", __func__, NULL);
1741 return (
BOXAA *)ERROR_PTR(
"invalid copyflag", __func__, NULL);
1745 if (num * nbaa != n)
1746 L_ERROR(
"inconsistent alignment: num doesn't divide n\n", __func__);
1748 for (i = 0, index = 0; i < nbaa; i++) {
1750 for (j = 0; j < num; j++, index++) {
1783 l_int32 i, j, ny, nb, nbox;
1789 return (
BOXAA *)ERROR_PTR(
"baas not defined", __func__, NULL);
1791 return (
BOXAA *)ERROR_PTR(
"baas empty", __func__, NULL);
1794 for (i = 0; i < ny; i++) {
1796 return (
BOXAA *)ERROR_PTR(
"baas is missing a boxa", __func__, NULL);
1801 else if (nb != nbox)
1802 return (
BOXAA *)ERROR_PTR(
"boxa are not all the same size",
1808 for (i = 0; i < nbox; i++) {
1810 for (j = 0; j < ny; j++) {
1843 l_int32 i, n, m, y, yt, h, ht, ovlp, maxovlp, maxindex;
1847 if (pindex) *pindex = 0;
1849 return ERROR_INT(
"baa not defined", __func__, 1);
1851 return ERROR_INT(
"box not defined", __func__, 1);
1853 return ERROR_INT(
"&index not defined", __func__, 1);
1857 maxovlp = -10000000;
1858 for (i = 0; i < n; i++) {
1862 L_WARNING(
"no boxes in boxa\n", __func__);
1872 ovlp = y + h - 1 - yt;
1874 ovlp = yt + ht - 1 - y;
1875 if (ovlp > maxovlp) {
1881 if (maxovlp + delta >= 0)
l_int32 boxaGetValidCount(BOXA *boxa)
boxaGetValidCount()
l_ok boxGetGeometry(const BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
l_ok boxaaReplaceBoxa(BOXAA *baa, l_int32 index, BOXA *boxa)
boxaaReplaceBoxa()
l_ok boxaIsFull(BOXA *boxa, l_int32 *pfull)
boxaIsFull()
BOXA * boxaCopy(BOXA *boxa, l_int32 copyflag)
boxaCopy()
void boxDestroy(BOX **pbox)
boxDestroy()
BOX * boxaaGetBox(BOXAA *baa, l_int32 iboxa, l_int32 ibox, l_int32 accessflag)
boxaaGetBox()
BOXAA * boxaaCreate(l_int32 n)
boxaaCreate()
l_int32 boxaaGetCount(BOXAA *baa)
boxaaGetCount()
l_ok boxaGetBoxGeometry(BOXA *boxa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxaGetBoxGeometry()
l_ok boxaaAddBoxa(BOXAA *baa, BOXA *ba, l_int32 copyflag)
boxaaAddBoxa()
l_ok boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
l_int32 boxaGetCount(const BOXA *boxa)
boxaGetCount()
BOXA * boxaaGetBoxa(BOXAA *baa, l_int32 index, l_int32 accessflag)
boxaaGetBoxa()
BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetBox()
BOX * boxCopy(BOX *box)
boxCopy()
void boxaaDestroy(BOXAA **pbaa)
boxaaDestroy()
BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreate()
BOXA * boxaCreate(l_int32 n)
boxaCreate()
l_ok boxaaAddBox(BOXAA *baa, l_int32 index, BOX *box, l_int32 accessflag)
boxaaAddBox()
l_ok boxaJoin(BOXA *boxad, BOXA *boxas, l_int32 istart, l_int32 iend)
boxaJoin()
BOXA * boxaHandleOverlaps(BOXA *boxas, l_int32 op, l_int32 range, l_float32 min_overlap, l_float32 max_ratio, NUMA **pnamap)
boxaHandleOverlaps()
BOXAA * boxaEncapsulateAligned(BOXA *boxa, l_int32 num, l_int32 copyflag)
boxaEncapsulateAligned()
BOXA * boxaaFlattenAligned(BOXAA *baa, l_int32 num, BOX *fillerbox, l_int32 copyflag)
boxaaFlattenAligned()
BOXAA * boxaSort2dByIndex(BOXA *boxas, NUMAA *naa)
boxaSort2dByIndex()
l_ok boxaaAlignBox(BOXAA *baa, BOX *box, l_int32 delta, l_int32 *pindex)
boxaaAlignBox()
l_ok boxaGetRankVals(BOXA *boxa, l_float32 fract, l_int32 *px, l_int32 *py, l_int32 *pr, l_int32 *pb, l_int32 *pw, l_int32 *ph)
boxaGetRankVals()
PTA * boxaExtractCorners(BOXA *boxa, l_int32 loc)
boxaExtractCorners()
l_ok boxaaGetExtent(BOXAA *baa, l_int32 *pw, l_int32 *ph, BOX **pbox, BOXA **pboxa)
boxaaGetExtent()
BOX * boxRotateOrth(BOX *box, l_int32 w, l_int32 h, l_int32 rotation)
boxRotateOrth()
BOXA * boxaRotateOrth(BOXA *boxas, l_int32 w, l_int32 h, l_int32 rotation)
boxaRotateOrth()
BOX * boxTransformOrdered(BOX *boxs, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 order)
boxTransformOrdered()
BOX * boxTransform(BOX *box, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley)
boxTransform()
l_ok boxaGetMedianVals(BOXA *boxa, l_int32 *px, l_int32 *py, l_int32 *pr, l_int32 *pb, l_int32 *pw, l_int32 *ph)
boxaGetMedianVals()
l_ok boxaGetAverageSize(BOXA *boxa, l_float32 *pw, l_float32 *ph)
boxaGetAverageSize()
BOXA * boxaTransformOrdered(BOXA *boxas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 order)
boxaTransformOrdered()
BOXA * boxaTransform(BOXA *boxas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley)
boxaTransform()
BOXA * boxaaFlattenToBoxa(BOXAA *baa, NUMA **pnaindex, l_int32 copyflag)
boxaaFlattenToBoxa()
BOXA * boxaSort(BOXA *boxas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex)
boxaSort()
BOXA * boxaSortByIndex(BOXA *boxas, NUMA *naindex)
boxaSortByIndex()
BOXA * boxaBinSort(BOXA *boxas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex)
boxaBinSort()
BOXA * boxaShiftWithPta(BOXA *boxas, PTA *pta, l_int32 dir)
boxaShiftWithPta()
BOXAA * boxaaTranspose(BOXAA *baas)
boxaaTranspose()
l_ok boxaExtractAsPta(BOXA *boxa, PTA **pptal, PTA **pptat, PTA **pptar, PTA **pptab, PTA **pptaw, PTA **pptah, l_int32 keepinvalid)
boxaExtractAsPta()
BOXAA * boxaSort2d(BOXA *boxas, NUMAA **pnaad, l_int32 delta1, l_int32 delta2, l_int32 minh1)
boxaSort2d()
l_ok boxaExtractAsNuma(BOXA *boxa, NUMA **pnal, NUMA **pnat, NUMA **pnar, NUMA **pnab, NUMA **pnaw, NUMA **pnah, l_int32 keepinvalid)
boxaExtractAsNuma()
l_ok boxaGetExtent(BOXA *boxa, l_int32 *pw, l_int32 *ph, BOX **pbox)
boxaGetExtent()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
l_int32 numaaGetNumberCount(NUMAA *naa)
numaaGetNumberCount()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_int32 numaaGetCount(NUMAA *naa)
numaaGetCount()
l_ok numaaAddNumber(NUMAA *naa, l_int32 index, l_float32 val)
numaaAddNumber()
NUMA * numaaGetNuma(NUMAA *naa, l_int32 index, l_int32 accessflag)
numaaGetNuma()
void numaDestroy(NUMA **pna)
numaDestroy()
NUMAA * numaaCreate(l_int32 n)
numaaCreate()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
l_ok numaaAddNuma(NUMAA *naa, NUMA *na, l_int32 copyflag)
numaaAddNuma()
void numaaDestroy(NUMAA **pnaa)
numaaDestroy()
l_ok numaaReplaceNuma(NUMAA *naa, l_int32 index, NUMA *na)
numaaReplaceNuma()
NUMA * numaGetSortIndex(NUMA *na, l_int32 sortorder)
numaGetSortIndex()
l_ok numaJoin(NUMA *nad, NUMA *nas, l_int32 istart, l_int32 iend)
numaJoin()
l_ok numaGetRankValue(NUMA *na, l_float32 fract, NUMA *nasort, l_int32 usebins, l_float32 *pval)
numaGetRankValue()
NUMA * numaSortByIndex(NUMA *nas, NUMA *naindex)
numaSortByIndex()
NUMA * numaGetBinSortIndex(NUMA *nas, l_int32 sortorder)
numaGetBinSortIndex()
@ L_SORT_BY_MIN_DIMENSION
@ L_SORT_BY_MAX_DIMENSION
l_ok ptaGetIPt(PTA *pta, l_int32 index, l_int32 *px, l_int32 *py)
ptaGetIPt()
l_ok ptaAddPt(PTA *pta, l_float32 x, l_float32 y)
ptaAddPt()
l_int32 ptaGetCount(PTA *pta)
ptaGetCount()
PTA * ptaCreate(l_int32 n)
ptaCreate()