tesseract_bin 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +23 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +46 -0
- data/VERSION +1 -0
- data/ext/tesseract_bin/extconf.rb +17 -0
- data/lib/tesseract_bin.rb +12 -0
- data/tesseract_bin.gemspec +660 -0
- data/test/helper.rb +18 -0
- data/test/test_tesseract_bin.rb +7 -0
- data/vendor/tesseract-2.04/AUTHORS +8 -0
- data/vendor/tesseract-2.04/COPYING +23 -0
- data/vendor/tesseract-2.04/ChangeLog +71 -0
- data/vendor/tesseract-2.04/INSTALL +229 -0
- data/vendor/tesseract-2.04/Makefile.am +20 -0
- data/vendor/tesseract-2.04/Makefile.in +641 -0
- data/vendor/tesseract-2.04/NEWS +1 -0
- data/vendor/tesseract-2.04/README +138 -0
- data/vendor/tesseract-2.04/ReleaseNotes +213 -0
- data/vendor/tesseract-2.04/StdAfx.cpp +8 -0
- data/vendor/tesseract-2.04/StdAfx.h +24 -0
- data/vendor/tesseract-2.04/ccmain/Makefile.am +63 -0
- data/vendor/tesseract-2.04/ccmain/Makefile.in +735 -0
- data/vendor/tesseract-2.04/ccmain/adaptions.cpp +1082 -0
- data/vendor/tesseract-2.04/ccmain/adaptions.h +109 -0
- data/vendor/tesseract-2.04/ccmain/applybox.cpp +891 -0
- data/vendor/tesseract-2.04/ccmain/applybox.h +73 -0
- data/vendor/tesseract-2.04/ccmain/baseapi.cpp +1105 -0
- data/vendor/tesseract-2.04/ccmain/baseapi.h +256 -0
- data/vendor/tesseract-2.04/ccmain/blobcmp.cpp +76 -0
- data/vendor/tesseract-2.04/ccmain/blobcmp.h +29 -0
- data/vendor/tesseract-2.04/ccmain/callnet.cpp +93 -0
- data/vendor/tesseract-2.04/ccmain/callnet.h +32 -0
- data/vendor/tesseract-2.04/ccmain/charcut.cpp +704 -0
- data/vendor/tesseract-2.04/ccmain/charcut.h +120 -0
- data/vendor/tesseract-2.04/ccmain/charsample.cpp +699 -0
- data/vendor/tesseract-2.04/ccmain/control.cpp +1842 -0
- data/vendor/tesseract-2.04/ccmain/control.h +198 -0
- data/vendor/tesseract-2.04/ccmain/docqual.cpp +1481 -0
- data/vendor/tesseract-2.04/ccmain/docqual.h +155 -0
- data/vendor/tesseract-2.04/ccmain/expandblob.cpp +82 -0
- data/vendor/tesseract-2.04/ccmain/expandblob.h +13 -0
- data/vendor/tesseract-2.04/ccmain/fixspace.cpp +989 -0
- data/vendor/tesseract-2.04/ccmain/fixspace.h +72 -0
- data/vendor/tesseract-2.04/ccmain/fixxht.cpp +825 -0
- data/vendor/tesseract-2.04/ccmain/fixxht.h +93 -0
- data/vendor/tesseract-2.04/ccmain/imgscale.cpp +154 -0
- data/vendor/tesseract-2.04/ccmain/imgscale.h +32 -0
- data/vendor/tesseract-2.04/ccmain/matmatch.cpp +391 -0
- data/vendor/tesseract-2.04/ccmain/matmatch.h +48 -0
- data/vendor/tesseract-2.04/ccmain/output.cpp +1273 -0
- data/vendor/tesseract-2.04/ccmain/output.h +116 -0
- data/vendor/tesseract-2.04/ccmain/pagewalk.cpp +666 -0
- data/vendor/tesseract-2.04/ccmain/pagewalk.h +155 -0
- data/vendor/tesseract-2.04/ccmain/paircmp.cpp +107 -0
- data/vendor/tesseract-2.04/ccmain/paircmp.h +43 -0
- data/vendor/tesseract-2.04/ccmain/pgedit.cpp +1867 -0
- data/vendor/tesseract-2.04/ccmain/pgedit.h +181 -0
- data/vendor/tesseract-2.04/ccmain/reject.cpp +1775 -0
- data/vendor/tesseract-2.04/ccmain/reject.h +181 -0
- data/vendor/tesseract-2.04/ccmain/scaleimg.cpp +366 -0
- data/vendor/tesseract-2.04/ccmain/scaleimg.h +35 -0
- data/vendor/tesseract-2.04/ccmain/tessbox.cpp +375 -0
- data/vendor/tesseract-2.04/ccmain/tessbox.h +110 -0
- data/vendor/tesseract-2.04/ccmain/tessedit.cpp +278 -0
- data/vendor/tesseract-2.04/ccmain/tessedit.h +49 -0
- data/vendor/tesseract-2.04/ccmain/tessembedded.cpp +110 -0
- data/vendor/tesseract-2.04/ccmain/tessembedded.h +38 -0
- data/vendor/tesseract-2.04/ccmain/tesseractfull.cc +37 -0
- data/vendor/tesseract-2.04/ccmain/tesseractmain.cpp +387 -0
- data/vendor/tesseract-2.04/ccmain/tesseractmain.h +58 -0
- data/vendor/tesseract-2.04/ccmain/tessio.h +110 -0
- data/vendor/tesseract-2.04/ccmain/tessvars.cpp +38 -0
- data/vendor/tesseract-2.04/ccmain/tessvars.h +48 -0
- data/vendor/tesseract-2.04/ccmain/tfacep.h +62 -0
- data/vendor/tesseract-2.04/ccmain/tfacepp.cpp +443 -0
- data/vendor/tesseract-2.04/ccmain/tfacepp.h +85 -0
- data/vendor/tesseract-2.04/ccmain/tstruct.cpp +549 -0
- data/vendor/tesseract-2.04/ccmain/tstruct.h +108 -0
- data/vendor/tesseract-2.04/ccmain/varabled.cpp +346 -0
- data/vendor/tesseract-2.04/ccmain/varabled.h +125 -0
- data/vendor/tesseract-2.04/ccmain/werdit.cpp +193 -0
- data/vendor/tesseract-2.04/ccmain/werdit.h +67 -0
- data/vendor/tesseract-2.04/ccstruct/Makefile.am +25 -0
- data/vendor/tesseract-2.04/ccstruct/Makefile.in +650 -0
- data/vendor/tesseract-2.04/ccstruct/blckerr.h +29 -0
- data/vendor/tesseract-2.04/ccstruct/blobbox.cpp +778 -0
- data/vendor/tesseract-2.04/ccstruct/blobbox.h +381 -0
- data/vendor/tesseract-2.04/ccstruct/blobs.cpp +247 -0
- data/vendor/tesseract-2.04/ccstruct/blobs.h +119 -0
- data/vendor/tesseract-2.04/ccstruct/blread.cpp +537 -0
- data/vendor/tesseract-2.04/ccstruct/blread.h +63 -0
- data/vendor/tesseract-2.04/ccstruct/callcpp.cpp +252 -0
- data/vendor/tesseract-2.04/ccstruct/coutln.cpp +650 -0
- data/vendor/tesseract-2.04/ccstruct/coutln.h +186 -0
- data/vendor/tesseract-2.04/ccstruct/crakedge.h +39 -0
- data/vendor/tesseract-2.04/ccstruct/genblob.cpp +133 -0
- data/vendor/tesseract-2.04/ccstruct/genblob.h +52 -0
- data/vendor/tesseract-2.04/ccstruct/hpddef.h +39 -0
- data/vendor/tesseract-2.04/ccstruct/hpdsizes.h +8 -0
- data/vendor/tesseract-2.04/ccstruct/ipoints.h +479 -0
- data/vendor/tesseract-2.04/ccstruct/labls.cpp +188 -0
- data/vendor/tesseract-2.04/ccstruct/labls.h +38 -0
- data/vendor/tesseract-2.04/ccstruct/linlsq.cpp +249 -0
- data/vendor/tesseract-2.04/ccstruct/linlsq.h +102 -0
- data/vendor/tesseract-2.04/ccstruct/lmedsq.cpp +453 -0
- data/vendor/tesseract-2.04/ccstruct/lmedsq.h +84 -0
- data/vendor/tesseract-2.04/ccstruct/mod128.cpp +100 -0
- data/vendor/tesseract-2.04/ccstruct/mod128.h +85 -0
- data/vendor/tesseract-2.04/ccstruct/normalis.cpp +176 -0
- data/vendor/tesseract-2.04/ccstruct/normalis.h +108 -0
- data/vendor/tesseract-2.04/ccstruct/ocrblock.cpp +369 -0
- data/vendor/tesseract-2.04/ccstruct/ocrblock.h +235 -0
- data/vendor/tesseract-2.04/ccstruct/ocrrow.cpp +216 -0
- data/vendor/tesseract-2.04/ccstruct/ocrrow.h +133 -0
- data/vendor/tesseract-2.04/ccstruct/pageblk.cpp +879 -0
- data/vendor/tesseract-2.04/ccstruct/pageblk.h +318 -0
- data/vendor/tesseract-2.04/ccstruct/pageres.cpp +330 -0
- data/vendor/tesseract-2.04/ccstruct/pageres.h +313 -0
- data/vendor/tesseract-2.04/ccstruct/pdblock.cpp +361 -0
- data/vendor/tesseract-2.04/ccstruct/pdblock.h +181 -0
- data/vendor/tesseract-2.04/ccstruct/pdclass.h +54 -0
- data/vendor/tesseract-2.04/ccstruct/points.cpp +102 -0
- data/vendor/tesseract-2.04/ccstruct/points.h +299 -0
- data/vendor/tesseract-2.04/ccstruct/polyaprx.cpp +588 -0
- data/vendor/tesseract-2.04/ccstruct/polyaprx.h +51 -0
- data/vendor/tesseract-2.04/ccstruct/polyblk.cpp +398 -0
- data/vendor/tesseract-2.04/ccstruct/polyblk.h +122 -0
- data/vendor/tesseract-2.04/ccstruct/polyblob.cpp +357 -0
- data/vendor/tesseract-2.04/ccstruct/polyblob.h +102 -0
- data/vendor/tesseract-2.04/ccstruct/polyvert.cpp +23 -0
- data/vendor/tesseract-2.04/ccstruct/polyvert.h +58 -0
- data/vendor/tesseract-2.04/ccstruct/poutline.cpp +441 -0
- data/vendor/tesseract-2.04/ccstruct/poutline.h +125 -0
- data/vendor/tesseract-2.04/ccstruct/quadlsq.cpp +147 -0
- data/vendor/tesseract-2.04/ccstruct/quadlsq.h +67 -0
- data/vendor/tesseract-2.04/ccstruct/quadratc.cpp +21 -0
- data/vendor/tesseract-2.04/ccstruct/quadratc.h +63 -0
- data/vendor/tesseract-2.04/ccstruct/quspline.cpp +382 -0
- data/vendor/tesseract-2.04/ccstruct/quspline.h +113 -0
- data/vendor/tesseract-2.04/ccstruct/ratngs.cpp +372 -0
- data/vendor/tesseract-2.04/ccstruct/ratngs.h +198 -0
- data/vendor/tesseract-2.04/ccstruct/rect.cpp +229 -0
- data/vendor/tesseract-2.04/ccstruct/rect.h +320 -0
- data/vendor/tesseract-2.04/ccstruct/rejctmap.cpp +545 -0
- data/vendor/tesseract-2.04/ccstruct/rejctmap.h +284 -0
- data/vendor/tesseract-2.04/ccstruct/rwpoly.cpp +89 -0
- data/vendor/tesseract-2.04/ccstruct/rwpoly.h +45 -0
- data/vendor/tesseract-2.04/ccstruct/statistc.cpp +905 -0
- data/vendor/tesseract-2.04/ccstruct/statistc.h +135 -0
- data/vendor/tesseract-2.04/ccstruct/stepblob.cpp +296 -0
- data/vendor/tesseract-2.04/ccstruct/stepblob.h +88 -0
- data/vendor/tesseract-2.04/ccstruct/txtregn.cpp +230 -0
- data/vendor/tesseract-2.04/ccstruct/txtregn.h +155 -0
- data/vendor/tesseract-2.04/ccstruct/vecfuncs.cpp +63 -0
- data/vendor/tesseract-2.04/ccstruct/vecfuncs.h +91 -0
- data/vendor/tesseract-2.04/ccstruct/werd.cpp +967 -0
- data/vendor/tesseract-2.04/ccstruct/werd.h +277 -0
- data/vendor/tesseract-2.04/ccutil/Makefile.am +19 -0
- data/vendor/tesseract-2.04/ccutil/Makefile.in +626 -0
- data/vendor/tesseract-2.04/ccutil/basedir.cpp +118 -0
- data/vendor/tesseract-2.04/ccutil/basedir.h +32 -0
- data/vendor/tesseract-2.04/ccutil/bits16.cpp +30 -0
- data/vendor/tesseract-2.04/ccutil/bits16.h +61 -0
- data/vendor/tesseract-2.04/ccutil/boxread.cpp +105 -0
- data/vendor/tesseract-2.04/ccutil/boxread.h +44 -0
- data/vendor/tesseract-2.04/ccutil/clst.cpp +626 -0
- data/vendor/tesseract-2.04/ccutil/clst.h +1085 -0
- data/vendor/tesseract-2.04/ccutil/debugwin.cpp +500 -0
- data/vendor/tesseract-2.04/ccutil/debugwin.h +103 -0
- data/vendor/tesseract-2.04/ccutil/elst.cpp +593 -0
- data/vendor/tesseract-2.04/ccutil/elst.h +1125 -0
- data/vendor/tesseract-2.04/ccutil/elst2.cpp +606 -0
- data/vendor/tesseract-2.04/ccutil/elst2.h +1121 -0
- data/vendor/tesseract-2.04/ccutil/errcode.cpp +104 -0
- data/vendor/tesseract-2.04/ccutil/errcode.h +104 -0
- data/vendor/tesseract-2.04/ccutil/fileerr.h +34 -0
- data/vendor/tesseract-2.04/ccutil/globaloc.cpp +115 -0
- data/vendor/tesseract-2.04/ccutil/globaloc.h +40 -0
- data/vendor/tesseract-2.04/ccutil/hashfn.cpp +57 -0
- data/vendor/tesseract-2.04/ccutil/hashfn.h +30 -0
- data/vendor/tesseract-2.04/ccutil/host.h +180 -0
- data/vendor/tesseract-2.04/ccutil/hosthplb.h +1 -0
- data/vendor/tesseract-2.04/ccutil/lsterr.h +43 -0
- data/vendor/tesseract-2.04/ccutil/mainblk.cpp +126 -0
- data/vendor/tesseract-2.04/ccutil/mainblk.h +39 -0
- data/vendor/tesseract-2.04/ccutil/memblk.cpp +1106 -0
- data/vendor/tesseract-2.04/ccutil/memblk.h +189 -0
- data/vendor/tesseract-2.04/ccutil/memry.cpp +532 -0
- data/vendor/tesseract-2.04/ccutil/memry.h +192 -0
- data/vendor/tesseract-2.04/ccutil/memryerr.h +38 -0
- data/vendor/tesseract-2.04/ccutil/mfcpch.cpp +5 -0
- data/vendor/tesseract-2.04/ccutil/mfcpch.h +37 -0
- data/vendor/tesseract-2.04/ccutil/ndminx.h +31 -0
- data/vendor/tesseract-2.04/ccutil/notdll.h +28 -0
- data/vendor/tesseract-2.04/ccutil/nwmain.h +176 -0
- data/vendor/tesseract-2.04/ccutil/ocrclass.h +345 -0
- data/vendor/tesseract-2.04/ccutil/ocrshell.cpp +772 -0
- data/vendor/tesseract-2.04/ccutil/ocrshell.h +191 -0
- data/vendor/tesseract-2.04/ccutil/platform.h +18 -0
- data/vendor/tesseract-2.04/ccutil/scanutils.cpp +543 -0
- data/vendor/tesseract-2.04/ccutil/scanutils.h +55 -0
- data/vendor/tesseract-2.04/ccutil/secname.h +9 -0
- data/vendor/tesseract-2.04/ccutil/serialis.cpp +117 -0
- data/vendor/tesseract-2.04/ccutil/serialis.h +93 -0
- data/vendor/tesseract-2.04/ccutil/stderr.h +26 -0
- data/vendor/tesseract-2.04/ccutil/strngs.cpp +495 -0
- data/vendor/tesseract-2.04/ccutil/strngs.h +138 -0
- data/vendor/tesseract-2.04/ccutil/tessclas.h +135 -0
- data/vendor/tesseract-2.04/ccutil/tessopt.cpp +61 -0
- data/vendor/tesseract-2.04/ccutil/tessopt.h +30 -0
- data/vendor/tesseract-2.04/ccutil/tprintf.cpp +122 -0
- data/vendor/tesseract-2.04/ccutil/tprintf.h +35 -0
- data/vendor/tesseract-2.04/ccutil/unichar.cpp +144 -0
- data/vendor/tesseract-2.04/ccutil/unichar.h +84 -0
- data/vendor/tesseract-2.04/ccutil/unicharmap.cpp +172 -0
- data/vendor/tesseract-2.04/ccutil/unicharmap.h +82 -0
- data/vendor/tesseract-2.04/ccutil/unicharset.cpp +307 -0
- data/vendor/tesseract-2.04/ccutil/unicharset.h +267 -0
- data/vendor/tesseract-2.04/ccutil/varable.cpp +672 -0
- data/vendor/tesseract-2.04/ccutil/varable.h +419 -0
- data/vendor/tesseract-2.04/classify/Makefile.am +24 -0
- data/vendor/tesseract-2.04/classify/Makefile.in +647 -0
- data/vendor/tesseract-2.04/classify/adaptive.cpp +535 -0
- data/vendor/tesseract-2.04/classify/adaptive.h +199 -0
- data/vendor/tesseract-2.04/classify/adaptmatch.cpp +2958 -0
- data/vendor/tesseract-2.04/classify/adaptmatch.h +86 -0
- data/vendor/tesseract-2.04/classify/baseline.cpp +58 -0
- data/vendor/tesseract-2.04/classify/baseline.h +91 -0
- data/vendor/tesseract-2.04/classify/blobclass.cpp +123 -0
- data/vendor/tesseract-2.04/classify/blobclass.h +49 -0
- data/vendor/tesseract-2.04/classify/chartoname.cpp +74 -0
- data/vendor/tesseract-2.04/classify/chartoname.h +21 -0
- data/vendor/tesseract-2.04/classify/cluster.cpp +2834 -0
- data/vendor/tesseract-2.04/classify/cluster.h +158 -0
- data/vendor/tesseract-2.04/classify/clusttool.cpp +507 -0
- data/vendor/tesseract-2.04/classify/clusttool.h +70 -0
- data/vendor/tesseract-2.04/classify/cutoffs.cpp +73 -0
- data/vendor/tesseract-2.04/classify/cutoffs.h +49 -0
- data/vendor/tesseract-2.04/classify/extern.h +32 -0
- data/vendor/tesseract-2.04/classify/extract.cpp +100 -0
- data/vendor/tesseract-2.04/classify/extract.h +36 -0
- data/vendor/tesseract-2.04/classify/featdefs.cpp +244 -0
- data/vendor/tesseract-2.04/classify/featdefs.h +71 -0
- data/vendor/tesseract-2.04/classify/flexfx.cpp +87 -0
- data/vendor/tesseract-2.04/classify/flexfx.h +34 -0
- data/vendor/tesseract-2.04/classify/float2int.cpp +126 -0
- data/vendor/tesseract-2.04/classify/float2int.h +65 -0
- data/vendor/tesseract-2.04/classify/fpoint.cpp +73 -0
- data/vendor/tesseract-2.04/classify/fpoint.h +63 -0
- data/vendor/tesseract-2.04/classify/fxdefs.cpp +74 -0
- data/vendor/tesseract-2.04/classify/fxdefs.h +93 -0
- data/vendor/tesseract-2.04/classify/fxid.h +69 -0
- data/vendor/tesseract-2.04/classify/hideedge.cpp +35 -0
- data/vendor/tesseract-2.04/classify/hideedge.h +76 -0
- data/vendor/tesseract-2.04/classify/intfx.cpp +608 -0
- data/vendor/tesseract-2.04/classify/intfx.h +63 -0
- data/vendor/tesseract-2.04/classify/intmatcher.cpp +1524 -0
- data/vendor/tesseract-2.04/classify/intmatcher.h +199 -0
- data/vendor/tesseract-2.04/classify/intproto.cpp +1823 -0
- data/vendor/tesseract-2.04/classify/intproto.h +320 -0
- data/vendor/tesseract-2.04/classify/kdtree.cpp +884 -0
- data/vendor/tesseract-2.04/classify/kdtree.h +118 -0
- data/vendor/tesseract-2.04/classify/mf.cpp +106 -0
- data/vendor/tesseract-2.04/classify/mf.h +43 -0
- data/vendor/tesseract-2.04/classify/mfdefs.cpp +58 -0
- data/vendor/tesseract-2.04/classify/mfdefs.h +60 -0
- data/vendor/tesseract-2.04/classify/mfoutline.cpp +1087 -0
- data/vendor/tesseract-2.04/classify/mfoutline.h +277 -0
- data/vendor/tesseract-2.04/classify/mfx.cpp +436 -0
- data/vendor/tesseract-2.04/classify/mfx.h +52 -0
- data/vendor/tesseract-2.04/classify/normfeat.cpp +132 -0
- data/vendor/tesseract-2.04/classify/normfeat.h +63 -0
- data/vendor/tesseract-2.04/classify/normmatch.cpp +305 -0
- data/vendor/tesseract-2.04/classify/normmatch.h +38 -0
- data/vendor/tesseract-2.04/classify/ocrfeatures.cpp +310 -0
- data/vendor/tesseract-2.04/classify/ocrfeatures.h +148 -0
- data/vendor/tesseract-2.04/classify/outfeat.cpp +262 -0
- data/vendor/tesseract-2.04/classify/outfeat.h +76 -0
- data/vendor/tesseract-2.04/classify/picofeat.cpp +297 -0
- data/vendor/tesseract-2.04/classify/picofeat.h +65 -0
- data/vendor/tesseract-2.04/classify/protos.cpp +472 -0
- data/vendor/tesseract-2.04/classify/protos.h +258 -0
- data/vendor/tesseract-2.04/classify/sigmenu.cpp +225 -0
- data/vendor/tesseract-2.04/classify/sigmenu.h +39 -0
- data/vendor/tesseract-2.04/classify/speckle.cpp +127 -0
- data/vendor/tesseract-2.04/classify/speckle.h +69 -0
- data/vendor/tesseract-2.04/classify/xform2d.cpp +120 -0
- data/vendor/tesseract-2.04/classify/xform2d.h +60 -0
- data/vendor/tesseract-2.04/config/config.guess +1466 -0
- data/vendor/tesseract-2.04/config/config.h.in +188 -0
- data/vendor/tesseract-2.04/config/config.sub +1579 -0
- data/vendor/tesseract-2.04/config/depcomp +530 -0
- data/vendor/tesseract-2.04/config/install-sh +269 -0
- data/vendor/tesseract-2.04/config/missing +198 -0
- data/vendor/tesseract-2.04/config/mkinstalldirs +40 -0
- data/vendor/tesseract-2.04/config/stamp-h.in +0 -0
- data/vendor/tesseract-2.04/configure +10424 -0
- data/vendor/tesseract-2.04/cutil/Makefile.am +14 -0
- data/vendor/tesseract-2.04/cutil/Makefile.in +612 -0
- data/vendor/tesseract-2.04/cutil/bitvec.cpp +115 -0
- data/vendor/tesseract-2.04/cutil/bitvec.h +100 -0
- data/vendor/tesseract-2.04/cutil/callcpp.h +190 -0
- data/vendor/tesseract-2.04/cutil/const.h +108 -0
- data/vendor/tesseract-2.04/cutil/cutil.cpp +92 -0
- data/vendor/tesseract-2.04/cutil/cutil.h +159 -0
- data/vendor/tesseract-2.04/cutil/danerror.cpp +144 -0
- data/vendor/tesseract-2.04/cutil/danerror.h +41 -0
- data/vendor/tesseract-2.04/cutil/debug.cpp +97 -0
- data/vendor/tesseract-2.04/cutil/debug.h +348 -0
- data/vendor/tesseract-2.04/cutil/efio.cpp +62 -0
- data/vendor/tesseract-2.04/cutil/efio.h +32 -0
- data/vendor/tesseract-2.04/cutil/emalloc.cpp +91 -0
- data/vendor/tesseract-2.04/cutil/emalloc.h +44 -0
- data/vendor/tesseract-2.04/cutil/freelist.cpp +75 -0
- data/vendor/tesseract-2.04/cutil/freelist.h +45 -0
- data/vendor/tesseract-2.04/cutil/funcdefs.h +35 -0
- data/vendor/tesseract-2.04/cutil/general.h +33 -0
- data/vendor/tesseract-2.04/cutil/globals.cpp +69 -0
- data/vendor/tesseract-2.04/cutil/globals.h +70 -0
- data/vendor/tesseract-2.04/cutil/listio.cpp +68 -0
- data/vendor/tesseract-2.04/cutil/listio.h +43 -0
- data/vendor/tesseract-2.04/cutil/minmax.h +40 -0
- data/vendor/tesseract-2.04/cutil/oldheap.cpp +337 -0
- data/vendor/tesseract-2.04/cutil/oldheap.h +126 -0
- data/vendor/tesseract-2.04/cutil/oldlist.cpp +393 -0
- data/vendor/tesseract-2.04/cutil/oldlist.h +350 -0
- data/vendor/tesseract-2.04/cutil/structures.cpp +66 -0
- data/vendor/tesseract-2.04/cutil/structures.h +112 -0
- data/vendor/tesseract-2.04/cutil/tessarray.cpp +115 -0
- data/vendor/tesseract-2.04/cutil/tessarray.h +166 -0
- data/vendor/tesseract-2.04/cutil/tordvars.cpp +95 -0
- data/vendor/tesseract-2.04/cutil/tordvars.h +61 -0
- data/vendor/tesseract-2.04/cutil/variables.cpp +317 -0
- data/vendor/tesseract-2.04/cutil/variables.h +170 -0
- data/vendor/tesseract-2.04/dict/Makefile.am +13 -0
- data/vendor/tesseract-2.04/dict/Makefile.in +609 -0
- data/vendor/tesseract-2.04/dict/choicearr.h +96 -0
- data/vendor/tesseract-2.04/dict/choices.cpp +210 -0
- data/vendor/tesseract-2.04/dict/choices.h +241 -0
- data/vendor/tesseract-2.04/dict/context.cpp +270 -0
- data/vendor/tesseract-2.04/dict/context.h +82 -0
- data/vendor/tesseract-2.04/dict/dawg.cpp +363 -0
- data/vendor/tesseract-2.04/dict/dawg.h +394 -0
- data/vendor/tesseract-2.04/dict/hyphen.cpp +84 -0
- data/vendor/tesseract-2.04/dict/hyphen.h +125 -0
- data/vendor/tesseract-2.04/dict/lookdawg.cpp +228 -0
- data/vendor/tesseract-2.04/dict/lookdawg.h +76 -0
- data/vendor/tesseract-2.04/dict/makedawg.cpp +449 -0
- data/vendor/tesseract-2.04/dict/makedawg.h +83 -0
- data/vendor/tesseract-2.04/dict/matchdefs.h +145 -0
- data/vendor/tesseract-2.04/dict/permdawg.cpp +415 -0
- data/vendor/tesseract-2.04/dict/permdawg.h +98 -0
- data/vendor/tesseract-2.04/dict/permngram.cpp +358 -0
- data/vendor/tesseract-2.04/dict/permngram.h +33 -0
- data/vendor/tesseract-2.04/dict/permnum.cpp +522 -0
- data/vendor/tesseract-2.04/dict/permnum.h +83 -0
- data/vendor/tesseract-2.04/dict/permute.cpp +1704 -0
- data/vendor/tesseract-2.04/dict/permute.h +93 -0
- data/vendor/tesseract-2.04/dict/reduce.cpp +424 -0
- data/vendor/tesseract-2.04/dict/reduce.h +112 -0
- data/vendor/tesseract-2.04/dict/states.cpp +382 -0
- data/vendor/tesseract-2.04/dict/states.h +111 -0
- data/vendor/tesseract-2.04/dict/stopper.cpp +1458 -0
- data/vendor/tesseract-2.04/dict/stopper.h +103 -0
- data/vendor/tesseract-2.04/dict/trie.cpp +683 -0
- data/vendor/tesseract-2.04/dict/trie.h +190 -0
- data/vendor/tesseract-2.04/dlltest/Makefile.am +2 -0
- data/vendor/tesseract-2.04/dlltest/Makefile.in +388 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.cpp +163 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.dsp +186 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.vcproj +637 -0
- data/vendor/tesseract-2.04/eurotext.tif +0 -0
- data/vendor/tesseract-2.04/image/Makefile.am +10 -0
- data/vendor/tesseract-2.04/image/Makefile.in +596 -0
- data/vendor/tesseract-2.04/image/bitstrm.cpp +157 -0
- data/vendor/tesseract-2.04/image/bitstrm.h +73 -0
- data/vendor/tesseract-2.04/image/img.h +336 -0
- data/vendor/tesseract-2.04/image/imgbmp.cpp +223 -0
- data/vendor/tesseract-2.04/image/imgbmp.h +50 -0
- data/vendor/tesseract-2.04/image/imgerrs.h +35 -0
- data/vendor/tesseract-2.04/image/imgio.cpp +321 -0
- data/vendor/tesseract-2.04/image/imgio.h +22 -0
- data/vendor/tesseract-2.04/image/imgs.cpp +1764 -0
- data/vendor/tesseract-2.04/image/imgs.h +102 -0
- data/vendor/tesseract-2.04/image/imgtiff.cpp +723 -0
- data/vendor/tesseract-2.04/image/imgtiff.h +89 -0
- data/vendor/tesseract-2.04/image/imgunpk.h +1377 -0
- data/vendor/tesseract-2.04/image/svshowim.cpp +40 -0
- data/vendor/tesseract-2.04/image/svshowim.h +25 -0
- data/vendor/tesseract-2.04/java/Makefile.am +4 -0
- data/vendor/tesseract-2.04/java/Makefile.in +473 -0
- data/vendor/tesseract-2.04/java/com/Makefile.am +1 -0
- data/vendor/tesseract-2.04/java/com/Makefile.in +470 -0
- data/vendor/tesseract-2.04/java/com/google/Makefile.am +1 -0
- data/vendor/tesseract-2.04/java/com/google/Makefile.in +470 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.am +4 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.in +473 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ScrollView.java +421 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.am +5 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.in +474 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEvent.java +87 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventHandler.java +296 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventType.java +31 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.am +7 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.in +476 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVAbstractMenuItem.java +58 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVCheckboxMenuItem.java +60 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVEmptyMenuItem.java +48 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVImageHandler.java +228 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuBar.java +130 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuItem.java +61 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVPopupMenu.java +142 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVSubMenuItem.java +41 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVWindow.java +643 -0
- data/vendor/tesseract-2.04/java/makefile +55 -0
- data/vendor/tesseract-2.04/pageseg/Makefile.am +13 -0
- data/vendor/tesseract-2.04/pageseg/Makefile.in +596 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.cpp +363 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.h +90 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.cpp +82 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.h +30 -0
- data/vendor/tesseract-2.04/pageseg/pageseg.cpp +170 -0
- data/vendor/tesseract-2.04/pageseg/pageseg.h +29 -0
- data/vendor/tesseract-2.04/phototest.tif +0 -0
- data/vendor/tesseract-2.04/tessdata/Makefile.am +31 -0
- data/vendor/tesseract-2.04/tessdata/Makefile.in +529 -0
- data/vendor/tesseract-2.04/tessdata/configs/Makefile.am +3 -0
- data/vendor/tesseract-2.04/tessdata/configs/Makefile.in +344 -0
- data/vendor/tesseract-2.04/tessdata/configs/api_config +1 -0
- data/vendor/tesseract-2.04/tessdata/configs/box.train +19 -0
- data/vendor/tesseract-2.04/tessdata/configs/box.train.stderr +18 -0
- data/vendor/tesseract-2.04/tessdata/configs/inter +4 -0
- data/vendor/tesseract-2.04/tessdata/configs/kannada +4 -0
- data/vendor/tesseract-2.04/tessdata/configs/makebox +1 -0
- data/vendor/tesseract-2.04/tessdata/configs/unlv +3 -0
- data/vendor/tesseract-2.04/tessdata/confsets +3 -0
- data/vendor/tesseract-2.04/tessdata/eng.DangAmbigs +39 -0
- data/vendor/tesseract-2.04/tessdata/eng.freq-dawg +0 -0
- data/vendor/tesseract-2.04/tessdata/eng.inttemp +0 -0
- data/vendor/tesseract-2.04/tessdata/eng.normproto +1247 -0
- data/vendor/tesseract-2.04/tessdata/eng.pffmtable +111 -0
- data/vendor/tesseract-2.04/tessdata/eng.unicharset +113 -0
- data/vendor/tesseract-2.04/tessdata/eng.user-words +921 -0
- data/vendor/tesseract-2.04/tessdata/eng.word-dawg +0 -0
- data/vendor/tesseract-2.04/tessdata/makedummies +8 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.am +3 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.in +344 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/batch +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/batch.nochop +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/matdemo +7 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/msdemo +13 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/nobatch +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/segdemo +9 -0
- data/vendor/tesseract-2.04/tessdll.cpp +351 -0
- data/vendor/tesseract-2.04/tessdll.dsp +2050 -0
- data/vendor/tesseract-2.04/tessdll.h +143 -0
- data/vendor/tesseract-2.04/tessdll.vcproj +5495 -0
- data/vendor/tesseract-2.04/tesseract.dsp +2124 -0
- data/vendor/tesseract-2.04/tesseract.dsw +116 -0
- data/vendor/tesseract-2.04/tesseract.sln +59 -0
- data/vendor/tesseract-2.04/tesseract.spec +188 -0
- data/vendor/tesseract-2.04/tesseract.vcproj +5859 -0
- data/vendor/tesseract-2.04/testing/Makefile.am +2 -0
- data/vendor/tesseract-2.04/testing/Makefile.in +312 -0
- data/vendor/tesseract-2.04/testing/README +43 -0
- data/vendor/tesseract-2.04/testing/counttestset.sh +61 -0
- data/vendor/tesseract-2.04/testing/reorgdata.sh +44 -0
- data/vendor/tesseract-2.04/testing/reports/1995.bus.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.doe3.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.mag.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.news.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/2.03.summary +9 -0
- data/vendor/tesseract-2.04/testing/reports/2.04.summary +9 -0
- data/vendor/tesseract-2.04/testing/runalltests.sh +110 -0
- data/vendor/tesseract-2.04/testing/runtestset.sh +61 -0
- data/vendor/tesseract-2.04/textord/Makefile.am +20 -0
- data/vendor/tesseract-2.04/textord/Makefile.in +624 -0
- data/vendor/tesseract-2.04/textord/blkocc.cpp +809 -0
- data/vendor/tesseract-2.04/textord/blkocc.h +327 -0
- data/vendor/tesseract-2.04/textord/blobcmpl.h +31 -0
- data/vendor/tesseract-2.04/textord/drawedg.cpp +77 -0
- data/vendor/tesseract-2.04/textord/drawedg.h +34 -0
- data/vendor/tesseract-2.04/textord/drawtord.cpp +469 -0
- data/vendor/tesseract-2.04/textord/drawtord.h +107 -0
- data/vendor/tesseract-2.04/textord/edgblob.cpp +412 -0
- data/vendor/tesseract-2.04/textord/edgblob.h +100 -0
- data/vendor/tesseract-2.04/textord/edgloop.cpp +211 -0
- data/vendor/tesseract-2.04/textord/edgloop.h +66 -0
- data/vendor/tesseract-2.04/textord/fpchop.cpp +1641 -0
- data/vendor/tesseract-2.04/textord/fpchop.h +238 -0
- data/vendor/tesseract-2.04/textord/gap_map.cpp +166 -0
- data/vendor/tesseract-2.04/textord/gap_map.h +40 -0
- data/vendor/tesseract-2.04/textord/makerow.cpp +2628 -0
- data/vendor/tesseract-2.04/textord/makerow.h +295 -0
- data/vendor/tesseract-2.04/textord/oldbasel.cpp +1761 -0
- data/vendor/tesseract-2.04/textord/oldbasel.h +195 -0
- data/vendor/tesseract-2.04/textord/pithsync.cpp +696 -0
- data/vendor/tesseract-2.04/textord/pithsync.h +134 -0
- data/vendor/tesseract-2.04/textord/pitsync1.cpp +425 -0
- data/vendor/tesseract-2.04/textord/pitsync1.h +135 -0
- data/vendor/tesseract-2.04/textord/scanedg.cpp +452 -0
- data/vendor/tesseract-2.04/textord/scanedg.h +74 -0
- data/vendor/tesseract-2.04/textord/sortflts.cpp +80 -0
- data/vendor/tesseract-2.04/textord/sortflts.h +64 -0
- data/vendor/tesseract-2.04/textord/tessout.h +76 -0
- data/vendor/tesseract-2.04/textord/topitch.cpp +2019 -0
- data/vendor/tesseract-2.04/textord/topitch.h +195 -0
- data/vendor/tesseract-2.04/textord/tordmain.cpp +907 -0
- data/vendor/tesseract-2.04/textord/tordmain.h +132 -0
- data/vendor/tesseract-2.04/textord/tospace.cpp +1939 -0
- data/vendor/tesseract-2.04/textord/tospace.h +193 -0
- data/vendor/tesseract-2.04/textord/tovars.cpp +87 -0
- data/vendor/tesseract-2.04/textord/tovars.h +94 -0
- data/vendor/tesseract-2.04/textord/underlin.cpp +312 -0
- data/vendor/tesseract-2.04/textord/underlin.h +53 -0
- data/vendor/tesseract-2.04/textord/wordseg.cpp +620 -0
- data/vendor/tesseract-2.04/textord/wordseg.h +70 -0
- data/vendor/tesseract-2.04/training/Makefile.am +54 -0
- data/vendor/tesseract-2.04/training/Makefile.in +720 -0
- data/vendor/tesseract-2.04/training/cnTraining.cpp +855 -0
- data/vendor/tesseract-2.04/training/cntraining.dsp +243 -0
- data/vendor/tesseract-2.04/training/cntraining.vcproj +950 -0
- data/vendor/tesseract-2.04/training/mergenf.cpp +451 -0
- data/vendor/tesseract-2.04/training/mergenf.h +106 -0
- data/vendor/tesseract-2.04/training/mfTraining.cpp +1341 -0
- data/vendor/tesseract-2.04/training/mftraining.dsp +285 -0
- data/vendor/tesseract-2.04/training/mftraining.vcproj +1055 -0
- data/vendor/tesseract-2.04/training/name2char.cpp +166 -0
- data/vendor/tesseract-2.04/training/name2char.h +38 -0
- data/vendor/tesseract-2.04/training/training.cpp +190 -0
- data/vendor/tesseract-2.04/training/training.h +130 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.cpp +140 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.dsp +335 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.vcproj +769 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.cpp +69 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.dsp +319 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.vcproj +1113 -0
- data/vendor/tesseract-2.04/viewer/Makefile.am +9 -0
- data/vendor/tesseract-2.04/viewer/Makefile.in +591 -0
- data/vendor/tesseract-2.04/viewer/scrollview.cpp +825 -0
- data/vendor/tesseract-2.04/viewer/scrollview.h +414 -0
- data/vendor/tesseract-2.04/viewer/svmnode.cpp +140 -0
- data/vendor/tesseract-2.04/viewer/svmnode.h +94 -0
- data/vendor/tesseract-2.04/viewer/svpaint.cpp +220 -0
- data/vendor/tesseract-2.04/viewer/svutil.cpp +347 -0
- data/vendor/tesseract-2.04/viewer/svutil.h +138 -0
- data/vendor/tesseract-2.04/wordrec/Makefile.am +23 -0
- data/vendor/tesseract-2.04/wordrec/Makefile.in +641 -0
- data/vendor/tesseract-2.04/wordrec/associate.cpp +62 -0
- data/vendor/tesseract-2.04/wordrec/associate.h +93 -0
- data/vendor/tesseract-2.04/wordrec/badwords.cpp +106 -0
- data/vendor/tesseract-2.04/wordrec/badwords.h +51 -0
- data/vendor/tesseract-2.04/wordrec/bestfirst.cpp +526 -0
- data/vendor/tesseract-2.04/wordrec/bestfirst.h +203 -0
- data/vendor/tesseract-2.04/wordrec/charsample.h +208 -0
- data/vendor/tesseract-2.04/wordrec/chop.cpp +458 -0
- data/vendor/tesseract-2.04/wordrec/chop.h +153 -0
- data/vendor/tesseract-2.04/wordrec/chopper.cpp +750 -0
- data/vendor/tesseract-2.04/wordrec/chopper.h +104 -0
- data/vendor/tesseract-2.04/wordrec/closed.cpp +136 -0
- data/vendor/tesseract-2.04/wordrec/closed.h +65 -0
- data/vendor/tesseract-2.04/wordrec/djmenus.cpp +118 -0
- data/vendor/tesseract-2.04/wordrec/djmenus.h +33 -0
- data/vendor/tesseract-2.04/wordrec/drawfx.cpp +92 -0
- data/vendor/tesseract-2.04/wordrec/drawfx.h +33 -0
- data/vendor/tesseract-2.04/wordrec/findseam.cpp +566 -0
- data/vendor/tesseract-2.04/wordrec/findseam.h +69 -0
- data/vendor/tesseract-2.04/wordrec/gradechop.cpp +226 -0
- data/vendor/tesseract-2.04/wordrec/gradechop.h +91 -0
- data/vendor/tesseract-2.04/wordrec/heuristic.cpp +194 -0
- data/vendor/tesseract-2.04/wordrec/heuristic.h +120 -0
- data/vendor/tesseract-2.04/wordrec/makechop.cpp +281 -0
- data/vendor/tesseract-2.04/wordrec/makechop.h +69 -0
- data/vendor/tesseract-2.04/wordrec/matchtab.cpp +191 -0
- data/vendor/tesseract-2.04/wordrec/matchtab.h +45 -0
- data/vendor/tesseract-2.04/wordrec/matrix.cpp +118 -0
- data/vendor/tesseract-2.04/wordrec/matrix.h +104 -0
- data/vendor/tesseract-2.04/wordrec/measure.h +135 -0
- data/vendor/tesseract-2.04/wordrec/metrics.cpp +363 -0
- data/vendor/tesseract-2.04/wordrec/metrics.h +130 -0
- data/vendor/tesseract-2.04/wordrec/mfvars.cpp +51 -0
- data/vendor/tesseract-2.04/wordrec/mfvars.h +27 -0
- data/vendor/tesseract-2.04/wordrec/msmenus.cpp +110 -0
- data/vendor/tesseract-2.04/wordrec/msmenus.h +45 -0
- data/vendor/tesseract-2.04/wordrec/olutil.cpp +153 -0
- data/vendor/tesseract-2.04/wordrec/olutil.h +128 -0
- data/vendor/tesseract-2.04/wordrec/outlines.cpp +172 -0
- data/vendor/tesseract-2.04/wordrec/outlines.h +148 -0
- data/vendor/tesseract-2.04/wordrec/pieces.cpp +410 -0
- data/vendor/tesseract-2.04/wordrec/pieces.h +154 -0
- data/vendor/tesseract-2.04/wordrec/plotedges.cpp +134 -0
- data/vendor/tesseract-2.04/wordrec/plotedges.h +71 -0
- data/vendor/tesseract-2.04/wordrec/plotseg.cpp +116 -0
- data/vendor/tesseract-2.04/wordrec/plotseg.h +73 -0
- data/vendor/tesseract-2.04/wordrec/render.cpp +152 -0
- data/vendor/tesseract-2.04/wordrec/render.h +58 -0
- data/vendor/tesseract-2.04/wordrec/seam.cpp +482 -0
- data/vendor/tesseract-2.04/wordrec/seam.h +136 -0
- data/vendor/tesseract-2.04/wordrec/split.cpp +182 -0
- data/vendor/tesseract-2.04/wordrec/split.h +115 -0
- data/vendor/tesseract-2.04/wordrec/tally.cpp +68 -0
- data/vendor/tesseract-2.04/wordrec/tally.h +94 -0
- data/vendor/tesseract-2.04/wordrec/tessinit.cpp +108 -0
- data/vendor/tesseract-2.04/wordrec/tessinit.h +46 -0
- data/vendor/tesseract-2.04/wordrec/tface.cpp +272 -0
- data/vendor/tesseract-2.04/wordrec/tface.h +35 -0
- data/vendor/tesseract-2.04/wordrec/wordclass.cpp +284 -0
- data/vendor/tesseract-2.04/wordrec/wordclass.h +64 -0
- metadata +708 -0
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
/**********************************************************************
|
|
2
|
+
* File: poutline.cpp (Formerly outline.c)
|
|
3
|
+
* Description: Code for OUTLINE class.
|
|
4
|
+
* Author: Ray Smith
|
|
5
|
+
* Created: Wed Oct 23 10:52:04 BST 1991
|
|
6
|
+
*
|
|
7
|
+
* (C) Copyright 1991, Hewlett-Packard Ltd.
|
|
8
|
+
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
** you may not use this file except in compliance with the License.
|
|
10
|
+
** You may obtain a copy of the License at
|
|
11
|
+
** http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
** Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
** See the License for the specific language governing permissions and
|
|
16
|
+
** limitations under the License.
|
|
17
|
+
*
|
|
18
|
+
**********************************************************************/
|
|
19
|
+
|
|
20
|
+
#include "mfcpch.h"
|
|
21
|
+
#include "poutline.h"
|
|
22
|
+
|
|
23
|
+
ELISTIZE_S (OUTLINE)
|
|
24
|
+
/**********************************************************************
|
|
25
|
+
* OUTLINE::OUTLINE
|
|
26
|
+
*
|
|
27
|
+
* Constructor to build a OUTLINE from a compact LOOP.
|
|
28
|
+
**********************************************************************/
|
|
29
|
+
OUTLINE::OUTLINE ( //constructor
|
|
30
|
+
const ICOORD & startpt, //start position
|
|
31
|
+
inT8 * compactloop, //from Tess format
|
|
32
|
+
BOOL8 invert, //reverse it
|
|
33
|
+
ICOORD bot_left, //bounding box
|
|
34
|
+
ICOORD top_right):
|
|
35
|
+
box (bot_left, top_right),
|
|
36
|
+
start(startpt) {
|
|
37
|
+
ICOORD pos; //current point
|
|
38
|
+
ICOORD vec; //vector to next
|
|
39
|
+
POLYPT *polypt; //new point
|
|
40
|
+
inT8 *vector; //compact loop
|
|
41
|
+
POLYPT_IT it = &outline; //iterator
|
|
42
|
+
|
|
43
|
+
pos = startpt;
|
|
44
|
+
vector = compactloop;
|
|
45
|
+
do {
|
|
46
|
+
//vector to next
|
|
47
|
+
vec = ICOORD (*vector, *(vector + 1));
|
|
48
|
+
//make a new one
|
|
49
|
+
polypt = new POLYPT (FCOORD (pos), FCOORD (vec));
|
|
50
|
+
//add to list
|
|
51
|
+
it.add_after_then_move (polypt);
|
|
52
|
+
pos += vec; //move to next
|
|
53
|
+
vector += 2;
|
|
54
|
+
}
|
|
55
|
+
while (pos != startpt);
|
|
56
|
+
if (invert)
|
|
57
|
+
reverse(); //now reverse it
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
/**********************************************************************
|
|
62
|
+
* OUTLINE::OUTLINE
|
|
63
|
+
*
|
|
64
|
+
* Constructor to build an OUTLINE from a list of POLYPTs.
|
|
65
|
+
**********************************************************************/
|
|
66
|
+
|
|
67
|
+
OUTLINE::OUTLINE( //constructor
|
|
68
|
+
POLYPT_IT *polypts //input list
|
|
69
|
+
) {
|
|
70
|
+
POLYPT_IT other_it = *polypts; //end of list
|
|
71
|
+
|
|
72
|
+
polypts->move_to_first ();
|
|
73
|
+
other_it.move_to_last ();
|
|
74
|
+
//put in outline
|
|
75
|
+
outline.assign_to_sublist (polypts, &other_it);
|
|
76
|
+
compute_bb();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
/**********************************************************************
|
|
81
|
+
* OUTLINE::compute_bb
|
|
82
|
+
*
|
|
83
|
+
* Compute the bounding box from the outline points.
|
|
84
|
+
**********************************************************************/
|
|
85
|
+
|
|
86
|
+
void OUTLINE::compute_bb() { //constructor
|
|
87
|
+
ICOORD ibl, itr; //integer bb
|
|
88
|
+
FCOORD botleft; //bounding box
|
|
89
|
+
FCOORD topright;
|
|
90
|
+
FCOORD pos; //current pos;
|
|
91
|
+
POLYPT_IT polypts = &outline; //iterator
|
|
92
|
+
|
|
93
|
+
botleft = polypts.data ()->pos;
|
|
94
|
+
topright = botleft;
|
|
95
|
+
start = ICOORD ((inT16) botleft.x (), (inT16) botleft.y ());
|
|
96
|
+
do {
|
|
97
|
+
pos = polypts.data ()->pos;
|
|
98
|
+
if (pos.x () < botleft.x ())
|
|
99
|
+
//get bounding box
|
|
100
|
+
botleft = FCOORD (pos.x (), botleft.y ());
|
|
101
|
+
if (pos.y () < botleft.y ())
|
|
102
|
+
botleft = FCOORD (botleft.x (), pos.y ());
|
|
103
|
+
if (pos.x () > topright.x ())
|
|
104
|
+
topright = FCOORD (pos.x (), topright.y ());
|
|
105
|
+
if (pos.y () > topright.y ())
|
|
106
|
+
topright = FCOORD (topright.x (), pos.y ());
|
|
107
|
+
polypts.forward ();
|
|
108
|
+
}
|
|
109
|
+
while (!polypts.at_first ());
|
|
110
|
+
ibl = ICOORD ((inT16) botleft.x (), (inT16) botleft.y ());
|
|
111
|
+
itr = ICOORD ((inT16) topright.x () + 1, (inT16) topright.y () + 1);
|
|
112
|
+
box = TBOX (ibl, itr);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
/**********************************************************************
|
|
117
|
+
* OUTLINE::area
|
|
118
|
+
*
|
|
119
|
+
* Compute the area from the outline points.
|
|
120
|
+
**********************************************************************/
|
|
121
|
+
|
|
122
|
+
float OUTLINE::area() { //constructor
|
|
123
|
+
FCOORD origin; //startpt
|
|
124
|
+
FCOORD prev_vec; //previous value of vec
|
|
125
|
+
FCOORD vec; //from start to current
|
|
126
|
+
float total; //total area
|
|
127
|
+
POLYPT_IT poly_it = polypts ();//iterator
|
|
128
|
+
//child outline itertr
|
|
129
|
+
OUTLINE_IT child_it(&children);
|
|
130
|
+
|
|
131
|
+
origin = poly_it.data ()->pos;
|
|
132
|
+
poly_it.forward ();
|
|
133
|
+
vec = poly_it.data ()->pos - origin;
|
|
134
|
+
poly_it.forward ();
|
|
135
|
+
total = 0.0f;
|
|
136
|
+
while (!poly_it.at_first ()) {
|
|
137
|
+
prev_vec = vec;
|
|
138
|
+
vec = poly_it.data ()->pos - origin;
|
|
139
|
+
total += prev_vec * vec;
|
|
140
|
+
poly_it.forward ();
|
|
141
|
+
}
|
|
142
|
+
total /= 2;
|
|
143
|
+
for (child_it.mark_cycle_pt (); !child_it.cycled_list ();
|
|
144
|
+
child_it.forward ()) {
|
|
145
|
+
//add ares of childrein
|
|
146
|
+
total += child_it.data ()->area ();
|
|
147
|
+
}
|
|
148
|
+
return total;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
/**********************************************************************
|
|
153
|
+
* OUTLINE::operator<
|
|
154
|
+
*
|
|
155
|
+
* Return TRUE if the left operand is inside the right one.
|
|
156
|
+
**********************************************************************/
|
|
157
|
+
|
|
158
|
+
BOOL8
|
|
159
|
+
OUTLINE::operator< ( //winding number
|
|
160
|
+
OUTLINE & other //other outline
|
|
161
|
+
) {
|
|
162
|
+
inT16 count; //winding count
|
|
163
|
+
POLYPT_IT it = &outline; //iterator
|
|
164
|
+
|
|
165
|
+
if (!box.overlap (other.box))
|
|
166
|
+
return FALSE; //can't be contained
|
|
167
|
+
|
|
168
|
+
do {
|
|
169
|
+
count = other.winding_number (FCOORD (it.data ()->pos));
|
|
170
|
+
//get winding number
|
|
171
|
+
if (count != INTERSECTING)
|
|
172
|
+
return count != 0;
|
|
173
|
+
it.forward ();
|
|
174
|
+
}
|
|
175
|
+
while (!it.at_first ());
|
|
176
|
+
|
|
177
|
+
//switch lists
|
|
178
|
+
it.set_to_list (&other.outline);
|
|
179
|
+
do {
|
|
180
|
+
//try other way round
|
|
181
|
+
count = winding_number (FCOORD (it.data ()->pos));
|
|
182
|
+
if (count != INTERSECTING)
|
|
183
|
+
return count == 0;
|
|
184
|
+
it.forward ();
|
|
185
|
+
}
|
|
186
|
+
while (!it.at_first ());
|
|
187
|
+
return TRUE;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
/**********************************************************************
|
|
192
|
+
* OUTLINE::winding_number
|
|
193
|
+
*
|
|
194
|
+
* Return the winding number of the outline around the given point.
|
|
195
|
+
**********************************************************************/
|
|
196
|
+
|
|
197
|
+
inT16 OUTLINE::winding_number( //winding number
|
|
198
|
+
const FCOORD &point //point to wind around
|
|
199
|
+
) {
|
|
200
|
+
inT16 count; //winding count
|
|
201
|
+
POLYPT *polypt; //current point
|
|
202
|
+
FCOORD vec; //to current point
|
|
203
|
+
float cross; //cross product
|
|
204
|
+
POLYPT_IT it = &outline; //iterator
|
|
205
|
+
|
|
206
|
+
count = 0;
|
|
207
|
+
do {
|
|
208
|
+
polypt = it.data ();
|
|
209
|
+
vec = polypt->pos - point;
|
|
210
|
+
//crossing the line
|
|
211
|
+
if (vec.y () <= 0 && vec.y () + polypt->vec.y () > 0) {
|
|
212
|
+
cross = vec * polypt->vec; //cross product
|
|
213
|
+
if (cross > 0)
|
|
214
|
+
count++; //crossing right half
|
|
215
|
+
else if (cross == 0)
|
|
216
|
+
return INTERSECTING; //going through point
|
|
217
|
+
}
|
|
218
|
+
else if (vec.y () > 0 && vec.y () + polypt->vec.y () <= 0) {
|
|
219
|
+
cross = vec * polypt->vec;
|
|
220
|
+
if (cross < 0)
|
|
221
|
+
count--; //crossing back
|
|
222
|
+
else if (cross == 0)
|
|
223
|
+
return INTERSECTING; //illegal
|
|
224
|
+
}
|
|
225
|
+
it.forward ();
|
|
226
|
+
}
|
|
227
|
+
while (!it.at_first ());
|
|
228
|
+
return count; //winding number
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
/**********************************************************************
|
|
233
|
+
* OUTLINE::reverse
|
|
234
|
+
*
|
|
235
|
+
* Reverse the direction of an outline.
|
|
236
|
+
**********************************************************************/
|
|
237
|
+
|
|
238
|
+
void OUTLINE::reverse() { //reverse direction
|
|
239
|
+
POLYPT_LIST back_list; //reversed list
|
|
240
|
+
POLYPT_IT dest_it = &back_list;//destination
|
|
241
|
+
POLYPT_IT src_it = &outline; //source list
|
|
242
|
+
POLYPT *polypt; //current point
|
|
243
|
+
|
|
244
|
+
do {
|
|
245
|
+
polypt = src_it.extract ();
|
|
246
|
+
//copy in reverse
|
|
247
|
+
dest_it.add_after_then_move (polypt);
|
|
248
|
+
src_it.backward ();
|
|
249
|
+
}
|
|
250
|
+
while (!src_it.empty ());
|
|
251
|
+
dest_it.move_to_first ();
|
|
252
|
+
do {
|
|
253
|
+
polypt = dest_it.data ();
|
|
254
|
+
polypt->vec = dest_it.data_relative (1)->pos - polypt->pos;
|
|
255
|
+
//vector to next
|
|
256
|
+
dest_it.forward ();
|
|
257
|
+
}
|
|
258
|
+
while (!dest_it.at_first ());
|
|
259
|
+
dest_it.backward ();
|
|
260
|
+
src_it.set_to_list (&back_list);
|
|
261
|
+
//put it back
|
|
262
|
+
outline.assign_to_sublist (&src_it, &dest_it);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
/**********************************************************************
|
|
267
|
+
* OUTLINE::move
|
|
268
|
+
*
|
|
269
|
+
* Move OUTLINE by vector
|
|
270
|
+
**********************************************************************/
|
|
271
|
+
|
|
272
|
+
void OUTLINE::move( // reposition OUTLINE
|
|
273
|
+
const FCOORD vec // by vector
|
|
274
|
+
) {
|
|
275
|
+
//child outline itertr
|
|
276
|
+
OUTLINE_IT child_it(&children);
|
|
277
|
+
POLYPT_IT poly_it(&outline); //outline point itertr
|
|
278
|
+
|
|
279
|
+
box.move (vec);
|
|
280
|
+
|
|
281
|
+
start.set_x ((inT16) floor (start.x () + vec.x () + 0.5));
|
|
282
|
+
// ?? Why ICOORD?
|
|
283
|
+
start.set_y ((inT16) floor (start.y () + vec.y () + 0.5));
|
|
284
|
+
// ?? Why ICOORD?
|
|
285
|
+
|
|
286
|
+
for (poly_it.mark_cycle_pt (); !poly_it.cycled_list (); poly_it.forward ())
|
|
287
|
+
poly_it.data ()->pos += vec;
|
|
288
|
+
|
|
289
|
+
for (child_it.mark_cycle_pt (); !child_it.cycled_list ();
|
|
290
|
+
child_it.forward ())
|
|
291
|
+
child_it.data ()->move (vec); // move child outlines
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
/**********************************************************************
|
|
296
|
+
* OUTLINE::scale
|
|
297
|
+
*
|
|
298
|
+
* Scale OUTLINE by vector
|
|
299
|
+
**********************************************************************/
|
|
300
|
+
|
|
301
|
+
void OUTLINE::scale( // scale OUTLINE
|
|
302
|
+
const float f // by multiplier
|
|
303
|
+
) {
|
|
304
|
+
//child outline itertr
|
|
305
|
+
OUTLINE_IT child_it(&children);
|
|
306
|
+
POLYPT_IT poly_it(&outline); //outline point itertr
|
|
307
|
+
POLYPT *pt;
|
|
308
|
+
|
|
309
|
+
box.scale (f);
|
|
310
|
+
|
|
311
|
+
// ?? Why ICOORD?
|
|
312
|
+
start.set_x ((inT16) floor (start.x () * f + 0.5));
|
|
313
|
+
// ?? Why ICOORD?
|
|
314
|
+
start.set_y ((inT16) floor (start.y () * f + 0.5));
|
|
315
|
+
|
|
316
|
+
for (poly_it.mark_cycle_pt (); !poly_it.cycled_list (); poly_it.forward ()) {
|
|
317
|
+
pt = poly_it.data ();
|
|
318
|
+
pt->pos *= f;
|
|
319
|
+
pt->vec *= f;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
for (child_it.mark_cycle_pt (); !child_it.cycled_list ();
|
|
323
|
+
child_it.forward ())
|
|
324
|
+
child_it.data ()->scale (f); //scale child outlines
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
/**********************************************************************
|
|
329
|
+
* OUTLINE::scale
|
|
330
|
+
*
|
|
331
|
+
* Scale OUTLINE by vector
|
|
332
|
+
**********************************************************************/
|
|
333
|
+
|
|
334
|
+
void OUTLINE::scale( // scale OUTLINE
|
|
335
|
+
const FCOORD vector //by fcoord
|
|
336
|
+
) {
|
|
337
|
+
//child outline itertr
|
|
338
|
+
OUTLINE_IT child_it(&children);
|
|
339
|
+
POLYPT_IT poly_it(&outline); //outline point itertr
|
|
340
|
+
POLYPT *pt;
|
|
341
|
+
|
|
342
|
+
box.scale (vector);
|
|
343
|
+
|
|
344
|
+
start.set_x ((inT16) floor (start.x () * vector.x () + 0.5));
|
|
345
|
+
// ?? Why ICOORD?
|
|
346
|
+
start.set_y ((inT16) floor (start.y () * vector.y () + 0.5));
|
|
347
|
+
// ?? Why ICOORD?
|
|
348
|
+
|
|
349
|
+
for (poly_it.mark_cycle_pt (); !poly_it.cycled_list (); poly_it.forward ()) {
|
|
350
|
+
pt = poly_it.data ();
|
|
351
|
+
pt->pos =
|
|
352
|
+
FCOORD (pt->pos.x () * vector.x (), pt->pos.y () * vector.y ());
|
|
353
|
+
pt->vec =
|
|
354
|
+
FCOORD (pt->vec.x () * vector.x (), pt->vec.y () * vector.y ());
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
for (child_it.mark_cycle_pt (); !child_it.cycled_list ();
|
|
358
|
+
child_it.forward ())
|
|
359
|
+
//scale child outlines
|
|
360
|
+
child_it.data ()->scale (vector);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**********************************************************************
|
|
364
|
+
* OUTLINE::rotate
|
|
365
|
+
*
|
|
366
|
+
* Rotate OUTLINE by the given vector
|
|
367
|
+
**********************************************************************/
|
|
368
|
+
|
|
369
|
+
void OUTLINE::rotate(
|
|
370
|
+
const FCOORD vector //by fcoord
|
|
371
|
+
) {
|
|
372
|
+
//child outline itertr
|
|
373
|
+
OUTLINE_IT child_it(&children);
|
|
374
|
+
POLYPT_IT poly_it(&outline); //outline point itertr
|
|
375
|
+
POLYPT *pt;
|
|
376
|
+
box.rotate(vector);
|
|
377
|
+
|
|
378
|
+
start.rotate(vector);
|
|
379
|
+
|
|
380
|
+
for (poly_it.mark_cycle_pt (); !poly_it.cycled_list (); poly_it.forward ()) {
|
|
381
|
+
pt = poly_it.data ();
|
|
382
|
+
pt->pos.rotate(vector);
|
|
383
|
+
pt->vec.rotate(vector);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
for (child_it.mark_cycle_pt (); !child_it.cycled_list ();
|
|
387
|
+
child_it.forward ())
|
|
388
|
+
//scale child outlines
|
|
389
|
+
child_it.data ()->rotate(vector);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
/**********************************************************************
|
|
394
|
+
* OUTLINE::plot
|
|
395
|
+
*
|
|
396
|
+
* Draw the outline in the given colour.
|
|
397
|
+
**********************************************************************/
|
|
398
|
+
|
|
399
|
+
#ifndef GRAPHICS_DISABLED
|
|
400
|
+
void OUTLINE::plot( //draw it
|
|
401
|
+
ScrollView* window, //window to draw in
|
|
402
|
+
ScrollView::Color colour //colour to draw in
|
|
403
|
+
) {
|
|
404
|
+
POLYPT *polypt; //current point
|
|
405
|
+
POLYPT_IT it = &outline; //iterator
|
|
406
|
+
|
|
407
|
+
window->Pen(colour);
|
|
408
|
+
polypt = it.data ();
|
|
409
|
+
int startx = polypt->pos.x ();
|
|
410
|
+
int starty = polypt->pos.y ();
|
|
411
|
+
do {
|
|
412
|
+
it.forward ();
|
|
413
|
+
polypt = it.data ();
|
|
414
|
+
window->Line(startx,starty,polypt->pos.x (),polypt->pos.y ());
|
|
415
|
+
startx = polypt->pos.x ();
|
|
416
|
+
starty = polypt->pos.y ();
|
|
417
|
+
}
|
|
418
|
+
while (!it.at_first ());
|
|
419
|
+
}
|
|
420
|
+
#endif
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
/**********************************************************************
|
|
424
|
+
* OUTLINE::operator=
|
|
425
|
+
*
|
|
426
|
+
* Assignment - deep copy data
|
|
427
|
+
**********************************************************************/
|
|
428
|
+
|
|
429
|
+
OUTLINE & OUTLINE::operator= ( //assignment
|
|
430
|
+
const OUTLINE & source //from this
|
|
431
|
+
) {
|
|
432
|
+
box = source.box;
|
|
433
|
+
start = source.start;
|
|
434
|
+
if (!outline.empty())
|
|
435
|
+
outline.clear();
|
|
436
|
+
outline.deep_copy(&source.outline, &POLYPT::deep_copy);
|
|
437
|
+
if (!children.empty())
|
|
438
|
+
children.clear();
|
|
439
|
+
children.deep_copy(&source.children, &OUTLINE::deep_copy);
|
|
440
|
+
return *this;
|
|
441
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**********************************************************************
|
|
2
|
+
* File: poutline.h (Formerly outline.h)
|
|
3
|
+
* Description: OUTLINE class definition.
|
|
4
|
+
* Author: Ray Smith
|
|
5
|
+
* Created: Wed Oct 23 10:42:40 BST 1991
|
|
6
|
+
*
|
|
7
|
+
* (C) Copyright 1991, Hewlett-Packard Ltd.
|
|
8
|
+
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
** you may not use this file except in compliance with the License.
|
|
10
|
+
** You may obtain a copy of the License at
|
|
11
|
+
** http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
** Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
** See the License for the specific language governing permissions and
|
|
16
|
+
** limitations under the License.
|
|
17
|
+
*
|
|
18
|
+
**********************************************************************/
|
|
19
|
+
|
|
20
|
+
#ifndef POUTLINE_H
|
|
21
|
+
#define POUTLINE_H
|
|
22
|
+
|
|
23
|
+
#include "scrollview.h"
|
|
24
|
+
#include "polyvert.h"
|
|
25
|
+
#include "rect.h"
|
|
26
|
+
#include "blckerr.h"
|
|
27
|
+
|
|
28
|
+
#define INTERSECTING MAX_INT16//no winding number
|
|
29
|
+
|
|
30
|
+
class OUTLINE; //forward declaration
|
|
31
|
+
|
|
32
|
+
ELISTIZEH_S (OUTLINE)
|
|
33
|
+
class OUTLINE:public ELIST_LINK
|
|
34
|
+
{
|
|
35
|
+
public:
|
|
36
|
+
OUTLINE() { //empty constructor
|
|
37
|
+
}
|
|
38
|
+
OUTLINE( //constructor
|
|
39
|
+
const ICOORD &startpt, //start point
|
|
40
|
+
inT8 *compactloop, //from Tess format
|
|
41
|
+
BOOL8 reverse, //reverse it
|
|
42
|
+
ICOORD bot_left, //bounding box
|
|
43
|
+
ICOORD top_right);
|
|
44
|
+
OUTLINE( //constructor
|
|
45
|
+
POLYPT_IT *poly_it); //from list of pts
|
|
46
|
+
|
|
47
|
+
OUTLINE_LIST *child() { //get child list
|
|
48
|
+
return &children;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
//access function
|
|
52
|
+
const TBOX &bounding_box() const {
|
|
53
|
+
return box;
|
|
54
|
+
}
|
|
55
|
+
void compute_bb(); //set bounding box
|
|
56
|
+
|
|
57
|
+
//get start position
|
|
58
|
+
const ICOORD &start_pos() const {
|
|
59
|
+
return start;
|
|
60
|
+
}
|
|
61
|
+
float area(); //return area
|
|
62
|
+
POLYPT_LIST *polypts() { //get poly
|
|
63
|
+
return &outline;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
BOOL8 operator< ( //containment test
|
|
67
|
+
OUTLINE & other);
|
|
68
|
+
BOOL8 operator> ( //containment test
|
|
69
|
+
OUTLINE & other) {
|
|
70
|
+
return other < *this; //use the < to do it
|
|
71
|
+
}
|
|
72
|
+
inT16 winding_number( //get winding number
|
|
73
|
+
const FCOORD &testpt); //around this point
|
|
74
|
+
void reverse(); //reverse it
|
|
75
|
+
|
|
76
|
+
void move( // reposition outline
|
|
77
|
+
const FCOORD vec); // by FLOAT vector
|
|
78
|
+
|
|
79
|
+
void scale( // scale outline
|
|
80
|
+
const float f); // by multiplier
|
|
81
|
+
void scale( // scale outline
|
|
82
|
+
const FCOORD vec); // by FLOAT vector
|
|
83
|
+
|
|
84
|
+
void rotate( // rotate outline
|
|
85
|
+
const FCOORD vector); // by fcoord
|
|
86
|
+
|
|
87
|
+
void plot( //draw one
|
|
88
|
+
ScrollView* window, //window to draw in
|
|
89
|
+
ScrollView::Color colour); //colour to draw it
|
|
90
|
+
|
|
91
|
+
void prep_serialise() { //set ptrs to counts
|
|
92
|
+
outline.prep_serialise ();
|
|
93
|
+
children.prep_serialise ();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
void dump( //write external bits
|
|
97
|
+
FILE *f) {
|
|
98
|
+
outline.dump (f);
|
|
99
|
+
children.dump (f);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
void de_dump( //read external bits
|
|
103
|
+
FILE *f) {
|
|
104
|
+
outline.de_dump (f);
|
|
105
|
+
children.de_dump (f);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
//assignment
|
|
109
|
+
make_serialise(OUTLINE)
|
|
110
|
+
|
|
111
|
+
OUTLINE& operator=(const OUTLINE& source);
|
|
112
|
+
|
|
113
|
+
static OUTLINE* deep_copy(const OUTLINE* src) {
|
|
114
|
+
OUTLINE* outline = new OUTLINE;
|
|
115
|
+
*outline = *src;
|
|
116
|
+
return outline;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
private:
|
|
120
|
+
TBOX box; //boudning box
|
|
121
|
+
ICOORD start; //start coord
|
|
122
|
+
POLYPT_LIST outline; //outline points
|
|
123
|
+
OUTLINE_LIST children; //child elements
|
|
124
|
+
};
|
|
125
|
+
#endif
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**********************************************************************
|
|
2
|
+
* File: quadlsq.cpp (Formerly qlsq.c)
|
|
3
|
+
* Description: Code for least squares approximation of quadratics.
|
|
4
|
+
* Author: Ray Smith
|
|
5
|
+
* Created: Wed Oct 6 15:14:23 BST 1993
|
|
6
|
+
*
|
|
7
|
+
* (C) Copyright 1993, Hewlett-Packard Ltd.
|
|
8
|
+
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
** you may not use this file except in compliance with the License.
|
|
10
|
+
** You may obtain a copy of the License at
|
|
11
|
+
** http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
** Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
** See the License for the specific language governing permissions and
|
|
16
|
+
** limitations under the License.
|
|
17
|
+
*
|
|
18
|
+
**********************************************************************/
|
|
19
|
+
|
|
20
|
+
#include "mfcpch.h"
|
|
21
|
+
#include <stdio.h>
|
|
22
|
+
#include <math.h>
|
|
23
|
+
#include "errcode.h"
|
|
24
|
+
#include "quadlsq.h"
|
|
25
|
+
|
|
26
|
+
const ERRCODE EMPTY_QLSQ = "Can't delete from an empty QLSQ";
|
|
27
|
+
|
|
28
|
+
#define EXTERN
|
|
29
|
+
|
|
30
|
+
/**********************************************************************
|
|
31
|
+
* QLSQ::clear
|
|
32
|
+
*
|
|
33
|
+
* Function to initialize a QLSQ.
|
|
34
|
+
**********************************************************************/
|
|
35
|
+
|
|
36
|
+
void QLSQ::clear() { //initialize
|
|
37
|
+
a = 0;
|
|
38
|
+
b = 0;
|
|
39
|
+
c = 0;
|
|
40
|
+
n = 0; //no elements
|
|
41
|
+
sigx = 0; //update accumulators
|
|
42
|
+
sigy = 0;
|
|
43
|
+
sigxx = 0;
|
|
44
|
+
sigxy = 0;
|
|
45
|
+
sigyy = 0;
|
|
46
|
+
sigxxx = 0;
|
|
47
|
+
sigxxy = 0;
|
|
48
|
+
sigxxxx = 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
/**********************************************************************
|
|
53
|
+
* QLSQ::add
|
|
54
|
+
*
|
|
55
|
+
* Add an element to the accumulator.
|
|
56
|
+
**********************************************************************/
|
|
57
|
+
|
|
58
|
+
void QLSQ::add( //add an element
|
|
59
|
+
double x, //xcoord
|
|
60
|
+
double y //ycoord
|
|
61
|
+
) {
|
|
62
|
+
n++; //count elements
|
|
63
|
+
sigx += x; //update accumulators
|
|
64
|
+
sigy += y;
|
|
65
|
+
sigxx += x * x;
|
|
66
|
+
sigxy += x * y;
|
|
67
|
+
sigyy += y * y;
|
|
68
|
+
sigxxx += (long double) x *x * x;
|
|
69
|
+
sigxxy += (long double) x *x * y;
|
|
70
|
+
sigxxxx += (long double) x *x * x * x;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
/**********************************************************************
|
|
75
|
+
* QLSQ::remove
|
|
76
|
+
*
|
|
77
|
+
* Delete an element from the acculuator.
|
|
78
|
+
**********************************************************************/
|
|
79
|
+
|
|
80
|
+
void QLSQ::remove( //delete an element
|
|
81
|
+
double x, //xcoord
|
|
82
|
+
double y //ycoord
|
|
83
|
+
) {
|
|
84
|
+
if (n <= 0)
|
|
85
|
+
//illegal
|
|
86
|
+
EMPTY_QLSQ.error ("QLSQ::remove", ABORT, NULL);
|
|
87
|
+
n--; //count elements
|
|
88
|
+
sigx -= x; //update accumulators
|
|
89
|
+
sigy -= y;
|
|
90
|
+
sigxx -= x * x;
|
|
91
|
+
sigxy -= x * y;
|
|
92
|
+
sigyy -= y * y;
|
|
93
|
+
sigxxx -= (long double) x *x * x;
|
|
94
|
+
sigxxy -= (long double) x *x * y;
|
|
95
|
+
sigxxxx -= (long double) x *x * x * x;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
/**********************************************************************
|
|
100
|
+
* QLSQ::fit
|
|
101
|
+
*
|
|
102
|
+
* Fit the given degree of polynomial and store the result.
|
|
103
|
+
**********************************************************************/
|
|
104
|
+
|
|
105
|
+
void QLSQ::fit( //fit polynomial
|
|
106
|
+
int degree //degree to fit
|
|
107
|
+
) {
|
|
108
|
+
long double cubetemp; //intermediates
|
|
109
|
+
long double squaretemp;
|
|
110
|
+
long double top96, bottom96; /*accurate top & bottom */
|
|
111
|
+
|
|
112
|
+
if (n >= 4 && degree >= 2) {
|
|
113
|
+
cubetemp = sigxxx * n - (long double) sigxx *sigx;
|
|
114
|
+
|
|
115
|
+
top96 =
|
|
116
|
+
cubetemp * ((long double) sigxy * n - (long double) sigx * sigy);
|
|
117
|
+
|
|
118
|
+
squaretemp = (long double) sigxx *n - (long double) sigx *sigx;
|
|
119
|
+
|
|
120
|
+
top96 += squaretemp * ((long double) sigxx * sigy - sigxxy * n);
|
|
121
|
+
|
|
122
|
+
bottom96 = cubetemp * cubetemp;
|
|
123
|
+
|
|
124
|
+
bottom96 -= squaretemp * (sigxxxx * n - (long double) sigxx * sigxx);
|
|
125
|
+
|
|
126
|
+
a = top96 / bottom96;
|
|
127
|
+
|
|
128
|
+
top96 = ((long double) sigxx * sigx - sigxxx * n) * a
|
|
129
|
+
+ (long double) sigxy *n - (long double) sigx *sigy;
|
|
130
|
+
bottom96 = (long double) sigxx *n - (long double) sigx *sigx;
|
|
131
|
+
b = top96 / bottom96;
|
|
132
|
+
|
|
133
|
+
c = (sigy - a * sigxx - b * sigx) / n;
|
|
134
|
+
}
|
|
135
|
+
else if (n == 0 || degree < 0) {
|
|
136
|
+
a = b = c = 0;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
a = 0;
|
|
140
|
+
if (n > 1 && degree > 0) {
|
|
141
|
+
b = (sigxy * n - sigx * sigy) / (sigxx * n - sigx * sigx);
|
|
142
|
+
}
|
|
143
|
+
else
|
|
144
|
+
b = 0;
|
|
145
|
+
c = (sigy - b * sigx) / n;
|
|
146
|
+
}
|
|
147
|
+
}
|