public AreaRetangularDeBusca(OcorrenciaCampoDataNaCnh listaDatas) { this.Retangulo = new Rectangle(); if (listaDatas.QuantidadeDatasEncontradas == 3) { this.pontoXLeft = listaDatas.ObterPosicao(1).Localizacao.Left; this.pontoYTop = (int)Math.Floor(listaDatas.ObterPosicao(0).Localizacao.Top + (0.21 * Math.Abs(listaDatas.ObterPosicao(0).Localizacao.Top - listaDatas.ObterPosicao(2).Localizacao.Top))); this.pontoYBottom = (int)Math.Floor(listaDatas.ObterPosicao(0).Localizacao.Top + (0.6666 * Math.Abs(listaDatas.ObterPosicao(0).Localizacao.Top - listaDatas.ObterPosicao(2).Localizacao.Top))); var width = Math.Abs(listaDatas.ObterPosicao(0).Localizacao.Right - this.pontoXLeft); var height = Math.Abs(this.pontoYBottom - this.pontoYTop); this.Retangulo = new Rectangle(this.pontoXLeft, this.pontoYTop, width, height); } if (listaDatas.QuantidadeDatasEncontradas == 2) { this.pontoXLeft = Math.Abs(listaDatas.ObterPosicao(0).Localizacao.Right - 288); this.pontoYTop = (int)Math.Floor(listaDatas.ObterPosicao(0).Localizacao.Top + (0.21 * Math.Abs(listaDatas.ObterPosicao(0).Localizacao.Top - listaDatas.ObterPosicao(1).Localizacao.Top))); this.pontoYBottom = (int)Math.Floor(listaDatas.ObterPosicao(0).Localizacao.Top + (0.6666 * Math.Abs(listaDatas.ObterPosicao(0).Localizacao.Top - listaDatas.ObterPosicao(1).Localizacao.Top))); var width = Math.Abs(listaDatas.ObterPosicao(0).Localizacao.Right - this.pontoXLeft); var height = Math.Abs(this.pontoYBottom - this.pontoYTop); this.Retangulo = new Rectangle(this.pontoXLeft, this.pontoYTop, width, height); } }
public List <dynamic> MontarListaFiliacaoCnh(IList <PalavraReconhecida> palavras) { var resultado = new List <dynamic>(); if (palavras == null) { return(resultado); } if (palavras.Count == 0) { return(resultado); } var listadatas = new OcorrenciaCampoDataNaCnh(); listadatas.LocalizarDatas(palavras); if (listadatas.QuantidadeDatasEncontradas < 2) { return(resultado); } if (listadatas.PossuiDistanciaMinimaEntreDatas()) { return(resultado); } //// monta área de busca (retangulo) para delimitar palavras encontradas //// o retângulo de busca corresponde exatamente ao quadrado "Filiação" da CNH, usando as posições de data encontradas anteriormente como âncoras var retanguloFiliacao = new AreaRetangularDeBusca(listadatas); //// devole apenas as palavras dentro do retângulo de busca for (int i = listadatas.PosicaoPrimeiraDataNaListaOriginal; i < listadatas.PosicaoUltimaDataNaListaOriginal; i++) { var dynamic = palavras[i]; if (this.RetContemRet(retanguloFiliacao.Retangulo, dynamic.Localizacao)) { ////resultado.Add(new dynamic() ////{ //// Localizacao = dynamic.Localizacao, //// Texto = dynamic.Texto.RemoveAcentuacao() //// .RemoverDiacritico() //// .RemoveCaracteresNaoAlfa(true) //// .ToLower() //// .Trim() ////}); } } return(resultado); }