Tesseract
3.02
|
00001 /********************************************************************** 00002 * File: stepblob.h (Formerly cblob.h) 00003 * Description: Code for C_BLOB class. 00004 * Author: Ray Smith 00005 * Created: Tue Oct 08 10:41:13 BST 1991 00006 * 00007 * (C) Copyright 1991, Hewlett-Packard Ltd. 00008 ** Licensed under the Apache License, Version 2.0 (the "License"); 00009 ** you may not use this file except in compliance with the License. 00010 ** You may obtain a copy of the License at 00011 ** http://www.apache.org/licenses/LICENSE-2.0 00012 ** Unless required by applicable law or agreed to in writing, software 00013 ** distributed under the License is distributed on an "AS IS" BASIS, 00014 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00015 ** See the License for the specific language governing permissions and 00016 ** limitations under the License. 00017 * 00018 **********************************************************************/ 00019 00020 #ifndef STEPBLOB_H 00021 #define STEPBLOB_H 00022 00023 #include "coutln.h" 00024 #include "rect.h" 00025 00026 struct Pix; 00027 00028 class C_BLOB:public ELIST_LINK 00029 { 00030 public: 00031 C_BLOB() { 00032 } 00033 explicit C_BLOB(C_OUTLINE_LIST *outline_list); 00034 // Simpler constructor to build a blob from a single outline that has 00035 // already been fully initialized. 00036 explicit C_BLOB(C_OUTLINE* outline); 00037 00038 // Build and return a fake blob containing a single fake outline with no 00039 // steps. 00040 static C_BLOB* FakeBlob(const TBOX& box); 00041 00042 C_OUTLINE_LIST *out_list() { //get outline list 00043 return &outlines; 00044 } 00045 00046 TBOX bounding_box(); //compute bounding box 00047 inT32 area(); //compute area 00048 inT32 perimeter(); // Total perimeter of outlines and 1st level children. 00049 inT32 outer_area(); //compute area 00050 inT32 count_transitions( //count maxima 00051 inT32 threshold); //size threshold 00052 00053 void move(const ICOORD vec); // repostion blob by vector 00054 void rotate(const FCOORD& rotation); // Rotate by given vector. 00055 00056 // Returns a Pix rendering of the blob. pixDestroy after use. 00057 Pix* render(); 00058 // Returns a Pix rendering of the outline of the blob. (no fill). 00059 // pixDestroy after use. 00060 Pix* render_outline(); 00061 00062 void plot( //draw one 00063 ScrollView* window, //window to draw in 00064 ScrollView::Color blob_colour, //for outer bits 00065 ScrollView::Color child_colour); //for holes 00066 00067 C_BLOB& operator= (const C_BLOB & source) { 00068 if (!outlines.empty ()) 00069 outlines.clear(); 00070 outlines.deep_copy(&source.outlines, &C_OUTLINE::deep_copy); 00071 return *this; 00072 } 00073 00074 static C_BLOB* deep_copy(const C_BLOB* src) { 00075 C_BLOB* blob = new C_BLOB; 00076 *blob = *src; 00077 return blob; 00078 } 00079 00080 private: 00081 C_OUTLINE_LIST outlines; //master elements 00082 }; 00083 00084 ELISTIZEH (C_BLOB) 00085 #endif