Bem-Vindo, Visitante
Username: Password: Lembrar-me

Pesquisa no Fórum

  • Página:
  • 1

TÓPICO: Tutorial: Modificando ícone LEZ (Low Emission Zone) para Zona de Rodízio usando mapas BRASIL

Tutorial: Modificando ícone LEZ (Low Emission Zone) para Zona de Rodízio usando mapas BRASIL 19 Set 2013 17:08 #203381

Como vejo grande e saudável interesse de algumas pessoas em aprender mais sobre o funcionamento, e não mais somente na montagem dos blocos de um pacote, me permito demonstrar uma modificação feita nas skins Dimka mod AD, trocando o ícone conhecido como zona de Baixa Emissão de CO2 para Zona de Rodízio quando usando um mapa do Brasil.

Esta modificação é perfeita para começar estes tópicos de conhecimento pela sua simplicidade mas, mesmo assim, muito interessante pela demonstração de uma mudança e entendimento de como funciona o iGO.

Apenas como comentário veremos, que se a skin for usada na Alemanha, Inglaterra ou outro país que não o Brasil, a skin se comportará sem mudanças de seu desenho original.

Se estamos modificando um código criado por outros devemos, sempre, respeitar as idéias e desenhos do autor. lembrem-se que hoje o mundo está a um click do mouse.

Vamos começar então.
____________________________________________________________________________________________________

Antes de mais nada precisamos entender um pouco um arquivo de mapa. Por que? Porque, sem ele, nada vai funcionar. É ele que tem a informação do país, é ele que contem as coordenadas das zonas de baixa emissão (na Europa) e zona de Rodízio no Brasil isso além do mapa propriamente dito! Ressalto que estou me referindo ao arquivo com extensão .fbl.

Usando um programa chamado iGOView www.gpspoint.com.br/...-mapas-para-o-padrao podemos decodificar os cabeçalhos dos arquivos e vemos a seguinte informação no Navteq 2013_Q1.fbl:

===================================================<br>

Second header, parser 2

[navteq]#COUNTRY#2013.Q1
© 2013 NAVTEQ
All rights reserved.

_BRA|2013.Q1|||

===================================================

Notaram o _BRA em negrito? É esta sigla que informa para o iGO que é um mapa do Brasil.

Vendo um pedacinho do dictionary.lang encontramos isto:
_BLM="São Bartolomeu" 
_BLR="Bielorússia" 
_BOL="Bolivia"   
_BRA="Brazil"
_BRN="Bahrein" 
_BRU="Brunei" 
_BUL="Bulgária" 
_BUR="Burkina Faso" 
_BVT="Ilha Bouvet" 
_CAF="República Centro-Africana"

Vamos a um outro exemplo?

===================================================<br>

Second header, parser 2

[emg]#COUNTRY# 2012.Q1
©2012 eMapgo Technologies Co., Ltd.
All Rights Reserved.

_k**|2012夏 (台湾交通数据资料暂缺)

===================================================

Olhando no arquivo dictionary.lang, encontrado na lang, quem saberia me dizer a que país pertence este mapa?
____________________________________________________________________________________________________

Entendido isto vamos continuar. Agora realmente entrando na nossa pequena mudança.

Entrem no arquivo skin:ui_igo9\common\ui\CUSTOMIZED.LUA


Abrindo o arquivo com um editor de texto procurem a expressão st_wSearchCountryUmweltSign deve ser encontrado algo semelhante a isto:
st_wSearchCountryUmweltSign = function(country)
	local country_icons = {"_GER","_GBR","_NED"}	
	local bmp = "_eu"
	for _,v in pairs(country_icons) do
		if v == country then
			bmp = v:lower()
			break
		end
	end
	return "umwelt_zone" .. bmp .. ".bmp#2"
end

Para uma primeira compreensão não precisamos entender profundamente o que este código faz mas, porque não tentarmos entender um pouco?

Primeiro o básico do básico:

Não é necessário para a máquina, mas para o melhor entendimento de nós humanos é de profundo bom tom escrevermos com os parágrafos recuados (indent). Olhando o código entendemos melhor:

O primeiro nível começa em st_wSearchCountryUmweltSign = function(country) e termina no último end, ou seja todo o código apresentado.
O segundo nível começa em for ... e termina no penúltimo end.
O terceiro nível começa em if.. e termina no ante-penúltimo end.

