tesseract/ccstruct/genblob.cpp
2007-03-07 20:03:40 +00:00

134 lines
4.5 KiB
C++

/**********************************************************************
* File: genblob.cpp (Formerly gblob.c)
* Description: Generic Blob processing routines
* Author: Phil Cheatle
* Created: Mon Nov 25 10:53:26 GMT 1991
*
* (C) Copyright 1991, Hewlett-Packard Ltd.
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
** http://www.apache.org/licenses/LICENSE-2.0
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*
**********************************************************************/
#include "mfcpch.h"
#include "stepblob.h"
#include "polyblob.h"
#include "genblob.h"
/**********************************************************************
* blob_comparator()
*
* Blob comparator used to sort a blob list so that blobs are in increasing
* order of left edge.
**********************************************************************/
int blob_comparator( //sort blobs
const void *blob1p, //ptr to ptr to blob1
const void *blob2p //ptr to ptr to blob2
) {
PBLOB *blob1 = *(PBLOB **) blob1p;
PBLOB *blob2 = *(PBLOB **) blob2p;
return blob1->bounding_box ().left () - blob2->bounding_box ().left ();
}
/**********************************************************************
* c_blob_comparator()
*
* Blob comparator used to sort a blob list so that blobs are in increasing
* order of left edge.
**********************************************************************/
int c_blob_comparator( //sort blobs
const void *blob1p, //ptr to ptr to blob1
const void *blob2p //ptr to ptr to blob2
) {
C_BLOB *blob1 = *(C_BLOB **) blob1p;
C_BLOB *blob2 = *(C_BLOB **) blob2p;
return blob1->bounding_box ().left () - blob2->bounding_box ().left ();
}
/**********************************************************************
* gblob_bounding_box()
*
* Return the bounding box of a generic blob.
**********************************************************************/
BOX gblob_bounding_box( //Get bounding box
PBLOB *blob, //generic blob
BOOL8 polygonal //is blob polygonal?
) {
if (polygonal)
return blob->bounding_box ();
else
return ((C_BLOB *) blob)->bounding_box ();
}
/**********************************************************************
* gblob_sort_list()
*
* Sort a generic blob list into order of bounding box left edge
**********************************************************************/
void gblob_sort_list( //Sort a gblob list
PBLOB_LIST *blob_list, //generic blob list
BOOL8 polygonal //is list polygonal?
) {
PBLOB_IT b_it;
C_BLOB_IT c_it;
if (polygonal) {
b_it.set_to_list (blob_list);
b_it.sort (blob_comparator);
}
else {
c_it.set_to_list ((C_BLOB_LIST *) blob_list);
c_it.sort (c_blob_comparator);
}
}
/**********************************************************************
* gblob_out_list()
*
* Return the generic outline list of a generic blob.
**********************************************************************/
OUTLINE_LIST *gblob_out_list( //Get outline list
PBLOB *blob, //generic blob
BOOL8 polygonal //is blob polygonal?
) {
if (polygonal)
return blob->out_list ();
else
return (OUTLINE_LIST *) ((C_BLOB *) blob)->out_list ();
}
/**********************************************************************
* goutline_bounding_box()
*
* Return the bounding box of a generic outline.
**********************************************************************/
BOX goutline_bounding_box( //Get bounding box
OUTLINE *outline, //generic outline
BOOL8 polygonal //is outline polygonal?
) {
if (polygonal)
return outline->bounding_box ();
else
return ((C_OUTLINE *) outline)->bounding_box ();
}