1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
/**********************************************************************
* 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.
**********************************************************************/
TBOX 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.
**********************************************************************/
TBOX 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 ();
}
|