reference/ocr-new/Component.cc
author viric@llimona
Thu, 18 May 2006 23:12:51 +0200
changeset 0 6b8091ca909a
permissions -rw-r--r--
Init from working directory of svn repository.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     1
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     2
#include "system.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     3
#include "Component.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     4
#include "BitMap.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     5
#include <assert.h>
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     6
#include "list.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     7
#include "tcl_interface.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     8
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     9
/*** Component.cc
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    10
  Member functions for Components 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    11
  Component functions defined in Component.h
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    12
  rev 12/9/95 KM
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    13
***/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    14
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    15
extern Page * global_page;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    16
extern Page * active_page;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    17
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    18
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    19
Components::Components()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    20
:List()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    21
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    22
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    23
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    24
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    25
Components::~Components()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    26
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    27
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    28
  for (ListElement *ptr = first; ptr != NULL && ptr->item!=NULL; 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    29
       ptr = ptr->next) {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    30
    if (ptr->item != NULL)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    31
      delete (Component *) (ptr->item);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    32
     }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    33
  while(!IsEmpty())
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    34
    Remove();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    35
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    36
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    37
Component * Components::compAt(Point p)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    38
/*--------------------------------------------------------------
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    39
Primary Purpose:  Return smallest component that contains this point
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    40
Arguments:  Point of request
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    41
Return Value: Component pointer or NULL if there is no component here
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    42
Rev 4/22/96
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    43
---------------------------------------------------------------*/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    44
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    45
  double size;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    46
  Component * returnComp = NULL;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    47
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    48
  int rowwidth = (((Component *) last->item)->ul().x()) -
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    49
    (((Component *) first->item)->ul().x()) ;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    50
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    51
  int rowheight = (((Component *) last->item)->ul().x()) -
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    52
    (((Component *) first->item)->ul().x());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    53
 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    54
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    55
    size = rowwidth*rowheight; // this is now as big as the whole line.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    56
 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    57
   for (ListElement *ptr = first; ptr != NULL && ptr->item!=NULL; 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    58
       ptr = ptr->next) 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    59
     {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    60
       Component * item = (Component *) ptr->item;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    61
       if ( p > item->ul() && p < item->lr())
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    62
	 {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    63
	   double area = item->area();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    64
	   if(area < size) size = area;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    65
	   returnComp = item;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    66
	 }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    67
       }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    68
   return returnComp;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    69
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    70
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    71
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    72
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    73
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    74
Component * Component::copy()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    75
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    76
  Component * newcomp = new Component(ful, flr);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    77
  newcomp->numBits() = fnumBits;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    78
  newcomp->fasciiId = new char[strlen(fasciiId)];
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    79
  strcpy(newcomp->fasciiId, fasciiId);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    80
  newcomp->fconfid = confid();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    81
  newcomp->charGroup = charGroup;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    82
  newcomp->ffontId = fontId();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    83
  for (int i = 0; i < numProperties; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    84
	         newcomp->property(i) = fproperty[i];
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    85
  return newcomp;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    86
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    87
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    88
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    89
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    90
int Component::AddToComponent(ListElement* intrvl, RLEMap* rlemap, 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    91
			      int horizMerge)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    92
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    93
  assert(intrvl != NULL);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    94
  List* list = new List();           //make a new queue
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    95
  ListElement* current;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    96
  ListElement* nextelt;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    97
  int counter = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    98
  int currentRow;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    99
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   100
  if (intrvl->previous != NULL)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   101
    intrvl->previous->next = intrvl->next;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   102
  else rlemap->fMapData[((RLEPair *) intrvl->item)->row]->first = intrvl->next;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   103
  if (intrvl->next != NULL)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   104
    intrvl->next->previous = intrvl->previous;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   105
  list->first = intrvl;              //put starting interval on queue
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   106
  list->last = intrvl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   107
  list->length = 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   108
  intrvl->next = NULL;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   109
  intrvl->previous = NULL;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   110
  currentRow = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   111
  while ((intrvl = list->first) != NULL && 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   112
	 currentRow < rlemap->imageLength()-1) //Take an interval off queue
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   113
    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   114
      currentRow = ((RLEPair *) intrvl->item)->row;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   115
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   116
      for (int i=-1; i < 2; i+=2) { 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   117
	current = rlemap->fMapData[currentRow+i]->first;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   118
	while ((current != NULL) 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   119
	       && (((RLEPair *) current->item)->start <= 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   120
		   ((RLEPair *) intrvl->item)->end+horizMerge)) {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   121
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   122
//	  printf("Looking at an interval on row %d that goes from %d to %d\n",
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   123
//		 currentRow, ((RLEPair *) intrvl->item)->start,
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   124
//		  ((RLEPair *) intrvl->item)->end);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   125
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   126
	  if ((((RLEPair *) current->item)->end 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   127
	       >= ((RLEPair *) intrvl->item)->start-1) 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   128
	      && (((RLEPair *) current->item)->start <= 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   129
		  ((RLEPair *) intrvl->item)->end+horizMerge)) {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   130
//	  printf("Adding connection for interval on row %d that goes from %d to %d\n", currentRow+i,
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   131
//		 ((RLEPair *) current->item)->start,
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   132
//		  ((RLEPair *) current->item)->end);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   133
	
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   134
	    if (current->previous != NULL)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   135
	      current->previous->next = current->next;   //take off RLEMap
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   136
	    else
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   137
	      rlemap->fMapData[currentRow+i]->first = current->next;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   138
	    if (current->next != NULL)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   139
	      current->next->previous = current->previous;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   140
	    nextelt = current->next;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   141
	    list->last->next = current;                //add to queue
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   142
	    current->previous = list->last;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   143
	    list->last = current;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   144
	    current->next = NULL;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   145
	    current = nextelt;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   146
	    list->length++;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   147
	  } else
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   148
	    current = current->next;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   149
	}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   150
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   151
      
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   152
      if ((((RLEPair *) intrvl->item)->start < ful.x()) || (ful.x()==-1)) {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   153
	ful.x() = ((RLEPair *) intrvl->item)->start;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   154
//	printf("Changed ful.x to %d\n", ful.x());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   155
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   156
      if ((((RLEPair *) intrvl->item)->end > flr.x()) || (flr.x()==-1)) {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   157
	flr.x() = ((RLEPair *) intrvl->item)->end;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   158
//	printf("Changed flr.x to %d\n", flr.x());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   159
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   160
      if ((((RLEPair *) intrvl->item)->row < ful.y()) || (ful.y()==-1)) {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   161
	ful.y() = ((RLEPair *) intrvl->item)->row;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   162
//	printf("Changed ful.y to %d\n", ful.y());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   163
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   164
      if ((((RLEPair *) intrvl->item)->row > flr.y()) || (flr.y()==-1)) {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   165
	flr.y() = ((RLEPair *) intrvl->item)->row;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   166
//	printf("Changed flr.y to %d\n", flr.y());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   167
      }      
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   168
      list->first = intrvl->next;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   169
      if (intrvl->next != NULL)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   170
	intrvl->next->previous = NULL;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   171
      delete ((RLEPair *) (intrvl->item));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   172
      delete intrvl;               //so the letter O won't go forever
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   173
      counter++;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   174
      list->length--;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   175
    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   176
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   177
  delete list;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   178
  return counter;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   179
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   180
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   181
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   182
void Component::setProperties(BitMap * map)  // was BitMap
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   183
/*--------------------------------------------------------------
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   184
Primary Purpose: Set the property vector for this component
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   185
Arguments:  The BitMap to which this component belongs
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   186
Return Value:
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   187
Effects: The component is divided into a 5 by 5 grid.  A gray
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   188
    scale (0 - 255) for each section is determined.  The gray scale
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   189
    is 0 for all white, 255 for all black but normally will e somewhere
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   190
    between the two.  The gray scales are represented in properties
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   191
    0-24. 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   192
    Property 25 is the grayscale accross the top.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   193
    Property 26 is the grayscale accross the bottom.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   194
    Property 27 is the width/height ratio again scaled to (0-255)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   195
    Actually the formula for property 27 is
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   196
        width/ height * 255  if height > width
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   197
        1- height/width * 255 if width > height
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   198
    This way near 0 is very tall and thin
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   199
             near 128 height near width
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   200
	     near 255 very wide
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   201
    Property 28 is  Indicator of a vertically disjoint character
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   202
     like i and j.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   203
    Also the total number of black pixels is set in fnumBits.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   204
    // This is not used at this time.    
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   205
Constraints: The data fields ful and flr must already be set 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   206
   before calling this function. These fields specify a bounding
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   207
   box for the character within the BitMap.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   208
Rev: 12/9 KM
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   209
---------------------------------------------------------------*/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   210
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   211
  if (ful > flr) 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   212
    printf("Problem\n");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   213
  assert (ful <= flr);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   214
  short int hflag[NumHorizDiv + 1];  // flags horizontal section dividers
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   215
  short int vflag[NumVertDiv + 1];   // flags vertical section dividers
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   216
  float height, width;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   217
  int propNum;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   218
  float darkest = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   219
  float lightest; 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   220
  int darkrow = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   221
  int lightrow = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   222
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   223
  Point sectionLr, sectionUl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   224
  // Set Number of bits
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   225
  fnumBits = map->pixelsInRegion(ful, flr);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   226
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   227
  setSectionFlags(hflag, vflag);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   228
  for (int r = 0; r < NumVertDiv; r++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   229
    for (int c = 0; c < NumHorizDiv; c++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   230
      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   231
	propNum = (r * NumHorizDiv) + c;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   232
	sectionUl = Point(hflag[c], vflag[r]);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   233
	sectionLr = Point(hflag[c+1]-1, vflag[r+1]-1);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   234
	if (sectionUl <= sectionLr)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   235
	  fproperty[propNum] = map->grayScale(sectionUl, sectionLr); 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   236
	assert(fproperty[propNum] >= 0 && fproperty[propNum] < 256);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   237
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   238
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   239
  // set the height/width ratio
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   240
  // 0 is very thin 128 is even 256 is very wide.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   241
  width = flr.x() - ful.x() + 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   242
  height = flr.y() - ful.y() + 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   243
 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   244
  // Grayscale across the top - Indicator of top bar
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   245
  sectionUl = Point(ful.x(), ful.y());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   246
  sectionLr = Point(flr.x(), ful.y() + (int)(height/(NumVertDiv*2)));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   247
  fproperty[25] = map->grayScale(sectionUl, sectionLr);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   248
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   249
   // Grayscale across bottom - Indicator of a foot for l opposed to 1
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   250
  sectionUl = Point(ful.x(),  flr.y() -  (int)(height/(NumVertDiv*2)));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   251
  sectionLr = Point(flr.x(),  flr.y());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   252
  fproperty[26] = map->grayScale(sectionUl, sectionLr);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   253
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   254
  float hdivw = (float)height/width;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   255
  float wdivh = (float) width/height;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   256
  if (width > height)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   257
       fproperty[27]= (short int) ((1- hdivw/2)*255);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   258
  else
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   259
    fproperty[27] = (short int)((wdivh/2)* 255);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   260
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   261
  // is this a disjoint character like i or j  255 = yes 0 = no
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   262
  fproperty[28]=0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   263
  lightest = width;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   264
  for(int row = ful.y(); row < flr.y(); row++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   265
      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   266
	int pixelsThisRow = pixelsBetween(map->row(row), ful.x(), flr.x());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   267
	if(!(pixelsThisRow))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   268
	      fproperty[28]=255;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   269
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   270
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   271
  fproperty[29]= 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   272
    for(int p = 0; p < numProperties; p++)	
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   273
      assert(fproperty[p] >= 0 && fproperty[p] < 256);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   274
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   275
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   276
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   277
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   278
void Component::setSectionFlags(short int hflag[], short int vflag[])
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   279
/*--------------------------------------------------------------
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   280
Primary Purpose: Breaks this component into a grid NumHorizDiv X NumVertDiv
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   281
    for determining grayscale property vectors.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   282
Arguments:  hflag[] is an empty array to be filled by this procedure with
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   283
    the starting columns of each horizontal subdivision.  vflag[] will
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   284
    be filled with the vertical subdivisions.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   285
Effects:  fills hflag[] with the starting column for each subdivision.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   286
     The last element of the array is actually the pixel immediately 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   287
     following the last  subdivision.  The last subdivision contains any 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   288
     remaining pixels that did not divide evenly amongst the divisions.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   289
     vflag[NumHorizDiv] is comparable for vertical supdivisions.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   290
     Example ful = (0,25) flr = (52,46) NumHorizDiv = NumVertDiv = 5
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   291
         hflag[6] = { 0,10,20,30,40,53 }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   292
	 vflag[6] = {25.29.33.37.41.47 } 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   293
Constraints: ful and flr must be set to mark the bounding box before
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   294
   calling this procedure.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   295
Rev:  10/27 KM
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   296
---------------------------------------------------------------*/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   297
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   298
  int ulx = ful.x();  int uly = ful.y();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   299
  int lrx = flr.x();  int lry = flr.y();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   300
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   301
  int width =  lrx - ulx+1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   302
  int height = lry - uly+1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   303
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   304
  int horizDiv = width/NumHorizDiv;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   305
  int vertDiv = height/NumVertDiv;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   306
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   307
  int horizExtra = width - horizDiv*NumHorizDiv;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   308
  int vertExtra = height - vertDiv*NumVertDiv;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   309
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   310
  int i, add;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   311
  for (i = 0; i < NumHorizDiv; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   312
    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   313
    if(horizExtra - i > 0) add = i; else add = horizExtra;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   314
    hflag[i] = ulx + (i*horizDiv)+ add;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   315
  }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   316
  hflag[i] = lrx + 1;              // Closes off last division
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   317
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   318
  int j;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   319
  for(j = 0; j < NumVertDiv; j ++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   320
      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   321
    if(vertExtra - j > 0) add = j; else add = vertExtra;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   322
    vflag[j] = uly + (j*vertDiv)+ add;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   323
  }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   324
  vflag[j] = lry + 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   325
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   326
    
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   327
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   328
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   329
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   330
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   331
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   332
Distance Component::distance(Component * comp) 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   333
/*--------------------------------------------------------------
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   334
Primary Purpose: Determines heuristic distance between two components
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   335
Arguments:  Another component to compare
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   336
Return Value: integer value which represents the distance between two 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   337
   components. Distance = sum over i of
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   338
                       weight *square (this->fproperty[i] - comp->fproperty[i])
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   339
		       weight for i == 26, 27 is 3 weight is 1 for all other 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   340
		       properties
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   341
Constraints: setProperties must have been run on both components
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   342
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   343
Rev: 11/1 KM
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   344
---------------------------------------------------------------*/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   345
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   346
  Property * a = fproperty;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   347
  Property * b = comp->properties();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   348
  Distance dist=0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   349
  int dif=0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   350
  int worst = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   351
  int weight = 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   352
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   353
  for(int i= 0; i < numProperties; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   354
    { 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   355
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   356
      if(i == 27) weight = 50;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   357
     if (i == 28) weight = 3;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   358
     else if(i != 27 && i != 28)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   359
       weight = 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   360
     
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   361
       dif = (a[i] - b[i]);      
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   362
      dist += weight*dif*dif;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   363
    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   364
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   365
  return dist;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   366
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   367
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   368
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   369
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   370
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   371
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   372
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   373
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   374
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   375
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   376
void printVector(short int vector[], int size)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   377
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   378
  for (int i = 0; i < size; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   379
    cout << vector[i] << " " ;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   380
  cout << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   381
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   382
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   383
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   384
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   385
void testProperties(Component* c, BitMap * map)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   386
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   387
  short int hflag[NumHorizDiv + 1];  // flags horizontal section dividers
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   388
  short int vflag[NumVertDiv + 1];   // flags vertical section dividers
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   389
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   390
  cout << "First test subDivisions  " << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   391
  c->setSectionFlags(hflag, vflag);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   392
  cout << "Horizontal flags" <<endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   393
  printVector(hflag, NumHorizDiv + 1);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   394
  cout << "Vertical flags" <<endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   395
  printVector(vflag, NumHorizDiv + 1);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   396
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   397
  cout << "Now lets look at the properties " << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   398
  // setSectionFlags will actually get called again within setProperties
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   399
  c->setProperties(map);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   400
  printVector(c->properties(), NumHorizDiv*NumVertDiv + 1);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   401
  cout << endl << " The distance of this component from itself: " << " ";
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   402
  cout << c->distance(c) << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   403
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   404
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   405
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   406
void Component::display_bounding_box()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   407
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   408
  display_bounding_box("blue");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   409
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   410
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   411
void Component::display_bounding_box(char * color)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   412
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   413
  if(global_page == active_page)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   414
    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   415
      display_bounding_box(color, SCALE_FACTOR, 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   416
		       ".main_window.display.work_space");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   417
    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   418
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   419
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   420
void Component::display_bounding_box(char * color, double scaleFactor, 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   421
				     char * window)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   422
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   423
  int ulx = (ul()).x();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   424
  int uly = (ul()).y();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   425
  int lrx = (lr()).x();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   426
  int lry = (lr()).y();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   427
  scale(ulx,scaleFactor); scale(uly,scaleFactor); scale(lrx,scaleFactor); 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   428
  scale(lry,scaleFactor);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   429
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   430
  if(ENABLE_USER_INTERFACE)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   431
    docommand("%s create rectangle %d %d %d %d -outline %s -tags IMAGE_TAG ",  window, ulx, uly, lrx, lry, color);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   432
}  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   433
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   434
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   435
Distance Component::recognize(Component * learnedchars)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   436
// This is out of date. Current recognize is below
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   437
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   438
  Distance d, nextd;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   439
  char id;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   440
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   441
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   442
//  printf("Another call to recognize\n");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   443
  d = (256*256)*numProperties;  // this is the biggest distance
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   444
                        
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   445
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   446
	       
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   447
    for (int i = 0; i < 256; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   448
	{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   449
	  if(learnedchars[i].confid() != 0)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   450
	      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   451
		nextd = distance(&learnedchars[i]);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   452
//		printf("Distance = %d, character = %c\n", nextd, i);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   453
		if (nextd < d)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   454
		    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   455
		      d = nextd;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   456
		      id = (char) i;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   457
		    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   458
	      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   459
	  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   460
	}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   461
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   462
  fasciiId = &id;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   463
  /*  printf("Recognized a Component: %c\n", id); */
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   464
  return d;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   465
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   466
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   467
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   468
Distance Component::recognize(Components * learnedgroups, bool allGroups)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   469
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   470
  Distance d, worstDistance,nextd;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   471
  char * id;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   472
  short int fontid;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   473
  float tempd;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   474
  worstDistance = 150000;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   475
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   476
//  printf("Another call to new recognize\n");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   477
  d = (65536)*numProperties;  // this is the biggest distance
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   478
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   479
                        
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   480
    fconfid = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   481
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   482
    for(int g = 0; g < NumCharGroups &&
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   483
 	((fconfid < ConfidenceThreshold) || allGroups); g++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   484
    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   485
      int offset = (charGroup+g) % NumCharGroups;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   486
      //      if (offset == 4 && charGroup != 4) continue;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   487
      for (ListElement* ptr = learnedgroups[offset].first; ptr != NULL;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   488
	 ptr = ptr->next)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   489
	{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   490
	  Component * item = (Component *) ptr->item;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   491
	  nextd = distance(item);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   492
//	  printf("Distance = %d, character = %c\n", nextd, i);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   493
	  if (nextd < d)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   494
	      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   495
		d = nextd;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   496
		id = item->fasciiId;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   497
		fontid = item->ffontId;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   498
	      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   499
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   500
	}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   501
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   502
      if (d >= worstDistance) 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   503
	  tempd = worstDistance - 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   504
      else tempd = d;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   505
	
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   506
	fconfid = (unsigned short int)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   507
	  (255 - (tempd/worstDistance)*256);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   508
      if(charGroup == 4) break;  // dont check other groups for floaters
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   509
    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   510
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   511
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   512
  fasciiId = new char[strlen(id)+1];
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   513
  strcpy(fasciiId,id);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   514
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   515
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   516
  ffontId = fontid;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   517
  //printf("Recognized a Component: %s confid-%d dist-%u h/wratio %u\n", 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   518
  //	 id,  fconfid, d, property(27));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   519
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   520
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   521
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   522
  return d;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   523
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   524
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   525
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   526
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   527
int Component::vertShrink(BitMap * bitmap)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   528
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   529
  int r;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   530
  int shrunk = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   531
	for(r = ful.y(); r < flr.y(); r++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   532
	      if (pixelsBetween(bitmap->row(r), ful.x(), flr.x()))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   533
		  {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   534
		    ful.y() = r;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   535
		    shrunk = 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   536
		    break;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   537
		  }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   538
	for(r = flr.y(); r > ful.y(); r--)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   539
	      if (pixelsBetween(bitmap->row(r), ful.x(), flr.x()))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   540
		  {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   541
		    flr.y() = r;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   542
		    shrunk = 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   543
		    break;		    
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   544
		  }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   545
		
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   546
  return shrunk;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   547
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   548
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   549
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   550
int Component::horizontalShrink(BitMap * bitmap)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   551
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   552
  int c;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   553
  int shrunk = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   554
	for(c = ful.x(); c < flr.x(); c++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   555
	      if (bitmap->pixelsInRegion( Point(c, ful.y()), 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   556
					  Point(c, flr.y())))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   557
		  {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   558
		    if (ful.x() != c)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   559
		      shrunk = 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   560
		    ful.x() = c;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   561
		    break;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   562
		  }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   563
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   564
	// now start from the other side
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   565
	for(c = flr.x(); c > ful.x(); c--)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   566
	      if (bitmap->pixelsInRegion( Point(c, ful.y()), 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   567
					  Point(c, flr.y())))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   568
		  {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   569
		    if (flr.x() != c)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   570
		      shrunk = 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   571
		    flr.x() = c;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   572
		    break;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   573
		  }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   574
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   575
		
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   576
  return shrunk;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   577
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   578
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   579
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   580
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   581
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   582
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   583
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   584
void Component::join(Component * comp)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   585
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   586
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   587
  display_bounding_box("white");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   588
  comp->display_bounding_box("white");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   589
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   590
  ful.x() = ((ful.x() < comp->ul().x()) ? ful.x() : comp->ul().x());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   591
  ful.y() = ((ful.y() < comp->ul().y()) ? ful.y() : comp->ul().y());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   592
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   593
  flr.x() = ((flr.x() > comp->lr().x()) ? flr.x() : comp->lr().x());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   594
  flr.y() = ((flr.y() > comp->lr().y()) ? flr.y() : comp->lr().y());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   595
  display_bounding_box("blue");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   596
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   597
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   598
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   599
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   600
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   601
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   602
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   603
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   604
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   605
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   606
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   607