1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
<html xmlns="http://www.w3.org/1999/xhtml">
4
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
<title>tesseract: /usr/local/google/home/jbreiden/tesseract-ocr-read-only/classify/mfoutline.h File Reference</title>
8
<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
<link href="doxygen.css" rel="stylesheet" type="text/css" />
10
<link href="navtree.css" rel="stylesheet" type="text/css"/>
11
<script type="text/javascript" src="jquery.js"></script>
12
<script type="text/javascript" src="resize.js"></script>
13
<script type="text/javascript" src="navtree.js"></script>
14
<script type="text/javascript">
15
$(document).ready(initResizable);
17
<link href="search/search.css" rel="stylesheet" type="text/css"/>
18
<script type="text/javascript" src="search/search.js"></script>
19
<script type="text/javascript">
20
$(document).ready(function() { searchBox.OnSelectItem(0); });
25
<div id="top"><!-- do not remove this div! -->
29
<table cellspacing="0" cellpadding="0">
31
<tr style="height: 56px;">
34
<td style="padding-left: 0.5em;">
35
<div id="projectname">tesseract
36
 <span id="projectnumber">3.03</span>
48
<!-- Generated by Doxygen 1.7.6.1 -->
49
<script type="text/javascript">
50
var searchBox = new SearchBox("searchBox", "search",false,'Search');
52
<div id="navrow1" class="tabs">
54
<li><a href="index.html"><span>Main Page</span></a></li>
55
<li><a href="pages.html"><span>Related Pages</span></a></li>
56
<li><a href="modules.html"><span>Modules</span></a></li>
57
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
58
<li><a href="annotated.html"><span>Classes</span></a></li>
59
<li class="current"><a href="files.html"><span>Files</span></a></li>
61
<div id="MSearchBox" class="MSearchBoxInactive">
63
<img id="MSearchSelect" src="search/mag_sel.png"
64
onmouseover="return searchBox.OnSearchSelectShow()"
65
onmouseout="return searchBox.OnSearchSelectHide()"
67
<input type="text" id="MSearchField" value="Search" accesskey="S"
68
onfocus="searchBox.OnSearchFieldFocus(true)"
69
onblur="searchBox.OnSearchFieldFocus(false)"
70
onkeyup="searchBox.OnSearchFieldChange(event)"/>
71
</span><span class="right">
72
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
78
<div id="navrow2" class="tabs2">
80
<li><a href="files.html"><span>File List</span></a></li>
81
<li><a href="globals.html"><span>File Members</span></a></li>
85
<div id="side-nav" class="ui-resizable side-nav-resizable">
87
<div id="nav-tree-contents">
90
<div id="splitbar" style="-moz-user-select:none;"
91
class="ui-resizable-handle">
94
<script type="text/javascript">
95
initNavTree('a00921.html','');
97
<div id="doc-content">
100
<a href="#nested-classes">Classes</a> |
101
<a href="#define-members">Defines</a> |
102
<a href="#typedef-members">Typedefs</a> |
103
<a href="#enum-members">Enumerations</a> |
104
<a href="#func-members">Functions</a> </div>
105
<div class="headertitle">
106
<div class="title">/usr/local/google/home/jbreiden/tesseract-ocr-read-only/classify/mfoutline.h File Reference</div> </div>
108
<div class="contents">
109
<div class="textblock"><code>#include "<a class="el" href="a00730_source.html">blobs.h</a>"</code><br/>
110
<code>#include "<a class="el" href="a00831_source.html">host.h</a>"</code><br/>
111
<code>#include "<a class="el" href="a01043_source.html">oldlist.h</a>"</code><br/>
112
<code>#include "<a class="el" href="a00897_source.html">fpoint.h</a>"</code><br/>
113
<code>#include "<a class="el" href="a00844_source.html">params.h</a>"</code><br/>
115
<p><a href="a00921_source.html">Go to the source code of this file.</a></p>
116
<table class="memberdecls">
117
<tr><td colspan="2"><h2><a name="nested-classes"></a>
118
Classes</h2></td></tr>
119
<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00466.html">MFEDGEPT</a></td></tr>
120
<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00479.html">OUTLINE_STATS</a></td></tr>
121
<tr><td colspan="2"><h2><a name="define-members"></a>
122
Defines</h2></td></tr>
123
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#ac2f24132ffdd44f1b1ac9f861003ef55">NORMAL_X_HEIGHT</a>   (0.5)</td></tr>
124
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#ac5d2acf8cce6a604ff52887a9be290ed">NORMAL_BASELINE</a>   (0.0)</td></tr>
125
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a3bebacc8131f75b46dc7a107d22fcae2">AverageOf</a>(A, B)   (((A) + (B)) / 2)</td></tr>
126
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a91645597f620e8307a65e8ab35d963b8">MF_SCALE_FACTOR</a>   (<a class="el" href="a00921.html#ac2f24132ffdd44f1b1ac9f861003ef55">NORMAL_X_HEIGHT</a> / <a class="el" href="a00759.html#af974e6755e636c8bc7cbe57e3bcbdd73">kBlnXHeight</a>)</td></tr>
127
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#ac8e258367e719e5a22e83af1c2b33e53">DegenerateOutline</a>(O)   (((O) == <a class="el" href="a01043.html#ae212530ca629c67513698e988c705a5a">NIL_LIST</a>) || ((O) == <a class="el" href="a01043.html#adb120d4c08ce52b5dfe524f0419a9154">list_rest</a>(O)))</td></tr>
128
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#aabb22902a8c1b9a830cb6347a474feea">PointAt</a>(O)   ((<a class="el" href="a00466.html">MFEDGEPT</a> *) <a class="el" href="a01043.html#a69547be764424f18b0be535400747978">first_node</a> (O))</td></tr>
129
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#ad2dfef920e57366bab3231610ab39f4d">NextPointAfter</a>(E)   (<a class="el" href="a01043.html#adb120d4c08ce52b5dfe524f0419a9154">list_rest</a> (E))</td></tr>
130
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a72b744e3e7220468dad3d2c67ef65bbf">MakeOutlineCircular</a>(O)   (<a class="el" href="a01043.html#a42cc2d9c5eabb2193e2e64df41adedf4">set_rest</a> (<a class="el" href="a01043.html#ad9ec1d10cbd07fc3376ef300df603418">last</a> (O), (O)))</td></tr>
131
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a1960e4d5f6a5ee3649830432ab38937b">ClearMark</a>(P)   ((P)->ExtremityMark = FALSE)</td></tr>
132
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#ae5174bb3e6e300b198551b13834c1a62">MarkPoint</a>(P)   ((P)->ExtremityMark = TRUE)</td></tr>
133
<tr><td colspan="2"><h2><a name="typedef-members"></a>
134
Typedefs</h2></td></tr>
135
<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="a01043.html#aa200acf94add0e61783bfcd5965bb645">LIST</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a></td></tr>
136
<tr><td colspan="2"><h2><a name="enum-members"></a>
137
Enumerations</h2></td></tr>
138
<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#aa268a41a13430b18e933ed40207178d0">DIRECTION</a> { <br/>
139
  <a class="el" href="a00921.html#aa268a41a13430b18e933ed40207178d0a257e6b7fcd6ccb860083f20eb9bd660d">north</a>,
140
<a class="el" href="a00921.html#aa268a41a13430b18e933ed40207178d0a035a454a75284b5dc261bd500ab311ed">south</a>,
141
<a class="el" href="a00921.html#aa268a41a13430b18e933ed40207178d0a1be79cd4775c5384e197f1031580b10a">east</a>,
142
<a class="el" href="a00921.html#aa268a41a13430b18e933ed40207178d0a9f771a3f89930d6b7e164e32a951dcb6">west</a>,
144
  <a class="el" href="a00921.html#aa268a41a13430b18e933ed40207178d0ae3b4c14104592166f37bd10677137b23">northeast</a>,
