Zoom no panel sem aumentar objetos plotados

Olá,

Na minha aplicacação eu tenho um JPanel onde ploto alguns polígonos. Esse é o mapa.
Sobre ele ploto (add) label com imagens.

A última característica que adicionei foi o zoom. Fiz isso trabalhando com o AffineTransform do Graphics do JPanel.

Quando dou o zoom, todos os elementos plotados sobre o mapa aumentam, o que era esperado. Mas preciso
que apenas o fundo aumente, os polígonos, sem que a imagem aumente também. Esta tem que apenas atualizar o posicionamento relativo ao JPanel.

Acredito que eu tenha que implementar algum tipo de arquitetura com layer, um JPanel sobre o outro, ou sei lá.
Alguém tem experiência com esse tipo de desenvolvimento e pode dar uma luz?

Até mais.
Valeu!

Alguém?

Valeu!

Parece que o GUJ não é tão 24 horas assim… Evite upar tópicos, principalmente se vc abriu no final da noite. É muito difícil que haja uma resposta no início da manhã. Principalmente com temas tão específicos.

O affine transform atua sobre tudo que for realizado após o comando. Basta desenhar suas imagens antes de alterar a transformação.

Se você vai desenhar a imagem sobre o que foi aumentado, simplesmente restaure o transform original. A forma mais fácil de fazer isso é criar uma cópia do contexto gráfico.

public void desenhaCoisasComZoom(Graphics2D g) { Graphics2D g2d = (Graphics2D) g.create(); //Copia o contexto de g //Aqui vc faz o affine transform e o desenho com zoom g2d.dispose(); //descarta a cópia }

Perceba que ao sair do método, o objeto g não foi alterado, e não estará com o transform que tem o zoom.

Foi mal… não costumo upar, mas a pressa é foda.
Se eu não tivesse upado você não teria visto a pergunta rsrs… :stuck_out_tongue:

Então, eu pensei nisso mesmo, até fiz um exemplo, mas não funcionou.
Vou refazer com um pouco mais de critério e vamos ver no que dá.

Valeu.

[quote=Jean_Utf]Foi mal… não costumo upar, mas a pressa é foda.
Se eu não tivesse upado você não teria visto a pergunta rsrs… :P[/quote]

Acho que teria, eu entro em fórum por fórum e vou buscando os tópicos com “0”.

Era isso ae mesmo cara.
Consegui.

Mas estou empacado com a atualização do posicionamento (translate) do objeto que não recebeu o zoom.

Para pegar o deslocamento correto, eu uso o seguinte código, após aplicar o zoom. Mas ele não tá mantendo a proporção correta.
Tem algum conceito que não estou entendendo 100%. A coordenada do “mundo” não deveria ser a mesma para os objetos com e sem zoom?

        AffineTransform inverse = this.coordTransformMapa.createInverse();
        Point2D.Float p2 = new Point2D.Float();
        inverse.transform(p1, p2);

Não sei se consegui deixar claro o meu problema.

Valeu!

Consegui… tive que calcular o translate como se o objeto sem zoom tivesse com zoom. Dae funcionou.

Valeu pelas dicas.

Encontrei bastante material no pontov.com.br também, que ajudaram a entender alguns conceitos.

Até mais.

Isso ta me parecendo um sistema de rastreamento…