Não vamos nos deter, lógico, em tentar explicar todos os comando agora mas somente algumas coisas para podermos entender a lógica da coisa.

A nossa st_wSearchCountryUmweltSign é uma função que recebe um valor (country). Este valor é enviado por quem chama a função e, se estamos no Brasil e usando um mapa brasileiro, posso lhes afirmar que o valor passado será _BRA. Conforme já vimos acima, nos headers dos mapas.

Olhando no código vemos que a função, primeiro, coloca o valor _eu na variável bmp e depois entra num loop (if) de 3 passos: _GER, _GBR e _NED.

Se o mapa fosse de um destes 3 países a variável bmp seria carregada com o valor correspondente em minúsculas (lower). e o if seria terminado com o comando break indo para o próximo nível que é o end do for que termina e vai para o próximo nível.

Este próximo nível é return "umwelt_zone" .. bmp .. ".bmp#2"

O comando return retorna o valor da montagem de uma string (texto) que vai conter, no final, o nome do arquivo .bmp que será usado. String esta concatenada pelo comando .. Então como exemplo teremos:

umwelt_zone .. variável bmp .. .bmp#2

Trocando bmp por _bra teremos "umwelt_zone_bra.bmp#2".

O #2 indica que o .bmp é dividido em 2 na altura. Podemos entender isto vendo a imagem abaixo onde vemos parte do bmp em cinza (que é mostrado quando o gps se aproxima da zona) ou em cores quando o gps está na zona de rodízio.

Vamos então executar este código usando o mapa do Brasil.

Os tres passos do if serão feitos e nenhum vai encontrar concordância (com _BRA). Sendo assim ficará o _eu (lembram?) inicial e o nome do arquivo retornado será:
umwelt_zone_eu.bmp

Vejamos agora o que precisamos fazer para criar nossa Zona de Rodizio.
st_wSearchCountryUmweltSign = function(country)
	local country_icons = {"_GER","_GBR","_NED","_BRA"}	
	local bmp = "_eu"
	for _,v in pairs(country_icons) do
		if v == country then
			bmp = v:lower()
			break
		end
	end
	return "umwelt_zone" .. bmp .. ".bmp#2"
end

Criamos uma quarta condição: _BRA.

O if que antes fazia três passadas agora fará quatro e, logicamente, agora se o mapa usado for o do Brasil teremos uma concordância na última passada do if e o nome do bmp ficará assim:
umwelt_zone_bra.bmp

É só criarmos um arquivo gráfico que represente nossa nova condição e está feita nossa implementação!

Espero que eu tenha sido útil e vcs tenham gostado!

Por último, mas não menos importante: devem existir erros neste meu texto e, lógico, quaisquer correções e comentários serão muito bem vindos... não só por mim, mas por todos.

Ícones nas resoluções 800_480 e 480_272 já no formato iGO compactado:

Arquivo Anexo:

Nome do Arquivo: _dicas.rar
Tamanho do Arquivo: 24 KB
  • adinis
  • Usuário Platinum
  • adinis's Avatar
  • OFFLINE
  • Postagens: 1001
  • Agradecimentos: 1218
  • Registro em: 29/10/2011
    Ult. Visita: 21/11/2016
Numa civilização ideal todos deveríamos ter os mesmos privilégios e regras mas, sabemos, que no dia a dia isto não é assim. Por isto "utopia" passou a ser sinônimo de desejável mas não alcançável. Pena!
Última Edição: 20 Set 2013 12:33 por adinis. Razão: Adicionar arquivo com ícones.
O administrador desabilitou o acesso público de escrita.
Os seguintes usuários disseram Obrigado: Benites, leopardo, Milton, Sherlock, M_A_C, rafael2san, Amoriello, fcvitor, dovsky, Fábio M....

Tutorial: Modificando ícone LEZ (Low Emission Zone) para Zona de Rodízio usando mapas BRASIL 20 Set 2013 11:36 #203462

adinis,

Bela aula!