145
<a class="el" href="a00921.html#aa268a41a13430b18e933ed40207178d0a612166623e6f200d052d3d8dc4c075c0">northwest</a>,
146
<a class="el" href="a00921.html#aa268a41a13430b18e933ed40207178d0ae1fe6949267a85f8ffd113c0eb67116a">southeast</a>,
147
<a class="el" href="a00921.html#aa268a41a13430b18e933ed40207178d0a0a8b39b36c98d2346b9a5453838f3aea">southwest</a>
150
<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#abace9421f1a42147c8af40a950bc7203">OUTLINETYPE</a> { <a class="el" href="a00921.html#abace9421f1a42147c8af40a950bc7203a281b97b7e8b9c87a09e7fc5b5fe95da8">outer</a>,
151
<a class="el" href="a00921.html#abace9421f1a42147c8af40a950bc7203a35dab49845fd740fff6be6c2702e49a4">hole</a>
153
<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a2a4b69f9a2827dc98bc4cbc233118865">NORM_METHOD</a> { <a class="el" href="a00921.html#a2a4b69f9a2827dc98bc4cbc233118865a83297de004f4e58b9be2108c6cd08a23">baseline</a>,
154
<a class="el" href="a00921.html#a2a4b69f9a2827dc98bc4cbc233118865afa40ef3af4fea0001b535318130960b2">character</a>
156
<tr><td colspan="2"><h2><a name="func-members"></a>
157
Functions</h2></td></tr>
158
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#ac9f4e1c384c1d17dfa37ebd63096d232">ComputeBlobCenter</a> (<a class="el" href="a00591.html">TBLOB</a> *Blob, <a class="el" href="a00629.html">TPOINT</a> *BlobCenter)</td></tr>
159
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a01043.html#aa200acf94add0e61783bfcd5965bb645">LIST</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a36feb3bd4df38dbd78e7153278a08b10">ConvertBlob</a> (<a class="el" href="a00591.html">TBLOB</a> *Blob)</td></tr>
160
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a55eac211652384977ec812120a44e757">ConvertOutline</a> (<a class="el" href="a00613.html">TESSLINE</a> *Outline)</td></tr>
161
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a01043.html#aa200acf94add0e61783bfcd5965bb645">LIST</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a8e6bfe5c4f9d8f25a36647bc079d7e49">ConvertOutlines</a> (<a class="el" href="a00613.html">TESSLINE</a> *Outline, <a class="el" href="a01043.html#aa200acf94add0e61783bfcd5965bb645">LIST</a> ConvertedOutlines, <a class="el" href="a00921.html#abace9421f1a42147c8af40a950bc7203">OUTLINETYPE</a> OutlineType)</td></tr>
162
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a6a0f0accb0239e9d76cd8ff4ff147350">FilterEdgeNoise</a> (<a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> Outline, <a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> NoiseSegmentLength)</td></tr>
163
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#ac2b870343576dd24d1c4871f5988d556">FindDirectionChanges</a> (<a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> Outline, <a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> MinSlope, <a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> MaxSlope)</td></tr>
164
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a717586ca196e0c54bd0c99792acde58d">FreeMFOutline</a> (void *agr)</td></tr>
165
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a553352ad44661adad2a80a24ac78aeaf">FreeOutlines</a> (<a class="el" href="a01043.html#aa200acf94add0e61783bfcd5965bb645">LIST</a> Outlines)</td></tr>
166
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#afa2531f8656ba496465bc23ff1a2f99c">MarkDirectionChanges</a> (<a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> Outline)</td></tr>
167
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00466.html">MFEDGEPT</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a917b406f8854b822d8cf2eb2480e6684">NewEdgePoint</a> ()</td></tr>
168
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#af520bd5bba313216d0b6fb9e58041266">NextExtremity</a> (<a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> EdgePoint)</td></tr>
169
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a30b1492f0756c31499da0157ecba50ff">NormalizeOutline</a> (<a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> Outline, <a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> XOrigin)</td></tr>
170
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#abd95d6d2be6406aea26fbf0f0bf157ae">ChangeDirection</a> (<a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> Start, <a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> End, <a class="el" href="a00921.html#aa268a41a13430b18e933ed40207178d0">DIRECTION</a> Direction)</td></tr>
171
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#af5936ef194bb508756e2b1b891c31ece">CharNormalizeOutline</a> (<a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> Outline, const <a class="el" href="a00352.html">DENORM</a> &cn_denorm)</td></tr>
172
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a97334eef13fe16a7e0ce178f905d2c39">ComputeDirection</a> (<a class="el" href="a00466.html">MFEDGEPT</a> *Start, <a class="el" href="a00466.html">MFEDGEPT</a> *Finish, <a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> MinSlope, <a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> MaxSlope)</td></tr>
173
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a8983618bd7c7c05ff69355b0aa4185fe">FinishOutlineStats</a> (register <a class="el" href="a00479.html">OUTLINE_STATS</a> *OutlineStats)</td></tr>
174
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#ab1a3167a695b3448b64ee38f6da9a264">InitOutlineStats</a> (<a class="el" href="a00479.html">OUTLINE_STATS</a> *OutlineStats)</td></tr>
175
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a224d838335416038dcb0348f665f5a05">NextDirectionChange</a> (<a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> EdgePoint)</td></tr>
176
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00921.html#a943167d00e171b3cbc68252f32a45196">UpdateOutlineStats</a> (register <a class="el" href="a00479.html">OUTLINE_STATS</a> *OutlineStats, register <a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> x1, register <a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> x2, register <a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> y1, register <a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> y2)</td></tr>
178
<hr/><h2>Define Documentation</h2>
179
<a class="anchor" id="a3bebacc8131f75b46dc7a107d22fcae2"></a><!-- doxytag: member="mfoutline.h::AverageOf" ref="a3bebacc8131f75b46dc7a107d22fcae2" args="(A, B)" -->
180
<div class="memitem">
181
<div class="memproto">
182
<table class="memname">
184
<td class="memname">#define <a class="el" href="a00921.html#a3bebacc8131f75b46dc7a107d22fcae2">AverageOf</a></td>
186
<td class="paramtype"> </td>
187
<td class="paramname">A, </td>
190
<td class="paramkey"></td>
192
<td class="paramtype"> </td>
193
<td class="paramname">B </td>
198
<td></td><td>   (((A) + (B)) / 2)</td>
203
<p>---------------------------------------------------------------------------- Macros ---------------------------------------------------------------------------- </p>
205
<p>Definition at line <a class="el" href="a00921_source.html#l00068">68</a> of file <a class="el" href="a00921_source.html">mfoutline.h</a>.</p>
209
<a class="anchor" id="a1960e4d5f6a5ee3649830432ab38937b"></a><!-- doxytag: member="mfoutline.h::ClearMark" ref="a1960e4d5f6a5ee3649830432ab38937b" args="(P)" -->
210
<div class="memitem">
211
<div class="memproto">
212
<table class="memname">
214
<td class="memname">#define <a class="el" href="a00921.html#a1960e4d5f6a5ee3649830432ab38937b">ClearMark</a></td>
216
<td class="paramtype"> </td>
217
<td class="paramname">P</td><td>)</td>
218
<td>   ((P)->ExtremityMark = FALSE)</td>
224
<p>Definition at line <a class="el" href="a00921_source.html#l00080">80</a> of file <a class="el" href="a00921_source.html">mfoutline.h</a>.</p>
228
<a class="anchor" id="ac8e258367e719e5a22e83af1c2b33e53"></a><!-- doxytag: member="mfoutline.h::DegenerateOutline" ref="ac8e258367e719e5a22e83af1c2b33e53" args="(O)" -->
229
<div class="memitem">
230
<div class="memproto">
231
<table class="memname">
233
<td class="memname">#define <a class="el" href="a00921.html#ac8e258367e719e5a22e83af1c2b33e53">DegenerateOutline</a></td>
235
<td class="paramtype"> </td>
236
<td class="paramname">O</td><td>)</td>
237
<td>   (((O) == <a class="el" href="a01043.html#ae212530ca629c67513698e988c705a5a">NIL_LIST</a>) || ((O) == <a class="el" href="a01043.html#adb120d4c08ce52b5dfe524f0419a9154">list_rest</a>(O)))</td>
243
<p>Definition at line <a class="el" href="a00921_source.html#l00074">74</a> of file <a class="el" href="a00921_source.html">mfoutline.h</a>.</p>
247
<a class="anchor" id="a72b744e3e7220468dad3d2c67ef65bbf"></a><!-- doxytag: member="mfoutline.h::MakeOutlineCircular" ref="a72b744e3e7220468dad3d2c67ef65bbf" args="(O)" -->
248
<div class="memitem">
249
<div class="memproto">
250
<table class="memname">
252
<td class="memname">#define <a class="el" href="a00921.html#a72b744e3e7220468dad3d2c67ef65bbf">MakeOutlineCircular</a></td>
254
<td class="paramtype"> </td>
255
<td class="paramname">O</td><td>)</td>
256
<td>   (<a class="el" href="a01043.html#a42cc2d9c5eabb2193e2e64df41adedf4">set_rest</a> (<a class="el" href="a01043.html#ad9ec1d10cbd07fc3376ef300df603418">last</a> (O), (O)))</td>
262
<p>Definition at line <a class="el" href="a00921_source.html#l00077">77</a> of file <a class="el" href="a00921_source.html">mfoutline.h</a>.</p>
266
<a class="anchor" id="ae5174bb3e6e300b198551b13834c1a62"></a><!-- doxytag: member="mfoutline.h::MarkPoint" ref="ae5174bb3e6e300b198551b13834c1a62" args="(P)" -->
267
<div class="memitem">
268
<div class="memproto">
269
<table class="memname">
271
<td class="memname">#define <a class="el" href="a00921.html#ae5174bb3e6e300b198551b13834c1a62">MarkPoint</a></td>
273
<td class="paramtype"> </td>
274
<td class="paramname">P</td><td>)</td>
275
<td>   ((P)->ExtremityMark = TRUE)</td>
281
<p>Definition at line <a class="el" href="a00921_source.html#l00081">81</a> of file <a class="el" href="a00921_source.html">mfoutline.h</a>.</p>
285
<a class="anchor" id="a91645597f620e8307a65e8ab35d963b8"></a><!-- doxytag: member="mfoutline.h::MF_SCALE_FACTOR" ref="a91645597f620e8307a65e8ab35d963b8" args="" -->
286
<div class="memitem">
287
<div class="memproto">
288
<table class="memname">
290
<td class="memname">#define <a class="el" href="a00921.html#a91645597f620e8307a65e8ab35d963b8">MF_SCALE_FACTOR</a>   (<a class="el" href="a00921.html#ac2f24132ffdd44f1b1ac9f861003ef55">NORMAL_X_HEIGHT</a> / <a class="el" href="a00759.html#af974e6755e636c8bc7cbe57e3bcbdd73">kBlnXHeight</a>)</td>
296
<p>Definition at line <a class="el" href="a00921_source.html#l00071">71</a> of file <a class="el" href="a00921_source.html">mfoutline.h</a>.</p>
300
<a class="anchor" id="ad2dfef920e57366bab3231610ab39f4d"></a><!-- doxytag: member="mfoutline.h::NextPointAfter" ref="ad2dfef920e57366bab3231610ab39f4d" args="(E)" -->
301
<div class="memitem">
302
<div class="memproto">
303
<table class="memname">
305
<td class="memname">#define <a class="el" href="a00921.html#ad2dfef920e57366bab3231610ab39f4d">NextPointAfter</a></td>
307
<td class="paramtype"> </td>
308
<td class="paramname">E</td><td>)</td>
309
<td>   (<a class="el" href="a01043.html#adb120d4c08ce52b5dfe524f0419a9154">list_rest</a> (E))</td>
315
<p>Definition at line <a class="el" href="a00921_source.html#l00076">76</a> of file <a class="el" href="a00921_source.html">mfoutline.h</a>.</p>
319
<a class="anchor" id="ac5d2acf8cce6a604ff52887a9be290ed"></a><!-- doxytag: member="mfoutline.h::NORMAL_BASELINE" ref="ac5d2acf8cce6a604ff52887a9be290ed" args="" -->
320
<div class="memitem">
321
<div class="memproto">
322
<table class="memname">
324
<td class="memname">#define <a class="el" href="a00921.html#ac5d2acf8cce6a604ff52887a9be290ed">NORMAL_BASELINE</a>   (0.0)</td>
330
<p>Definition at line <a class="el" href="a00921_source.html#l00031">31</a> of file <a class="el" href="a00921_source.html">mfoutline.h</a>.</p>
334
<a class="anchor" id="ac2f24132ffdd44f1b1ac9f861003ef55"></a><!-- doxytag: member="mfoutline.h::NORMAL_X_HEIGHT" ref="ac2f24132ffdd44f1b1ac9f861003ef55" args="" -->
335
<div class="memitem">
336
<div class="memproto">
337
<table class="memname">
339
<td class="memname">#define <a class="el" href="a00921.html#ac2f24132ffdd44f1b1ac9f861003ef55">NORMAL_X_HEIGHT</a>   (0.5)</td>
344
<p>---------------------------------------------------------------------------- Include Files and Type Defines ---------------------------------------------------------------------------- </p>
346
<p>Definition at line <a class="el" href="a00921_source.html#l00030">30</a> of file <a class="el" href="a00921_source.html">mfoutline.h</a>.</p>
350
<a class="anchor" id="aabb22902a8c1b9a830cb6347a474feea"></a><!-- doxytag: member="mfoutline.h::PointAt" ref="aabb22902a8c1b9a830cb6347a474feea" args="(O)" -->
351
<div class="memitem">
352
<div class="memproto">
353
<table class="memname">
355
<td class="memname">#define <a class="el" href="a00921.html#aabb22902a8c1b9a830cb6347a474feea">PointAt</a></td>
357
<td class="paramtype"> </td>
358
<td class="paramname">O</td><td>)</td>
359
<td>   ((<a class="el" href="a00466.html">MFEDGEPT</a> *) <a class="el" href="a01043.html#a69547be764424f18b0be535400747978">first_node</a> (O))</td>
365
<p>Definition at line <a class="el" href="a00921_source.html#l00075">75</a> of file <a class="el" href="a00921_source.html">mfoutline.h</a>.</p>
369
<hr/><h2>Typedef Documentation</h2>
370
<a class="anchor" id="a7ccab0cdf14413921e017ad0af14e1de"></a><!-- doxytag: member="mfoutline.h::MFOUTLINE" ref="a7ccab0cdf14413921e017ad0af14e1de" args="" -->
371
<div class="memitem">
372
<div class="memproto">
373
<table class="memname">
375
<td class="memname">typedef <a class="el" href="a01043.html#aa200acf94add0e61783bfcd5965bb645">LIST</a> <a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a></td>
381
<p>Definition at line <a class="el" href="a00921_source.html#l00033">33</a> of file <a class="el" href="a00921_source.html">mfoutline.h</a>.</p>
385
<hr/><h2>Enumeration Type Documentation</h2>
386
<a class="anchor" id="aa268a41a13430b18e933ed40207178d0"></a><!-- doxytag: member="mfoutline.h::DIRECTION" ref="aa268a41a13430b18e933ed40207178d0" args="" -->
387
<div class="memitem">
388
<div class="memproto">
389
<table class="memname">
391
<td class="memname">enum <a class="el" href="a00921.html#aa268a41a13430b18e933ed40207178d0">DIRECTION</a></td>
396
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
397
<tr><td valign="top"><em><a class="anchor" id="aa268a41a13430b18e933ed40207178d0a257e6b7fcd6ccb860083f20eb9bd660d"></a><!-- doxytag: member="north" ref="aa268a41a13430b18e933ed40207178d0a257e6b7fcd6ccb860083f20eb9bd660d" args="" -->north</em> </td><td>
399
<tr><td valign="top"><em><a class="anchor" id="aa268a41a13430b18e933ed40207178d0a035a454a75284b5dc261bd500ab311ed"></a><!-- doxytag: member="south" ref="aa268a41a13430b18e933ed40207178d0a035a454a75284b5dc261bd500ab311ed" args="" -->south</em> </td><td>
401
<tr><td valign="top"><em><a class="anchor" id="aa268a41a13430b18e933ed40207178d0a1be79cd4775c5384e197f1031580b10a"></a><!-- doxytag: member="east" ref="aa268a41a13430b18e933ed40207178d0a1be79cd4775c5384e197f1031580b10a" args="" -->east</em> </td><td>
403
<tr><td valign="top"><em><a class="anchor" id="aa268a41a13430b18e933ed40207178d0a9f771a3f89930d6b7e164e32a951dcb6"></a><!-- doxytag: member="west" ref="aa268a41a13430b18e933ed40207178d0a9f771a3f89930d6b7e164e32a951dcb6" args="" -->west</em> </td><td>
405
<tr><td valign="top"><em><a class="anchor" id="aa268a41a13430b18e933ed40207178d0ae3b4c14104592166f37bd10677137b23"></a><!-- doxytag: member="northeast" ref="aa268a41a13430b18e933ed40207178d0ae3b4c14104592166f37bd10677137b23" args="" -->northeast</em> </td><td>
407
<tr><td valign="top"><em><a class="anchor" id="aa268a41a13430b18e933ed40207178d0a612166623e6f200d052d3d8dc4c075c0"></a><!-- doxytag: member="northwest" ref="aa268a41a13430b18e933ed40207178d0a612166623e6f200d052d3d8dc4c075c0" args="" -->northwest</em> </td><td>
409
<tr><td valign="top"><em><a class="anchor" id="aa268a41a13430b18e933ed40207178d0ae1fe6949267a85f8ffd113c0eb67116a"></a><!-- doxytag: member="southeast" ref="aa268a41a13430b18e933ed40207178d0ae1fe6949267a85f8ffd113c0eb67116a" args="" -->southeast</em> </td><td>
411
<tr><td valign="top"><em><a class="anchor" id="aa268a41a13430b18e933ed40207178d0a0a8b39b36c98d2346b9a5453838f3aea"></a><!-- doxytag: member="southwest" ref="aa268a41a13430b18e933ed40207178d0a0a8b39b36c98d2346b9a5453838f3aea" args="" -->southwest</em> </td><td>
417
<p>Definition at line <a class="el" href="a00921_source.html#l00035">35</a> of file <a class="el" href="a00921_source.html">mfoutline.h</a>.</p>
418
<div class="fragment"><pre class="fragment"> {
419
<a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a257e6b7fcd6ccb860083f20eb9bd660d">north</a>, <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a035a454a75284b5dc261bd500ab311ed">south</a>, <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a1be79cd4775c5384e197f1031580b10a">east</a>, <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a9f771a3f89930d6b7e164e32a951dcb6">west</a>, <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0ae3b4c14104592166f37bd10677137b23">northeast</a>, <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a612166623e6f200d052d3d8dc4c075c0">northwest</a>, <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0ae1fe6949267a85f8ffd113c0eb67116a">southeast</a>, <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a0a8b39b36c98d2346b9a5453838f3aea">southwest</a>
420
} <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0">DIRECTION</a>;
424
<a class="anchor" id="a2a4b69f9a2827dc98bc4cbc233118865"></a><!-- doxytag: member="mfoutline.h::NORM_METHOD" ref="a2a4b69f9a2827dc98bc4cbc233118865" args="" -->
425
<div class="memitem">
426
<div class="memproto">
427
<table class="memname">
429
<td class="memname">enum <a class="el" href="a00921.html#a2a4b69f9a2827dc98bc4cbc233118865">NORM_METHOD</a></td>
434
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
435
<tr><td valign="top"><em><a class="anchor" id="a2a4b69f9a2827dc98bc4cbc233118865a83297de004f4e58b9be2108c6cd08a23"></a><!-- doxytag: member="baseline" ref="a2a4b69f9a2827dc98bc4cbc233118865a83297de004f4e58b9be2108c6cd08a23" args="" -->baseline</em> </td><td>
437
<tr><td valign="top"><em><a class="anchor" id="a2a4b69f9a2827dc98bc4cbc233118865afa40ef3af4fea0001b535318130960b2"></a><!-- doxytag: member="character" ref="a2a4b69f9a2827dc98bc4cbc233118865afa40ef3af4fea0001b535318130960b2" args="" -->character</em> </td><td>
443
<p>Definition at line <a class="el" href="a00921_source.html#l00061">61</a> of file <a class="el" href="a00921_source.html">mfoutline.h</a>.</p>
444
<div class="fragment"><pre class="fragment"> {
445
<a class="code" href="a00921.html#a2a4b69f9a2827dc98bc4cbc233118865a83297de004f4e58b9be2108c6cd08a23">baseline</a>, <a class="code" href="a00921.html#a2a4b69f9a2827dc98bc4cbc233118865afa40ef3af4fea0001b535318130960b2">character</a>
446
} <a class="code" href="a00921.html#a2a4b69f9a2827dc98bc4cbc233118865">NORM_METHOD</a>;
450
<a class="anchor" id="abace9421f1a42147c8af40a950bc7203"></a><!-- doxytag: member="mfoutline.h::OUTLINETYPE" ref="abace9421f1a42147c8af40a950bc7203" args="" -->
451
<div class="memitem">
452
<div class="memproto">
453
<table class="memname">
455
<td class="memname">enum <a class="el" href="a00921.html#abace9421f1a42147c8af40a950bc7203">OUTLINETYPE</a></td>
460
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
461
<tr><td valign="top"><em><a class="anchor" id="abace9421f1a42147c8af40a950bc7203a281b97b7e8b9c87a09e7fc5b5fe95da8"></a><!-- doxytag: member="outer" ref="abace9421f1a42147c8af40a950bc7203a281b97b7e8b9c87a09e7fc5b5fe95da8" args="" -->outer</em> </td><td>
463
<tr><td valign="top"><em><a class="anchor" id="abace9421f1a42147c8af40a950bc7203a35dab49845fd740fff6be6c2702e49a4"></a><!-- doxytag: member="hole" ref="abace9421f1a42147c8af40a950bc7203a35dab49845fd740fff6be6c2702e49a4" args="" -->hole</em> </td><td>
469
<p>Definition at line <a class="el" href="a00921_source.html#l00049">49</a> of file <a class="el" href="a00921_source.html">mfoutline.h</a>.</p>
470
<div class="fragment"><pre class="fragment"> {
471
<a class="code" href="a00921.html#abace9421f1a42147c8af40a950bc7203a281b97b7e8b9c87a09e7fc5b5fe95da8">outer</a>, <a class="code" href="a00921.html#abace9421f1a42147c8af40a950bc7203a35dab49845fd740fff6be6c2702e49a4">hole</a>
472
} <a class="code" href="a00921.html#abace9421f1a42147c8af40a950bc7203">OUTLINETYPE</a>;
476
<hr/><h2>Function Documentation</h2>
477
<a class="anchor" id="abd95d6d2be6406aea26fbf0f0bf157ae"></a><!-- doxytag: member="mfoutline.h::ChangeDirection" ref="abd95d6d2be6406aea26fbf0f0bf157ae" args="(MFOUTLINE Start, MFOUTLINE End, DIRECTION Direction)" -->
478
<div class="memitem">
479
<div class="memproto">
480
<table class="memname">
482
<td class="memname">void <a class="el" href="a00921.html#abd95d6d2be6406aea26fbf0f0bf157ae">ChangeDirection</a> </td>
484
<td class="paramtype"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> </td>
485
<td class="paramname"><em>Start</em>, </td>
488
<td class="paramkey"></td>
490
<td class="paramtype"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> </td>
491
<td class="paramname"><em>End</em>, </td>
494
<td class="paramkey"></td>
496
<td class="paramtype"><a class="el" href="a00921.html#aa268a41a13430b18e933ed40207178d0">DIRECTION</a> </td>
497
<td class="paramname"><em>Direction</em> </td>
507
<p>---------------------------------------------------------------------------- Private Code ---------------------------------------------------------------------------- </p>
509
<p>Definition at line <a class="el" href="a00920_source.html#l00340">340</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
510
<div class="fragment"><pre class="fragment"> {
511
<span class="comment">/*</span>
512
<span class="comment"> ** Parameters:</span>
513
<span class="comment"> ** Start, End defines segment of outline to be modified</span>
514
<span class="comment"> ** Direction new direction to assign to segment</span>
515
<span class="comment"> ** Globals: none</span>
516
<span class="comment"> ** Operation: Change the direction of every vector in the specified</span>
517
<span class="comment"> ** outline segment to Direction. The segment to be changed</span>
518
<span class="comment"> ** starts at Start and ends at End. Note that the previous</span>
519
<span class="comment"> ** direction of End must also be changed to reflect the</span>
520
<span class="comment"> ** change in direction of the point before it.</span>
521
<span class="comment"> ** Return: none</span>
522
<span class="comment"> ** Exceptions: none</span>
523
<span class="comment"> ** History: Fri May 4 10:42:04 1990, DSJ, Created.</span>
524
<span class="comment"> */</span>
525
<a class="code" href="a00453.html">MFOUTLINE</a> Current;
527
<span class="keywordflow">for</span> (Current = Start; Current != End; Current = <a class="code" href="a00921.html#ad2dfef920e57366bab3231610ab39f4d">NextPointAfter</a> (Current))
528
<a class="code" href="a00921.html#aabb22902a8c1b9a830cb6347a474feea">PointAt</a> (Current)->Direction = Direction;
530
<a class="code" href="a00921.html#aabb22902a8c1b9a830cb6347a474feea">PointAt</a> (End)->PreviousDirection = Direction;
532
} <span class="comment">/* ChangeDirection */</span>
536
<a class="anchor" id="af5936ef194bb508756e2b1b891c31ece"></a><!-- doxytag: member="mfoutline.h::CharNormalizeOutline" ref="af5936ef194bb508756e2b1b891c31ece" args="(MFOUTLINE Outline, const DENORM &cn_denorm)" -->
537
<div class="memitem">
538
<div class="memproto">
539
<table class="memname">
541
<td class="memname">void <a class="el" href="a00921.html#af5936ef194bb508756e2b1b891c31ece">CharNormalizeOutline</a> </td>
543
<td class="paramtype"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> </td>
544
<td class="paramname"><em>Outline</em>, </td>
547
<td class="paramkey"></td>
549
<td class="paramtype">const <a class="el" href="a00352.html">DENORM</a> & </td>
550
<td class="paramname"><em>cn_denorm</em> </td>
561
<p>Definition at line <a class="el" href="a00920_source.html#l00366">366</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
562
<div class="fragment"><pre class="fragment"> {
563
<span class="comment">/*</span>
564
<span class="comment"> ** Parameters:</span>
565
<span class="comment"> ** Outline outline to be character normalized</span>
566
<span class="comment"> ** XCenter, YCenter center point for normalization</span>
567
<span class="comment"> ** XScale, YScale scale factors for normalization</span>
568
<span class="comment"> ** Globals: none</span>
569
<span class="comment"> ** Operation: This routine normalizes each point in Outline by</span>
570
<span class="comment"> ** translating it to the specified center and scaling it</span>
571
<span class="comment"> ** anisotropically according to the given scale factors.</span>
572
<span class="comment"> ** Return: none</span>
573
<span class="comment"> ** Exceptions: none</span>
574
<span class="comment"> ** History: Fri Dec 14 10:27:11 1990, DSJ, Created.</span>
575
<span class="comment"> */</span>
576
<a class="code" href="a00453.html">MFOUTLINE</a> First, Current;
577
<a class="code" href="a00466.html">MFEDGEPT</a> *CurrentPoint;
579
<span class="keywordflow">if</span> (Outline == <a class="code" href="a01043.html#ae212530ca629c67513698e988c705a5a">NIL_LIST</a>)
580
<span class="keywordflow">return</span>;
584
<span class="keywordflow">do</span> {
585
CurrentPoint = <a class="code" href="a00921.html#aabb22902a8c1b9a830cb6347a474feea">PointAt</a>(Current);
586
<a class="code" href="a00375.html">FCOORD</a> pos(CurrentPoint-><a class="code" href="a00466.html#a2b633b56b9a1a71a23551e387b7c8af4">Point</a>.<a class="code" href="a00396.html#a96c1f94ff16244b06cb59b79152dc8ae">x</a>, CurrentPoint-><a class="code" href="a00466.html#a2b633b56b9a1a71a23551e387b7c8af4">Point</a>.<a class="code" href="a00396.html#a119bd5a9f0b29cabb3987fd94c5d4ca8">y</a>);
587
cn_denorm.<a class="code" href="a00352.html#a379321502d4634137436539518311b9d">LocalNormTransform</a>(pos, &pos);
588
CurrentPoint-><a class="code" href="a00466.html#a2b633b56b9a1a71a23551e387b7c8af4">Point</a>.<a class="code" href="a00396.html#a96c1f94ff16244b06cb59b79152dc8ae">x</a> = (pos.x() - <a class="code" href="a00831.html#a05682ca8de174141447ff05a2289a27c">MAX_UINT8</a> / 2) * <a class="code" href="a00921.html#a91645597f620e8307a65e8ab35d963b8">MF_SCALE_FACTOR</a>;
589
CurrentPoint-><a class="code" href="a00466.html#a2b633b56b9a1a71a23551e387b7c8af4">Point</a>.<a class="code" href="a00396.html#a119bd5a9f0b29cabb3987fd94c5d4ca8">y</a> = (pos.y() - <a class="code" href="a00831.html#a05682ca8de174141447ff05a2289a27c">MAX_UINT8</a> / 2) * <a class="code" href="a00921.html#a91645597f620e8307a65e8ab35d963b8">MF_SCALE_FACTOR</a>;
591
Current = <a class="code" href="a00921.html#ad2dfef920e57366bab3231610ab39f4d">NextPointAfter</a>(Current);
593
<span class="keywordflow">while</span> (Current != First);
595
} <span class="comment">/* CharNormalizeOutline */</span>
599
<a class="anchor" id="ac9f4e1c384c1d17dfa37ebd63096d232"></a><!-- doxytag: member="mfoutline.h::ComputeBlobCenter" ref="ac9f4e1c384c1d17dfa37ebd63096d232" args="(TBLOB *Blob, TPOINT *BlobCenter)" -->
600
<div class="memitem">
601
<div class="memproto">
602
<table class="memname">
604
<td class="memname">void <a class="el" href="a00921.html#ac9f4e1c384c1d17dfa37ebd63096d232">ComputeBlobCenter</a> </td>
606
<td class="paramtype"><a class="el" href="a00591.html">TBLOB</a> * </td>
607
<td class="paramname"><em>Blob</em>, </td>
610
<td class="paramkey"></td>
612
<td class="paramtype"><a class="el" href="a00629.html">TPOINT</a> * </td>
613
<td class="paramname"><em>BlobCenter</em> </td>
623
<p>---------------------------------------------------------------------------- Public Function Prototypes ---------------------------------------------------------------------------- </p>
627
<a class="anchor" id="a97334eef13fe16a7e0ce178f905d2c39"></a><!-- doxytag: member="mfoutline.h::ComputeDirection" ref="a97334eef13fe16a7e0ce178f905d2c39" args="(MFEDGEPT *Start, MFEDGEPT *Finish, FLOAT32 MinSlope, FLOAT32 MaxSlope)" -->
628
<div class="memitem">
629
<div class="memproto">
630
<table class="memname">
632
<td class="memname">void <a class="el" href="a00921.html#a97334eef13fe16a7e0ce178f905d2c39">ComputeDirection</a> </td>
634
<td class="paramtype"><a class="el" href="a00466.html">MFEDGEPT</a> * </td>
635
<td class="paramname"><em>Start</em>, </td>
638
<td class="paramkey"></td>
640
<td class="paramtype"><a class="el" href="a00466.html">MFEDGEPT</a> * </td>
641
<td class="paramname"><em>Finish</em>, </td>
644
<td class="paramkey"></td>
646
<td class="paramtype"><a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> </td>
647
<td class="paramname"><em>MinSlope</em>, </td>
650
<td class="paramkey"></td>
652
<td class="paramtype"><a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> </td>
653
<td class="paramname"><em>MaxSlope</em> </td>
664
<p>Definition at line <a class="el" href="a00920_source.html#l00403">403</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
665
<div class="fragment"><pre class="fragment"> {
666
<span class="comment">/*</span>
667
<span class="comment"> ** Parameters:</span>
668
<span class="comment"> ** Start starting point to compute direction from</span>
669
<span class="comment"> ** Finish finishing point to compute direction to</span>
670
<span class="comment"> ** MinSlope slope below which lines are horizontal</span>
671
<span class="comment"> ** MaxSlope slope above which lines are vertical</span>
672
<span class="comment"> ** Globals: none</span>
673
<span class="comment"> ** Operation:</span>
674
<span class="comment"> ** This routine computes the slope from Start to Finish and</span>
675
<span class="comment"> ** and then computes the approximate direction of the line</span>
676
<span class="comment"> ** segment from Start to Finish. The direction is quantized</span>
677
<span class="comment"> ** into 8 buckets:</span>
678
<span class="comment"> ** N, S, E, W, NE, NW, SE, SW</span>
679
<span class="comment"> ** Both the slope and the direction are then stored into</span>
680
<span class="comment"> ** the appropriate fields of the Start edge point. The</span>
681
<span class="comment"> ** direction is also stored into the PreviousDirection field</span>
682
<span class="comment"> ** of the Finish edge point.</span>
683
<span class="comment"> ** Return: none</span>
684
<span class="comment"> ** Exceptions: none</span>
685
<span class="comment"> ** History: 7/25/89, DSJ, Created.</span>
686
<span class="comment"> */</span>
687
<a class="code" href="a00396.html">FVECTOR</a> Delta;
689
Delta.<a class="code" href="a00396.html#a96c1f94ff16244b06cb59b79152dc8ae">x</a> = Finish-><a class="code" href="a00466.html#a2b633b56b9a1a71a23551e387b7c8af4">Point</a>.<a class="code" href="a00396.html#a96c1f94ff16244b06cb59b79152dc8ae">x</a> - Start-><a class="code" href="a00466.html#a2b633b56b9a1a71a23551e387b7c8af4">Point</a>.<a class="code" href="a00396.html#a96c1f94ff16244b06cb59b79152dc8ae">x</a>;
690
Delta.<a class="code" href="a00396.html#a119bd5a9f0b29cabb3987fd94c5d4ca8">y</a> = Finish-><a class="code" href="a00466.html#a2b633b56b9a1a71a23551e387b7c8af4">Point</a>.<a class="code" href="a00396.html#a119bd5a9f0b29cabb3987fd94c5d4ca8">y</a> - Start-><a class="code" href="a00466.html#a2b633b56b9a1a71a23551e387b7c8af4">Point</a>.<a class="code" href="a00396.html#a119bd5a9f0b29cabb3987fd94c5d4ca8">y</a>;
691
<span class="keywordflow">if</span> (Delta.<a class="code" href="a00396.html#a96c1f94ff16244b06cb59b79152dc8ae">x</a> == 0)
692
<span class="keywordflow">if</span> (Delta.<a class="code" href="a00396.html#a119bd5a9f0b29cabb3987fd94c5d4ca8">y</a> < 0) {
693
Start-><a class="code" href="a00466.html#a75770cf1960863e6937f2ca578ede6ef">Slope</a> = -<a class="code" href="a00831.html#a9adcee815220ec9db98062213806ed04">MAX_FLOAT32</a>;
694
Start-><a class="code" href="a00466.html#a2b987163e368c4d0a3c4d027b5619665">Direction</a> = <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a035a454a75284b5dc261bd500ab311ed">south</a>;
696
<span class="keywordflow">else</span> {
697
Start-><a class="code" href="a00466.html#a75770cf1960863e6937f2ca578ede6ef">Slope</a> = <a class="code" href="a00831.html#a9adcee815220ec9db98062213806ed04">MAX_FLOAT32</a>;
698
Start-><a class="code" href="a00466.html#a2b987163e368c4d0a3c4d027b5619665">Direction</a> = <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a257e6b7fcd6ccb860083f20eb9bd660d">north</a>;
700
<span class="keywordflow">else</span> {
701
Start-><a class="code" href="a00466.html#a75770cf1960863e6937f2ca578ede6ef">Slope</a> = Delta.<a class="code" href="a00396.html#a119bd5a9f0b29cabb3987fd94c5d4ca8">y</a> / Delta.<a class="code" href="a00396.html#a96c1f94ff16244b06cb59b79152dc8ae">x</a>;
702
<span class="keywordflow">if</span> (Delta.<a class="code" href="a00396.html#a96c1f94ff16244b06cb59b79152dc8ae">x</a> > 0)
703
<span class="keywordflow">if</span> (Delta.<a class="code" href="a00396.html#a119bd5a9f0b29cabb3987fd94c5d4ca8">y</a> > 0)
704
<span class="keywordflow">if</span> (Start-><a class="code" href="a00466.html#a75770cf1960863e6937f2ca578ede6ef">Slope</a> > MinSlope)
705
<span class="keywordflow">if</span> (Start-><a class="code" href="a00466.html#a75770cf1960863e6937f2ca578ede6ef">Slope</a> < MaxSlope)
706
Start-><a class="code" href="a00466.html#a2b987163e368c4d0a3c4d027b5619665">Direction</a> = <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0ae3b4c14104592166f37bd10677137b23">northeast</a>;
707
<span class="keywordflow">else</span>
708
Start-><a class="code" href="a00466.html#a2b987163e368c4d0a3c4d027b5619665">Direction</a> = <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a257e6b7fcd6ccb860083f20eb9bd660d">north</a>;
709
<span class="keywordflow">else</span>
710
Start-><a class="code" href="a00466.html#a2b987163e368c4d0a3c4d027b5619665">Direction</a> = <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a1be79cd4775c5384e197f1031580b10a">east</a>;
711
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (Start-><a class="code" href="a00466.html#a75770cf1960863e6937f2ca578ede6ef">Slope</a> < -MinSlope)
712
<span class="keywordflow">if</span> (Start-><a class="code" href="a00466.html#a75770cf1960863e6937f2ca578ede6ef">Slope</a> > -MaxSlope)
713
Start-><a class="code" href="a00466.html#a2b987163e368c4d0a3c4d027b5619665">Direction</a> = <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0ae1fe6949267a85f8ffd113c0eb67116a">southeast</a>;
714
<span class="keywordflow">else</span>
715
Start-><a class="code" href="a00466.html#a2b987163e368c4d0a3c4d027b5619665">Direction</a> = <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a035a454a75284b5dc261bd500ab311ed">south</a>;
716
<span class="keywordflow">else</span>
717
Start-><a class="code" href="a00466.html#a2b987163e368c4d0a3c4d027b5619665">Direction</a> = <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a1be79cd4775c5384e197f1031580b10a">east</a>;
718
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (Delta.<a class="code" href="a00396.html#a119bd5a9f0b29cabb3987fd94c5d4ca8">y</a> > 0)
719
<span class="keywordflow">if</span> (Start-><a class="code" href="a00466.html#a75770cf1960863e6937f2ca578ede6ef">Slope</a> < -MinSlope)
720
<span class="keywordflow">if</span> (Start-><a class="code" href="a00466.html#a75770cf1960863e6937f2ca578ede6ef">Slope</a> > -MaxSlope)
721
Start-><a class="code" href="a00466.html#a2b987163e368c4d0a3c4d027b5619665">Direction</a> = <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a612166623e6f200d052d3d8dc4c075c0">northwest</a>;
722
<span class="keywordflow">else</span>
723
Start-><a class="code" href="a00466.html#a2b987163e368c4d0a3c4d027b5619665">Direction</a> = <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a257e6b7fcd6ccb860083f20eb9bd660d">north</a>;
724
<span class="keywordflow">else</span>
725
Start-><a class="code" href="a00466.html#a2b987163e368c4d0a3c4d027b5619665">Direction</a> = <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a9f771a3f89930d6b7e164e32a951dcb6">west</a>;
726
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (Start-><a class="code" href="a00466.html#a75770cf1960863e6937f2ca578ede6ef">Slope</a> > MinSlope)
727
<span class="keywordflow">if</span> (Start-><a class="code" href="a00466.html#a75770cf1960863e6937f2ca578ede6ef">Slope</a> < MaxSlope)
728
Start-><a class="code" href="a00466.html#a2b987163e368c4d0a3c4d027b5619665">Direction</a> = <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a0a8b39b36c98d2346b9a5453838f3aea">southwest</a>;
729
<span class="keywordflow">else</span>
730
Start-><a class="code" href="a00466.html#a2b987163e368c4d0a3c4d027b5619665">Direction</a> = <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a035a454a75284b5dc261bd500ab311ed">south</a>;
731
<span class="keywordflow">else</span>
732
Start-><a class="code" href="a00466.html#a2b987163e368c4d0a3c4d027b5619665">Direction</a> = <a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0a9f771a3f89930d6b7e164e32a951dcb6">west</a>;
734
Finish-><a class="code" href="a00466.html#a47d3c4465ab5bb663d77c507cfebc18a">PreviousDirection</a> = Start-><a class="code" href="a00466.html#a2b987163e368c4d0a3c4d027b5619665">Direction</a>;
735
} <span class="comment">/* ComputeDirection */</span>
739
<a class="anchor" id="a36feb3bd4df38dbd78e7153278a08b10"></a><!-- doxytag: member="mfoutline.h::ConvertBlob" ref="a36feb3bd4df38dbd78e7153278a08b10" args="(TBLOB *Blob)" -->
740
<div class="memitem">
741
<div class="memproto">
742
<table class="memname">
744
<td class="memname"><a class="el" href="a01043.html#aa200acf94add0e61783bfcd5965bb645">LIST</a> <a class="el" href="a00921.html#a36feb3bd4df38dbd78e7153278a08b10">ConvertBlob</a> </td>
746
<td class="paramtype"><a class="el" href="a00591.html">TBLOB</a> * </td>
747
<td class="paramname"><em>Blob</em></td><td>)</td>
754
<p>Definition at line <a class="el" href="a00920_source.html#l00041">41</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
755
<div class="fragment"><pre class="fragment"> {
756
<a class="code" href="a00453.html">LIST</a> outlines = <a class="code" href="a01043.html#ae212530ca629c67513698e988c705a5a">NIL_LIST</a>;
757
<span class="keywordflow">return</span> (blob == NULL)
758
? <a class="code" href="a01043.html#ae212530ca629c67513698e988c705a5a">NIL_LIST</a>
759
: <a class="code" href="a00920.html#a4d507cbf8bfa947b364ed74f5cb160cd">ConvertOutlines</a>(blob->outlines, outlines, <a class="code" href="a00921.html#abace9421f1a42147c8af40a950bc7203a281b97b7e8b9c87a09e7fc5b5fe95da8">outer</a>);
764
<a class="anchor" id="a55eac211652384977ec812120a44e757"></a><!-- doxytag: member="mfoutline.h::ConvertOutline" ref="a55eac211652384977ec812120a44e757" args="(TESSLINE *Outline)" -->
765
<div class="memitem">
766
<div class="memproto">
767
<table class="memname">
769
<td class="memname"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> <a class="el" href="a00921.html#a55eac211652384977ec812120a44e757">ConvertOutline</a> </td>
771
<td class="paramtype"><a class="el" href="a00613.html">TESSLINE</a> * </td>
772
<td class="paramname"><em>Outline</em></td><td>)</td>
779
<p>Definition at line <a class="el" href="a00920_source.html#l00051">51</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
780
<div class="fragment"><pre class="fragment"> {
781
<a class="code" href="a00466.html">MFEDGEPT</a> *NewPoint;
782
<a class="code" href="a00453.html">MFOUTLINE</a> MFOutline = <a class="code" href="a01043.html#ae212530ca629c67513698e988c705a5a">NIL_LIST</a>;
783
<a class="code" href="a00362.html">EDGEPT</a> *EdgePoint;
784
<a class="code" href="a00362.html">EDGEPT</a> *StartPoint;
785
<a class="code" href="a00362.html">EDGEPT</a> *NextPoint;
787
<span class="keywordflow">if</span> (outline == NULL || outline->loop == NULL)
788
<span class="keywordflow">return</span> MFOutline;
790
StartPoint = outline->loop;
791
EdgePoint = StartPoint;
792
<span class="keywordflow">do</span> {
793
NextPoint = EdgePoint-><a class="code" href="a00362.html#a196f7786194752f89e364a586d24884d">next</a>;
795
<span class="comment">/* filter out duplicate points */</span>
796
<span class="keywordflow">if</span> (EdgePoint-><a class="code" href="a00362.html#adee462d390e637a8393ba373c8d2a1bb">pos</a>.<a class="code" href="a00629.html#aa9c98655c3a2a0437821e5a3d3418b0f">x</a> != NextPoint-><a class="code" href="a00362.html#adee462d390e637a8393ba373c8d2a1bb">pos</a>.<a class="code" href="a00629.html#aa9c98655c3a2a0437821e5a3d3418b0f">x</a> ||
797
EdgePoint-><a class="code" href="a00362.html#adee462d390e637a8393ba373c8d2a1bb">pos</a>.<a class="code" href="a00629.html#a6d62f015b74612e43975e439a096039c">y</a> != NextPoint-><a class="code" href="a00362.html#adee462d390e637a8393ba373c8d2a1bb">pos</a>.<a class="code" href="a00629.html#a6d62f015b74612e43975e439a096039c">y</a>) {
798
NewPoint = <a class="code" href="a00920.html#a917b406f8854b822d8cf2eb2480e6684">NewEdgePoint</a>();
799
<a class="code" href="a00921.html#a1960e4d5f6a5ee3649830432ab38937b">ClearMark</a>(NewPoint);
800
NewPoint-><a class="code" href="a00466.html#a6c6f4bc040c7147dce9a63516758ad5d">Hidden</a> = EdgePoint-><a class="code" href="a00362.html#a7e6e4c9b9bcc3b1e66ab62bb7641c39a">IsHidden</a>();
801
NewPoint-><a class="code" href="a00466.html#a2b633b56b9a1a71a23551e387b7c8af4">Point</a>.<a class="code" href="a00396.html#a96c1f94ff16244b06cb59b79152dc8ae">x</a> = EdgePoint-><a class="code" href="a00362.html#adee462d390e637a8393ba373c8d2a1bb">pos</a>.<a class="code" href="a00629.html#aa9c98655c3a2a0437821e5a3d3418b0f">x</a>;
802
NewPoint-><a class="code" href="a00466.html#a2b633b56b9a1a71a23551e387b7c8af4">Point</a>.<a class="code" href="a00396.html#a119bd5a9f0b29cabb3987fd94c5d4ca8">y</a> = EdgePoint-><a class="code" href="a00362.html#adee462d390e637a8393ba373c8d2a1bb">pos</a>.<a class="code" href="a00629.html#a6d62f015b74612e43975e439a096039c">y</a>;
803
MFOutline = <a class="code" href="a01042.html#a9c4294375af81ab4c133b6b5a3679a16">push</a>(MFOutline, NewPoint);
805
EdgePoint = NextPoint;
806
} <span class="keywordflow">while</span> (EdgePoint != StartPoint);
808
<span class="keywordflow">if</span> (MFOutline != NULL)
809
<a class="code" href="a00921.html#a72b744e3e7220468dad3d2c67ef65bbf">MakeOutlineCircular</a>(MFOutline);
810
<span class="keywordflow">return</span> MFOutline;
815
<a class="anchor" id="a8e6bfe5c4f9d8f25a36647bc079d7e49"></a><!-- doxytag: member="mfoutline.h::ConvertOutlines" ref="a8e6bfe5c4f9d8f25a36647bc079d7e49" args="(TESSLINE *Outline, LIST ConvertedOutlines, OUTLINETYPE OutlineType)" -->
816
<div class="memitem">
817
<div class="memproto">
818
<table class="memname">
820
<td class="memname"><a class="el" href="a01043.html#aa200acf94add0e61783bfcd5965bb645">LIST</a> <a class="el" href="a00921.html#a8e6bfe5c4f9d8f25a36647bc079d7e49">ConvertOutlines</a> </td>
822
<td class="paramtype"><a class="el" href="a00613.html">TESSLINE</a> * </td>
823
<td class="paramname"><em>Outline</em>, </td>
826
<td class="paramkey"></td>
828
<td class="paramtype"><a class="el" href="a01043.html#aa200acf94add0e61783bfcd5965bb645">LIST</a> </td>
829
<td class="paramname"><em>ConvertedOutlines</em>, </td>
832
<td class="paramkey"></td>
834
<td class="paramtype"><a class="el" href="a00921.html#abace9421f1a42147c8af40a950bc7203">OUTLINETYPE</a> </td>
835
<td class="paramname"><em>OutlineType</em> </td>
846
<p>Definition at line <a class="el" href="a00920_source.html#l00092">92</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
847
<div class="fragment"><pre class="fragment"> {
848
<a class="code" href="a00453.html">MFOUTLINE</a> mf_outline;
850
<span class="keywordflow">while</span> (outline != NULL) {
851
mf_outline = <a class="code" href="a00920.html#a8ddc957cfa64a7dc50f9a3836319e766">ConvertOutline</a>(outline);
852
<span class="keywordflow">if</span> (mf_outline != NULL)
853
mf_outlines = <a class="code" href="a01042.html#a9c4294375af81ab4c133b6b5a3679a16">push</a>(mf_outlines, mf_outline);
854
outline = outline->next;
856
<span class="keywordflow">return</span> mf_outlines;
861
<a class="anchor" id="a6a0f0accb0239e9d76cd8ff4ff147350"></a><!-- doxytag: member="mfoutline.h::FilterEdgeNoise" ref="a6a0f0accb0239e9d76cd8ff4ff147350" args="(MFOUTLINE Outline, FLOAT32 NoiseSegmentLength)" -->
862
<div class="memitem">
863
<div class="memproto">
864
<table class="memname">
866
<td class="memname">void <a class="el" href="a00921.html#a6a0f0accb0239e9d76cd8ff4ff147350">FilterEdgeNoise</a> </td>
868
<td class="paramtype"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> </td>
869
<td class="paramname"><em>Outline</em>, </td>
872
<td class="paramkey"></td>
874
<td class="paramtype"><a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> </td>
875
<td class="paramname"><em>NoiseSegmentLength</em> </td>
888
<a class="anchor" id="ac2b870343576dd24d1c4871f5988d556"></a><!-- doxytag: member="mfoutline.h::FindDirectionChanges" ref="ac2b870343576dd24d1c4871f5988d556" args="(MFOUTLINE Outline, FLOAT32 MinSlope, FLOAT32 MaxSlope)" -->
889
<div class="memitem">
890
<div class="memproto">
891
<table class="memname">
893
<td class="memname">void <a class="el" href="a00921.html#ac2b870343576dd24d1c4871f5988d556">FindDirectionChanges</a> </td>
895
<td class="paramtype"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> </td>
896
<td class="paramname"><em>Outline</em>, </td>
899
<td class="paramkey"></td>
901
<td class="paramtype"><a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> </td>
902
<td class="paramname"><em>MinSlope</em>, </td>
905
<td class="paramkey"></td>
907
<td class="paramtype"><a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> </td>
908
<td class="paramname"><em>MaxSlope</em> </td>
919
<p>Definition at line <a class="el" href="a00920_source.html#l00107">107</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
920
<div class="fragment"><pre class="fragment"> {
921
<span class="comment">/*</span>
922
<span class="comment"> ** Parameters:</span>
923
<span class="comment"> ** Outline micro-feature outline to analyze</span>
924
<span class="comment"> ** MinSlope controls "snapping" of segments to horizontal</span>
925
<span class="comment"> ** MaxSlope controls "snapping" of segments to vertical</span>
926
<span class="comment"> ** Globals: none</span>
927
<span class="comment"> ** Operation:</span>
928
<span class="comment"> ** This routine searches thru the specified outline, computes</span>
929
<span class="comment"> ** a slope for each vector in the outline, and marks each</span>
930
<span class="comment"> ** vector as having one of the following directions:</span>
931
<span class="comment"> ** N, S, E, W, NE, NW, SE, SW</span>
932
<span class="comment"> ** This information is then stored in the outline and the</span>
933
<span class="comment"> ** outline is returned.</span>
934
<span class="comment"> ** Return: none</span>
935
<span class="comment"> ** Exceptions: none</span>
936
<span class="comment"> ** History: 7/21/89, DSJ, Created.</span>
937
<span class="comment"> */</span>
938
<a class="code" href="a00466.html">MFEDGEPT</a> *Current;
939
<a class="code" href="a00466.html">MFEDGEPT</a> *Last;
940
<a class="code" href="a00453.html">MFOUTLINE</a> EdgePoint;
942
<span class="keywordflow">if</span> (<a class="code" href="a00921.html#ac8e258367e719e5a22e83af1c2b33e53">DegenerateOutline</a> (Outline))
943
<span class="keywordflow">return</span>;
945
Last = <a class="code" href="a00921.html#aabb22902a8c1b9a830cb6347a474feea">PointAt</a> (Outline);
946
Outline = <a class="code" href="a00921.html#ad2dfef920e57366bab3231610ab39f4d">NextPointAfter</a> (Outline);
948
<span class="keywordflow">do</span> {
949
Current = <a class="code" href="a00921.html#aabb22902a8c1b9a830cb6347a474feea">PointAt</a> (EdgePoint);
950
<a class="code" href="a00920.html#a97334eef13fe16a7e0ce178f905d2c39">ComputeDirection</a>(Last, Current, MinSlope, MaxSlope);
953
EdgePoint = <a class="code" href="a00921.html#ad2dfef920e57366bab3231610ab39f4d">NextPointAfter</a> (EdgePoint);
955
<span class="keywordflow">while</span> (EdgePoint != Outline);
957
} <span class="comment">/* FindDirectionChanges */</span>
961
<a class="anchor" id="a8983618bd7c7c05ff69355b0aa4185fe"></a><!-- doxytag: member="mfoutline.h::FinishOutlineStats" ref="a8983618bd7c7c05ff69355b0aa4185fe" args="(register OUTLINE_STATS *OutlineStats)" -->
962
<div class="memitem">
963
<div class="memproto">
964
<table class="memname">
966
<td class="memname">void <a class="el" href="a00921.html#a8983618bd7c7c05ff69355b0aa4185fe">FinishOutlineStats</a> </td>
968
<td class="paramtype">register <a class="el" href="a00479.html">OUTLINE_STATS</a> * </td>
969
<td class="paramname"><em>OutlineStats</em></td><td>)</td>
976
<p>Definition at line <a class="el" href="a00920_source.html#l00480">480</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
977
<div class="fragment"><pre class="fragment"> {
978
<span class="comment">/*</span>
979
<span class="comment"> ** Parameters:</span>
980
<span class="comment"> ** OutlineStats statistics about a set of outlines</span>
981
<span class="comment"> ** Globals: none</span>
982
<span class="comment"> ** Operation: Use the preliminary statistics accumulated in OutlineStats</span>
983
<span class="comment"> ** to compute the final statistics.</span>
984
<span class="comment"> ** (see Dan Johnson's Tesseract lab</span>
985
<span class="comment"> ** notebook #2, pgs. 74-78).</span>
986
<span class="comment"> ** Return: none</span>
987
<span class="comment"> ** Exceptions: none</span>
988
<span class="comment"> ** History: Fri Dec 14 10:13:36 1990, DSJ, Created.</span>
989
<span class="comment"> */</span>
990
OutlineStats->x = 0.5 * OutlineStats->My / OutlineStats->L;
991
OutlineStats->y = 0.5 * OutlineStats->Mx / OutlineStats->L;
993
OutlineStats->Ix = (OutlineStats->Ix / 3.0 -
994
OutlineStats->y * OutlineStats->Mx +
995
OutlineStats->y * OutlineStats->y * OutlineStats->L);
997
OutlineStats->Iy = (OutlineStats->Iy / 3.0 -
998
OutlineStats->x * OutlineStats->My +
999
OutlineStats->x * OutlineStats->x * OutlineStats->L);
1001
<span class="comment">/* Ix and/or Iy could possibly be negative due to roundoff error */</span>
1002
<span class="keywordflow">if</span> (OutlineStats->Ix < 0.0)
1003
OutlineStats->Ix = <a class="code" href="a00920.html#aeb013f47829ae8698a722f8fd1ddb989">MIN_INERTIA</a>;
1004
<span class="keywordflow">if</span> (OutlineStats->Iy < 0.0)
1005
OutlineStats->Iy = <a class="code" href="a00920.html#aeb013f47829ae8698a722f8fd1ddb989">MIN_INERTIA</a>;
1007
OutlineStats->Rx = sqrt (OutlineStats->Ix / OutlineStats->L);
1008
OutlineStats->Ry = sqrt (OutlineStats->Iy / OutlineStats->L);
1010
OutlineStats->Mx *= 0.5;
1011
OutlineStats->My *= 0.5;
1013
} <span class="comment">/* FinishOutlineStats */</span>
1017
<a class="anchor" id="a717586ca196e0c54bd0c99792acde58d"></a><!-- doxytag: member="mfoutline.h::FreeMFOutline" ref="a717586ca196e0c54bd0c99792acde58d" args="(void *agr)" -->
1018
<div class="memitem">
1019
<div class="memproto">
1020
<table class="memname">
1022
<td class="memname">void <a class="el" href="a00921.html#a717586ca196e0c54bd0c99792acde58d">FreeMFOutline</a> </td>
1024
<td class="paramtype">void * </td>
1025
<td class="paramname"><em>agr</em></td><td>)</td>
1030
<div class="memdoc">
1032
<p>Definition at line <a class="el" href="a00920_source.html#l00150">150</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
1033
<div class="fragment"><pre class="fragment"> { <span class="comment">//MFOUTLINE Outline)</span>
1034
<span class="comment">/*</span>
1035
<span class="comment"> ** Parameters:</span>
1036
<span class="comment"> ** Outline micro-feature outline to be freed</span>
1037
<span class="comment"> ** Globals: none</span>
1038
<span class="comment"> ** Operation:</span>
1039
<span class="comment"> ** This routine deallocates all of the memory consumed by</span>
1040
<span class="comment"> ** a micro-feature outline.</span>
1041
<span class="comment"> ** Return: none</span>
1042
<span class="comment"> ** Exceptions: none</span>
1043
<span class="comment"> ** History: 7/27/89, DSJ, Created.</span>
1044
<span class="comment"> */</span>
1045
<a class="code" href="a00453.html">MFOUTLINE</a> Start;
1046
<a class="code" href="a00453.html">MFOUTLINE</a> Outline = (<a class="code" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a>) arg;
1048
<span class="comment">/* break the circular outline so we can use std. techniques to deallocate */</span>
1049
Start = <a class="code" href="a01043.html#adb120d4c08ce52b5dfe524f0419a9154">list_rest</a> (Outline);
1050
<a class="code" href="a01043.html#a42cc2d9c5eabb2193e2e64df41adedf4">set_rest</a>(Outline, <a class="code" href="a01043.html#ae212530ca629c67513698e988c705a5a">NIL_LIST</a>);
1051
<span class="keywordflow">while</span> (Start != NULL) {
1052
<a class="code" href="a00837.html#a204a6cd6de69d4bd7a73ca30e0a0f947">free_struct</a> (<a class="code" href="a01043.html#a69547be764424f18b0be535400747978">first_node</a> (Start), <span class="keyword">sizeof</span> (<a class="code" href="a00466.html">MFEDGEPT</a>), <span class="stringliteral">"MFEDGEPT"</span>);
1053
Start = <a class="code" href="a01042.html#a4a16ea0d766f4b3bc697142d5303a62c">pop</a> (Start);
1056
} <span class="comment">/* FreeMFOutline */</span>
1060
<a class="anchor" id="a553352ad44661adad2a80a24ac78aeaf"></a><!-- doxytag: member="mfoutline.h::FreeOutlines" ref="a553352ad44661adad2a80a24ac78aeaf" args="(LIST Outlines)" -->
1061
<div class="memitem">
1062
<div class="memproto">
1063
<table class="memname">
1065
<td class="memname">void <a class="el" href="a00921.html#a553352ad44661adad2a80a24ac78aeaf">FreeOutlines</a> </td>
1067
<td class="paramtype"><a class="el" href="a01043.html#aa200acf94add0e61783bfcd5965bb645">LIST</a> </td>
1068
<td class="paramname"><em>Outlines</em></td><td>)</td>
1073
<div class="memdoc">
1075
<p>Definition at line <a class="el" href="a00920_source.html#l00177">177</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
1076
<div class="fragment"><pre class="fragment"> {
1077
<span class="comment">/*</span>
1078
<span class="comment"> ** Parameters:</span>
1079
<span class="comment"> ** Outlines list of mf-outlines to be freed</span>
1080
<span class="comment"> ** Globals: none</span>
1081
<span class="comment"> ** Operation: Release all memory consumed by the specified list</span>
1082
<span class="comment"> ** of outlines.</span>
1083
<span class="comment"> ** Return: none</span>
1084
<span class="comment"> ** Exceptions: none</span>
1085
<span class="comment"> ** History: Thu Dec 13 16:14:50 1990, DSJ, Created.</span>
1086
<span class="comment"> */</span>
1087
<a class="code" href="a01042.html#a1a1efc1a269e5bb5bf16c1a174363ba4">destroy_nodes</a>(Outlines, <a class="code" href="a00920.html#a4633687049466a4f28d70775b0481431">FreeMFOutline</a>);
1088
} <span class="comment">/* FreeOutlines */</span>
1092
<a class="anchor" id="ab1a3167a695b3448b64ee38f6da9a264"></a><!-- doxytag: member="mfoutline.h::InitOutlineStats" ref="ab1a3167a695b3448b64ee38f6da9a264" args="(OUTLINE_STATS *OutlineStats)" -->
1093
<div class="memitem">
1094
<div class="memproto">
1095
<table class="memname">
1097
<td class="memname">void <a class="el" href="a00921.html#ab1a3167a695b3448b64ee38f6da9a264">InitOutlineStats</a> </td>
1099
<td class="paramtype"><a class="el" href="a00479.html">OUTLINE_STATS</a> * </td>
1100
<td class="paramname"><em>OutlineStats</em></td><td>)</td>
1105
<div class="memdoc">
1107
<p>Definition at line <a class="el" href="a00920_source.html#l00520">520</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
1108
<div class="fragment"><pre class="fragment"> {
1109
<span class="comment">/*</span>
1110
<span class="comment"> ** Parameters:</span>
1111
<span class="comment"> ** OutlineStats stats data structure to be initialized</span>
1112
<span class="comment"> ** Globals: none</span>
1113
<span class="comment"> ** Operation: Initialize the outline statistics data structure so</span>
1114
<span class="comment"> ** that it is ready to start accumulating statistics.</span>
1115
<span class="comment"> ** Return: none</span>
1116
<span class="comment"> ** Exceptions: none</span>
1117
<span class="comment"> ** History: Fri Dec 14 08:55:22 1990, DSJ, Created.</span>
1118
<span class="comment"> */</span>
1119
OutlineStats-><a class="code" href="a00479.html#a48dcb42e547f23fbf75a53f396c2d020">Mx</a> = 0.0;
1120
OutlineStats-><a class="code" href="a00479.html#a19fd6ebb6e878a2f2df7c168edd7ed81">My</a> = 0.0;
1121
OutlineStats-><a class="code" href="a00479.html#a91a6aea2761ea0e675b1e47c87da2509">L</a> = 0.0;
1122
OutlineStats-><a class="code" href="a00479.html#a2e72d57afc14290aef97b17bba52cd98">x</a> = 0.0;
1123
OutlineStats-><a class="code" href="a00479.html#a27f428c88f5d21ad9125a93c30d73699">y</a> = 0.0;
1124
OutlineStats-><a class="code" href="a00479.html#a6af6966cfc75974663f3746d8a490a34">Ix</a> = 0.0;
1125
OutlineStats-><a class="code" href="a00479.html#af32048351768bcc8ad6566dcb452090d">Iy</a> = 0.0;
1126
OutlineStats-><a class="code" href="a00479.html#a44df0e96a471cc5e0380b52d04eec549">Rx</a> = 0.0;
1127
OutlineStats-><a class="code" href="a00479.html#afb6d2229fa00b3a255aa11efa7894527">Ry</a> = 0.0;
1128
} <span class="comment">/* InitOutlineStats */</span>
1132
<a class="anchor" id="afa2531f8656ba496465bc23ff1a2f99c"></a><!-- doxytag: member="mfoutline.h::MarkDirectionChanges" ref="afa2531f8656ba496465bc23ff1a2f99c" args="(MFOUTLINE Outline)" -->
1133
<div class="memitem">
1134
<div class="memproto">
1135
<table class="memname">
1137
<td class="memname">void <a class="el" href="a00921.html#afa2531f8656ba496465bc23ff1a2f99c">MarkDirectionChanges</a> </td>
1139
<td class="paramtype"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> </td>
1140
<td class="paramname"><em>Outline</em></td><td>)</td>
1145
<div class="memdoc">
1147
<p>Definition at line <a class="el" href="a00920_source.html#l00193">193</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
1148
<div class="fragment"><pre class="fragment"> {
1149
<span class="comment">/*</span>
1150
<span class="comment"> ** Parameters:</span>
1151
<span class="comment"> ** Outline micro-feature outline to analyze</span>
1152
<span class="comment"> ** Globals: none</span>
1153
<span class="comment"> ** Operation:</span>
1154
<span class="comment"> ** This routine searches thru the specified outline and finds</span>
1155
<span class="comment"> ** the points at which the outline changes direction. These</span>
1156
<span class="comment"> ** points are then marked as "extremities". This routine is</span>
1157
<span class="comment"> ** used as an alternative to FindExtremities(). It forces the</span>
1158
<span class="comment"> ** endpoints of the microfeatures to be at the direction</span>
1159
<span class="comment"> ** changes rather than at the midpoint between direction</span>
1160
<span class="comment"> ** changes.</span>
1161
<span class="comment"> ** Return: none</span>
1162
<span class="comment"> ** Exceptions: none</span>
1163
<span class="comment"> ** History: 6/29/90, DSJ, Created.</span>
1164
<span class="comment"> */</span>
1165
<a class="code" href="a00453.html">MFOUTLINE</a> Current;
1166
<a class="code" href="a00453.html">MFOUTLINE</a> Last;
1167
<a class="code" href="a00453.html">MFOUTLINE</a> First;
1169
<span class="keywordflow">if</span> (<a class="code" href="a00921.html#ac8e258367e719e5a22e83af1c2b33e53">DegenerateOutline</a> (Outline))
1170
<span class="keywordflow">return</span>;
1172
First = <a class="code" href="a00920.html#a224d838335416038dcb0348f665f5a05">NextDirectionChange</a> (Outline);
1174
<span class="keywordflow">do</span> {
1175
Current = <a class="code" href="a00920.html#a224d838335416038dcb0348f665f5a05">NextDirectionChange</a> (Last);
1176
<a class="code" href="a00921.html#ae5174bb3e6e300b198551b13834c1a62">MarkPoint</a> (<a class="code" href="a00921.html#aabb22902a8c1b9a830cb6347a474feea">PointAt</a> (Current));
1179
<span class="keywordflow">while</span> (Last != First);
1181
} <span class="comment">/* MarkDirectionChanges */</span>
1185
<a class="anchor" id="a917b406f8854b822d8cf2eb2480e6684"></a><!-- doxytag: member="mfoutline.h::NewEdgePoint" ref="a917b406f8854b822d8cf2eb2480e6684" args="()" -->
1186
<div class="memitem">
1187
<div class="memproto">
1188
<table class="memname">
1190
<td class="memname"><a class="el" href="a00466.html">MFEDGEPT</a>* <a class="el" href="a00921.html#a917b406f8854b822d8cf2eb2480e6684">NewEdgePoint</a> </td>
1192
<td class="paramname"></td><td>)</td>
1197
<div class="memdoc">
1199
<p>Definition at line <a class="el" href="a00920_source.html#l00231">231</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
1200
<div class="fragment"><pre class="fragment"> {
1201
<span class="keywordflow">return</span> ((<a class="code" href="a00466.html">MFEDGEPT</a> *) <a class="code" href="a00837.html#a4f4e6728de23eb0530f9bdc8b3a114d3">alloc_struct</a>(<span class="keyword">sizeof</span>(<a class="code" href="a00466.html">MFEDGEPT</a>), <span class="stringliteral">"MFEDGEPT"</span>));
1206
<a class="anchor" id="a224d838335416038dcb0348f665f5a05"></a><!-- doxytag: member="mfoutline.h::NextDirectionChange" ref="a224d838335416038dcb0348f665f5a05" args="(MFOUTLINE EdgePoint)" -->
1207
<div class="memitem">
1208
<div class="memproto">
1209
<table class="memname">
1211
<td class="memname"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> <a class="el" href="a00921.html#a224d838335416038dcb0348f665f5a05">NextDirectionChange</a> </td>
1213
<td class="paramtype"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> </td>
1214
<td class="paramname"><em>EdgePoint</em></td><td>)</td>
1219
<div class="memdoc">
1221
<p>Definition at line <a class="el" href="a00920_source.html#l00544">544</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
1222
<div class="fragment"><pre class="fragment"> {
1223
<span class="comment">/*</span>
1224
<span class="comment"> ** Parameters:</span>
1225
<span class="comment"> ** EdgePoint start search from this point</span>
1226
<span class="comment"> ** Globals: none</span>
1227
<span class="comment"> ** Operation:</span>
1228
<span class="comment"> ** This routine returns the next point in the micro-feature</span>
1229
<span class="comment"> ** outline that has a direction different than EdgePoint. The</span>
1230
<span class="comment"> ** routine assumes that the outline being searched is not a</span>
1231
<span class="comment"> ** degenerate outline (i.e. it must have 2 or more edge points).</span>
1232
<span class="comment"> ** Return: Point of next direction change in micro-feature outline.</span>
1233
<span class="comment"> ** Exceptions: none</span>
1234
<span class="comment"> ** History: 7/25/89, DSJ, Created.</span>
1235
<span class="comment"> */</span>
1236
<a class="code" href="a00921.html#aa268a41a13430b18e933ed40207178d0">DIRECTION</a> InitialDirection;
1238
InitialDirection = <a class="code" href="a00921.html#aabb22902a8c1b9a830cb6347a474feea">PointAt</a> (EdgePoint)->Direction;
1240
<a class="code" href="a00453.html">MFOUTLINE</a> next_pt = NULL;
1241
<span class="keywordflow">do</span> {
1242
EdgePoint = <a class="code" href="a00921.html#ad2dfef920e57366bab3231610ab39f4d">NextPointAfter</a>(EdgePoint);
1243
next_pt = <a class="code" href="a00921.html#ad2dfef920e57366bab3231610ab39f4d">NextPointAfter</a>(EdgePoint);
1244
} <span class="keywordflow">while</span> (<a class="code" href="a00921.html#aabb22902a8c1b9a830cb6347a474feea">PointAt</a>(EdgePoint)->Direction == InitialDirection &&
1245
!<a class="code" href="a00921.html#aabb22902a8c1b9a830cb6347a474feea">PointAt</a>(EdgePoint)->Hidden &&
1246
next_pt != NULL && !<a class="code" href="a00921.html#aabb22902a8c1b9a830cb6347a474feea">PointAt</a>(next_pt)->Hidden);
1248
<span class="keywordflow">return</span> (EdgePoint);
1249
} <span class="comment">/* NextDirectionChange */</span>
1253
<a class="anchor" id="af520bd5bba313216d0b6fb9e58041266"></a><!-- doxytag: member="mfoutline.h::NextExtremity" ref="af520bd5bba313216d0b6fb9e58041266" args="(MFOUTLINE EdgePoint)" -->
1254
<div class="memitem">
1255
<div class="memproto">
1256
<table class="memname">
1258
<td class="memname"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> <a class="el" href="a00921.html#af520bd5bba313216d0b6fb9e58041266">NextExtremity</a> </td>
1260
<td class="paramtype"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> </td>
1261
<td class="paramname"><em>EdgePoint</em></td><td>)</td>
1266
<div class="memdoc">
1268
<p>Definition at line <a class="el" href="a00920_source.html#l00237">237</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
1269
<div class="fragment"><pre class="fragment"> {
1270
<span class="comment">/*</span>
1271
<span class="comment"> ** Parameters:</span>
1272
<span class="comment"> ** EdgePoint start search from this point</span>
1273
<span class="comment"> ** Globals: none</span>
1274
<span class="comment"> ** Operation:</span>
1275
<span class="comment"> ** This routine returns the next point in the micro-feature</span>
1276
<span class="comment"> ** outline that is an extremity. The search starts after</span>
1277
<span class="comment"> ** EdgePoint. The routine assumes that the outline being</span>
1278
<span class="comment"> ** searched is not a degenerate outline (i.e. it must have</span>
1279
<span class="comment"> ** 2 or more edge points).</span>
1280
<span class="comment"> ** Return: Next extremity in the outline after EdgePoint.</span>
1281
<span class="comment"> ** Exceptions: none</span>
1282
<span class="comment"> ** History: 7/26/89, DSJ, Created.</span>
1283
<span class="comment"> */</span>
1284
EdgePoint = <a class="code" href="a00921.html#ad2dfef920e57366bab3231610ab39f4d">NextPointAfter</a>(EdgePoint);
1285
<span class="keywordflow">while</span> (!<a class="code" href="a00921.html#aabb22902a8c1b9a830cb6347a474feea">PointAt</a>(EdgePoint)->ExtremityMark)
1286
EdgePoint = <a class="code" href="a00921.html#ad2dfef920e57366bab3231610ab39f4d">NextPointAfter</a>(EdgePoint);
1288
<span class="keywordflow">return</span> (EdgePoint);
1290
} <span class="comment">/* NextExtremity */</span>
1294
<a class="anchor" id="a30b1492f0756c31499da0157ecba50ff"></a><!-- doxytag: member="mfoutline.h::NormalizeOutline" ref="a30b1492f0756c31499da0157ecba50ff" args="(MFOUTLINE Outline, FLOAT32 XOrigin)" -->
1295
<div class="memitem">
1296
<div class="memproto">
1297
<table class="memname">
1299
<td class="memname">void <a class="el" href="a00921.html#a30b1492f0756c31499da0157ecba50ff">NormalizeOutline</a> </td>
1301
<td class="paramtype"><a class="el" href="a00921.html#a7ccab0cdf14413921e017ad0af14e1de">MFOUTLINE</a> </td>
1302
<td class="paramname"><em>Outline</em>, </td>
1305
<td class="paramkey"></td>
1307
<td class="paramtype"><a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> </td>
1308
<td class="paramname"><em>XOrigin</em> </td>
1317
<div class="memdoc">
1319
<p>Definition at line <a class="el" href="a00920_source.html#l00262">262</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
1320
<div class="fragment"><pre class="fragment"> {
1321
<span class="comment">/*</span>
1322
<span class="comment"> ** Parameters:</span>
1323
<span class="comment"> ** Outline outline to be normalized</span>
1324
<span class="comment"> ** XOrigin x-origin of text</span>
1325
<span class="comment"> ** Globals: none</span>
1326
<span class="comment"> ** Operation:</span>
1327
<span class="comment"> ** This routine normalizes the coordinates of the specified</span>
1328
<span class="comment"> ** outline so that the outline is deskewed down to the</span>
1329
<span class="comment"> ** baseline, translated so that x=0 is at XOrigin, and scaled</span>
1330
<span class="comment"> ** so that the height of a character cell from descender to</span>
1331
<span class="comment"> ** ascender is 1. Of this height, 0.25 is for the descender,</span>
1332
<span class="comment"> ** 0.25 for the ascender, and 0.5 for the x-height. The</span>
1333
<span class="comment"> ** y coordinate of the baseline is 0.</span>
1334
<span class="comment"> ** Return: none</span>
1335
<span class="comment"> ** Exceptions: none</span>
1336
<span class="comment"> ** History: 8/2/89, DSJ, Created.</span>
1337
<span class="comment"> */</span>
1338
<span class="keywordflow">if</span> (Outline == <a class="code" href="a01043.html#ae212530ca629c67513698e988c705a5a">NIL_LIST</a>)
1339
<span class="keywordflow">return</span>;
1341
<a class="code" href="a00453.html">MFOUTLINE</a> EdgePoint = Outline;
1342
<span class="keywordflow">do</span> {
1343
<a class="code" href="a00466.html">MFEDGEPT</a> *Current = <a class="code" href="a00921.html#aabb22902a8c1b9a830cb6347a474feea">PointAt</a>(EdgePoint);
1344
Current-><a class="code" href="a00466.html#a2b633b56b9a1a71a23551e387b7c8af4">Point</a>.<a class="code" href="a00396.html#a119bd5a9f0b29cabb3987fd94c5d4ca8">y</a> = <a class="code" href="a00921.html#a91645597f620e8307a65e8ab35d963b8">MF_SCALE_FACTOR</a> *
1345
(Current-><a class="code" href="a00466.html#a2b633b56b9a1a71a23551e387b7c8af4">Point</a>.<a class="code" href="a00396.html#a119bd5a9f0b29cabb3987fd94c5d4ca8">y</a> - <a class="code" href="a00759.html#abe10ce41bf7240ae8a053dea471d6ed5">kBlnBaselineOffset</a>);
1346
Current-><a class="code" href="a00466.html#a2b633b56b9a1a71a23551e387b7c8af4">Point</a>.<a class="code" href="a00396.html#a96c1f94ff16244b06cb59b79152dc8ae">x</a> = <a class="code" href="a00921.html#a91645597f620e8307a65e8ab35d963b8">MF_SCALE_FACTOR</a> * (Current-><a class="code" href="a00466.html#a2b633b56b9a1a71a23551e387b7c8af4">Point</a>.<a class="code" href="a00396.html#a96c1f94ff16244b06cb59b79152dc8ae">x</a> - XOrigin);
1347
EdgePoint = <a class="code" href="a00921.html#ad2dfef920e57366bab3231610ab39f4d">NextPointAfter</a>(EdgePoint);
1348
} <span class="keywordflow">while</span> (EdgePoint != Outline);
1349
} <span class="comment">/* NormalizeOutline */</span>
1353
<a class="anchor" id="a943167d00e171b3cbc68252f32a45196"></a><!-- doxytag: member="mfoutline.h::UpdateOutlineStats" ref="a943167d00e171b3cbc68252f32a45196" args="(register OUTLINE_STATS *OutlineStats, register FLOAT32 x1, register FLOAT32 x2, register FLOAT32 y1, register FLOAT32 y2)" -->
1354
<div class="memitem">
1355
<div class="memproto">
1356
<table class="memname">
1358
<td class="memname">void <a class="el" href="a00921.html#a943167d00e171b3cbc68252f32a45196">UpdateOutlineStats</a> </td>
1360
<td class="paramtype">register <a class="el" href="a00479.html">OUTLINE_STATS</a> * </td>
1361
<td class="paramname"><em>OutlineStats</em>, </td>
1364
<td class="paramkey"></td>
1366
<td class="paramtype">register <a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> </td>
1367
<td class="paramname"><em>x1</em>, </td>
1370
<td class="paramkey"></td>
1372
<td class="paramtype">register <a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> </td>
1373
<td class="paramname"><em>x2</em>, </td>
1376
<td class="paramkey"></td>
1378
<td class="paramtype">register <a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> </td>
1379
<td class="paramname"><em>y1</em>, </td>
1382
<td class="paramkey"></td>
1384
<td class="paramtype">register <a class="el" href="a00831.html#a6a3da5f1db8d485c0d2f5a7ba526c4a0">FLOAT32</a> </td>
1385
<td class="paramname"><em>y2</em> </td>
1394
<div class="memdoc">
1396
<p>Definition at line <a class="el" href="a00920_source.html#l00575">575</a> of file <a class="el" href="a00920_source.html">mfoutline.cpp</a>.</p>
1397
<div class="fragment"><pre class="fragment"> {
1398
<span class="comment">/*</span>
1399
<span class="comment"> ** Parameters:</span>
1400
<span class="comment"> ** OutlineStats statistics to add this segment to</span>
1401
<span class="comment"> ** x1, y1, x2, y2 segment to be added to statistics</span>
1402
<span class="comment"> ** Globals: none</span>
1403
<span class="comment"> ** Operation: This routine adds the statistics for the specified</span>
1404
<span class="comment"> ** line segment to OutlineStats. The statistics that are</span>
1405
<span class="comment"> ** kept are:</span>
1406
<span class="comment"> ** sum of length of all segments</span>
1407
<span class="comment"> ** sum of 2*Mx for all segments</span>
1408
<span class="comment"> ** sum of 2*My for all segments</span>
1409
<span class="comment"> ** sum of 2*Mx*(y1+y2) - L*y1*y2 for all segments</span>
1410
<span class="comment"> ** sum of 2*My*(x1+x2) - L*x1*x2 for all segments</span>
1411
<span class="comment"> ** These numbers, once collected can later be used to easily</span>
1412
<span class="comment"> ** compute the center of mass, first and second moments,</span>
1413
<span class="comment"> ** and radii of gyration. (see Dan Johnson's Tesseract lab</span>
1414
<span class="comment"> ** notebook #2, pgs. 74-78).</span>
1415
<span class="comment"> ** Return: none</span>
1416
<span class="comment"> ** Exceptions: none</span>
1417
<span class="comment"> ** History: Fri Dec 14 08:59:17 1990, DSJ, Created.</span>
1418
<span class="comment"> */</span>
1419
<span class="keyword">register</span> <a class="code" href="a00831.html#aa8336782d864ba03efadb73a51260961">FLOAT64</a> L;
1420
<span class="keyword">register</span> <a class="code" href="a00831.html#aa8336782d864ba03efadb73a51260961">FLOAT64</a> Mx2;
1421
<span class="keyword">register</span> <a class="code" href="a00831.html#aa8336782d864ba03efadb73a51260961">FLOAT64</a> My2;
1423
<span class="comment">/* compute length of segment */</span>
1424
L = sqrt ((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
1425
OutlineStats->L += L;
1427
<span class="comment">/* compute 2Mx and 2My components */</span>
1428
Mx2 = L * (y1 + y2);
1429
My2 = L * (x1 + x2);
1430
OutlineStats->Mx += Mx2;
1431
OutlineStats->My += My2;
1433
<span class="comment">/* compute second moment component */</span>
1434
OutlineStats->Ix += Mx2 * (y1 + y2) - L * y1 * y2;
1435
OutlineStats->Iy += My2 * (x1 + x2) - L * x1 * x2;
1437
} <span class="comment">/* UpdateOutlineStats */</span>
1441
</div><!-- contents -->
1443
<!-- window showing the filter options -->
1444
<div id="MSearchSelectWindow"
1445
onmouseover="return searchBox.OnSearchSelectShow()"
1446
onmouseout="return searchBox.OnSearchSelectHide()"
1447
onkeydown="return searchBox.OnSearchSelectKey(event)">
1448
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Defines</a></div>
1450
<!-- iframe showing the search results (closed by default) -->
1451
<div id="MSearchResultsWindow">
1452
<iframe src="javascript:void(0)" frameborder="0"
1453
name="MSearchResults" id="MSearchResults">
1457
<div id="nav-path" class="navpath">
1459
<li class="navelem"><a class="el" href="a00921.html">mfoutline.h</a> </li>
1461
<li class="footer">Generated on Mon Feb 3 2014 10:59:12 for tesseract by
1462
<a href="http://www.doxygen.org/index.html">
1463
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.6.1 </li>