Para não usuários de skins Dimka, como eu (uso skin gjak_1.09_P24), vale lembrar que para a ativação desse recurso das áreas LEZ pode ser usado o módulo ux "RoutePlanningMethod.zip"(by plajos, tks varelo!), onde os módulos apresentados na aula acima tem a mesma estrutura.
No caso, sem as alterações descritas no arquivo .lua, já mostrava as áreas de rodízio em São Paulo, mas aproveitei para inserir o ícone que voce disponibilizou em substituição ao anterior que mostrava um carrinho soltando fumaça.

Agora, para nossos colaboradores experts em programação: existe alguma forma de inserir um aviso sonoro juntamente com o ícone do rodízio quando se aproxima dessas áreas?

Abs.
  • dovsky
  • Intermediário
  • dovsky's Avatar
  • OFFLINE
  • Postagens: 87
  • Agradecimentos: 22
  • Registro em: 15/10/2011
    Ult. Visita: 07/12/2016
Última Edição: 20 Set 2013 11:39 por dovsky.
O administrador desabilitou o acesso público de escrita.
Os seguintes usuários disseram Obrigado: adinis

Tutorial: Modificando ícone LEZ (Low Emission Zone) para Zona de Rodízio usando mapas BRASIL 20 Set 2013 12:11 #203468

adinis

Belo Post, muito obrigado por compartilhar conosco não, somente pela simplicidade e objetividade, mais também por certificar-se que entendemos o processo.

Parabéns.
  • d780
  • Colaborador
  • d780's Avatar
  • OFFLINE
  • Postagens: 542
  • Agradecimentos: 558
  • Registro em: 15/01/2011
    Ult. Visita: 02/12/2016
O administrador desabilitou o acesso público de escrita.
Os seguintes usuários disseram Obrigado: adinis

Tutorial: Modificando ícone LEZ (Low Emission Zone) para Zona de Rodízio usando mapas BRASIL 20 Set 2013 12:30 #203469

parabens muito bom mesmo
  • LEANDROF1
  • Usuário Platinum
  • LEANDROF1's Avatar
  • OFFLINE
  • Postagens: 256
  • Agradecimentos: 63
  • Registro em: 20/12/2010
    Ult. Visita: 30/04/2014
O administrador desabilitou o acesso público de escrita.
Os seguintes usuários disseram Obrigado: adinis

Tutorial: Modificando ícone LEZ (Low Emission Zone) para Zona de Rodízio usando mapas BRASIL 20 Set 2013 12:36 #203470

dovsky

Obrigado! Coloquei lá no final um arquivo que contém os ícones.

d780

Não poderia esperar menos do que estas belas palavras do amigo.

Leandro

Muito obrigado!
  • adinis
  • Usuário Platinum
  • adinis's Avatar
  • OFFLINE
  • Postagens: 1001
  • Agradecimentos: 1218
  • Registro em: 29/10/2011
    Ult. Visita: 21/11/2016
Numa civilização ideal todos deveríamos ter os mesmos privilégios e regras mas, sabemos, que no dia a dia isto não é assim. Por isto "utopia" passou a ser sinônimo de desejável mas não alcançável. Pena!
Última Edição: 20 Set 2013 12:37 por adinis.
O administrador desabilitou o acesso público de escrita.

Tutorial: Modificando ícone LEZ (Low Emission Zone) para Zona de Rodízio usando mapas BRASIL 20 Set 2013 12:50 #203471

Adinis,

Cidadão honorário e honorável de Marmelópolis/MG, você continua ministrando aulas de forma catedrática e única, cuidado com a sua carga horária, não pode ultrapassar a 44 horas/aulas semanais. rs.rs.rs.rs..

Fantástico, não entendia porque a imagem do LEZ era dupla, sendo que só era usada a parte inferior, agora sim tá explicado e muito bem explicado. Parabéns!!!!!

Abçs.
Kadao
  • Kadao107
  • Usuário Gold
  • Kadao107's Avatar
  • OFFLINE
  • Postagens: 198
  • Agradecimentos: 315
  • Registro em: 18/05/2010
    Ult. Visita: 07/12/2016
"As pessoas que se beneficiam com o sistema...não são as que vão mudá-lo"
O administrador desabilitou o acesso público de escrita.
Os seguintes usuários disseram Obrigado: adinis

Tutorial: Modificando ícone LEZ (Low Emission Zone) para Zona de Rodízio usando mapas BRASIL 20 Set 2013 14:50 #203480

Grande kadao!

Aproveitando seu gancho porque não desenvolver mais o assunto? Afinal a idéia é esta... ir incrementando!

Já entendemos então para que serve o #n depois do nome do bmp, informar que este bmp deve ser dividido por n. No nosso caso é #2 e deve conter 2 sub-gráficos... poderia ser #3, #5, etc... se o arquivo não contiver a divisão correta, na hora de aparecer na tela ele poderá ser cortado ou aparecer algo fora de ordem. Lembra do exemplo do botão de desligar no nosso bem conhecido pacote? :kkkk

Aí alguém poderia perguntar: e como eu faço para dizer, no programa, qual parte eu quero?

Para isto existe o phase=n. O n começa do valor zero e, visualmente, de cima para baixo. Então phase=0 mostra o ícone cinza e o phase=1 mostra o colorido.

Veja este código encontrado em navigatemap.ui:
<SPRITE left=0 right=0 top=0 bottom=25% valign="center" align="center" z=1 
	bmp=(st_wSearchCountryUmweltSign(%navigation.car.current_country))
	phase=(!%navigation.env_zone_remaining.valid && %navigation.env_zone_distance ? 0 : 1) 
	onclick=sc_wUmweltZoneHide overmaplayer>

Este código faz parte de um comando <layer> (começa algumas linhas acima do código mostrado) que monta uma camada para ser adicionada na tela atual do navegador.

Aí temos a primeira surpresa! A tela que vc enxerga na sua navegação, por exemplo, é formada por várias camadas. Exemplo: o céu dos schemes é uma, o mapa é outra, o carrinho mais uma, velocidades, botões e por aí a fora! Por isto a importância da transparência numa grande quantidade de arquivos...

Dentro deste código é chamada a função st_wSearchCountryUmweltSign(%navigation.car.current_country). Lembra dela? É a função que começou todo este assunto lá no tópico 1.

O resultado como vimos é retornado pelo comando return que contém uma string (texto) com o nome do bmp seguido de #2. Como tem #2 precisamos do phase com o valor 0 ou 1. Veja: phase=(!%navigation.env_zone_remaining.valid && %navigation.env_zone_distance ? 0 : 1)

Parece complicado e é mesmo! Mas o importante é sabermos, neste momento, que a expressão !%navigation.env_zone_remaining.valid && %navigation.]env_zone_distance, retornará para o phase o valor 0 ou 1 dependendo dos valores de env_zone_remaining.valid e env_zone_distance.

Por último outra curiosidade... notou o onclick=sc_wUmweltZoneHide? Descobri, junto com vcs, que se clicar (onclick) ele apaga o ícone de LEZ/Rodízio.

Por hoje é só... acabou de tocar a sineta de fim de aula.
  • adinis
  • Usuário Platinum
  • adinis's Avatar
  • OFFLINE
  • Postagens: 1001
  • Agradecimentos: 1218
  • Registro em: 29/10/2011
    Ult. Visita: 21/11/2016
Numa civilização ideal todos deveríamos ter os mesmos privilégios e regras mas, sabemos, que no dia a dia isto não é assim. Por isto "utopia" passou a ser sinônimo de desejável mas não alcançável. Pena!
Última Edição: 20 Set 2013 16:04 por adinis. Razão: Melhora do texto e da lógica.
O administrador desabilitou o acesso público de escrita.

Tutorial: Modificando ícone LEZ (Low Emission Zone) para Zona de Rodízio usando mapas BRASIL 20 Set 2013 15:04 #203482

Caracas :woohoo: , isso sim vale , uma duas tres skolss :oks , adnis fiquei impressionado com o conhecimento que voce tem sobre assunto .
nao e todo mundo que compartilha isso. :oks

muito bom .

ad e xm essa dupla e imbativel. :bye

valew brow .

:oks
  • olavovo
  • Usuário Platinum
  • olavovo's Avatar
  • OFFLINE
  • Postagens: 380
  • Agradecimentos: 176
  • Registro em: 03/03/2011
    Ult. Visita: 29/11/2016
O administrador desabilitou o acesso público de escrita.
Os seguintes usuários disseram Obrigado: adinis
  • Página:
  • 1
Time to create page: 0.466 seconds