E3 Tips: Criando objetos de tela que não ‘deformam’.

Problema:

 

“O problema é que, dependendo da sua posição na tela, os objetos ficam “deformados”. Por exemplo, foi feito um teste com um círculo de 150 X 150. Ao mudar a posição do círculo na tela, em algumas posições seu tamanho era visualmente menor do que o inicial, mas as propriedades continuavam apontando 150 X 150. Como resolver este problema? Isto também ocorre em casos onde é necessário utilizar o zoom para ajustar a tela ao tamanho do Viewer ou do Quadro devido a alguma alteração de resolução, por exemplo.”

 

Causa:

 
Este problema acontece devido aos arredondamentos (truncagem) que ocorrem na conversão de coordenadas HIMETRIC para Pixels. Por exemplo, são dados dois círculos de tamanho 150×150 (em HIMETRIC): 
  • Circle1:  X=0  Y=0  Coordenadas = (0, 0, 150, 150)
  • Circle2:  X=1000  Y=1000  Coordenadas = (1000, 1000, 1150, 1150)
Supondo que o Zoom seja 100%, e o micro esteja configurado com a resolução normal (96 DPI), o cálculo de HIMETRIC para Pixel será o seguinte:

PIXEL = (HIMETRIC * 96) / 2540

Utilizando a fórmula acima, as coordenadas dos objetos em pixels seriam:
  • Circle1:  CoordenadasBrutasEmPixel = (0, 0, 5.67, 5.67)
  • Circle2:  CoordenadasBrutasEmPixel = (37.8, 37.8, 43.46, 43.46)
Porém, como na tela não existem ‘meios-píxels’, os valores acabam truncados:
  • Circle1:  CoordenadasTruncadasEmPixel = (0, 0, 5, 5), diâmetro = 5 pixels
  • Circle2:  CoordenadasTruncadasEmPixel = (37, 37, 43, 43), diâmetro = 6 pixels
Note que o Circle2 ficou 1 pixel maior que o Circle1!
 

 

Solução:

 
Para resolver (ou pelo menos minimizar) este problema, teríamos que deixar o tamanho do círculo como um múltiplo do tamanho exato de um pixel. Para isto, precisamos descobrir o tamanho de um pixel em HIMETRIC:

HIMETRIC = (PIXEL * 2540) / 96

Portanto, 1 pixel = 26,4583333333… HIMETRIC. Como este número é uma dízima periódica (3333333…), é melhor definir o círculo em múltiplos de 3 pixels. Por exemplo, para conseguir um círculo de ‘tamanho estável’ com 6 pixels de diâmetro, defina o objeto com Height = 158,75 e Width = 158,75. Quando este objeto for movido na tela, a tendência é que o seu tamanho em pixels fique ‘estável’:
  • Circle1:  X=0  Y=0  Width=158.75  Height=158.75
    CoordenadasHIMETRIC = (0, 0, 158.75, 158.75)
    CoordenadasBrutasEmPixel = (0, 0, 6, 6)
    CoordenadasTruncadasEmPixel = (0, 0, 6, 6)
    Diâmetro = 6 pixels
  • Circle2:  X=1000  Y=1000  Width=158.75  Height=158.75
    CoordenadasHIMETRIC = (1000, 1000, 1158.75, 1158.75)
    CoordenadasBrutasEmPixel = (37.7953…, 37.7953…, 43.7953…, 43.7953…)
    CoordenadasTruncadasEmPixel = (37, 37, 43, 43)
    Diâmetro = 6 pixels
 

Dica:

 
O próprio editor de telas do E3 permite criar objetos de tamanho ‘estável’ sem a necessidade de todos estes cálculos.

 

Quando necessitar de um objeto com tamanho ‘estável’ (normalmente, objetos que serão copiados várias vezes na tela como, por exemplo, uma definição de XControl), basta desligar o ‘grid’ do editor de telas e deixar o Zoom em 100% enquanto você cria o objeto com o Mouse. Os objetos criados desta forma ficam sempre com um tamanho múltiplo do tamanho de um pixel.

 

AVISO IMPORTANTE:  mesmo que você siga a dica acima e crie objetos com tamanho ‘estável’, ainda assim podem ocorrer distorções causadas por imprecisões na representação de números em ponto flutuante (podem ocorrer perdas mínimas de precisão que acabam causando diferenças de um pixel no final).
Print Friendly, PDF & Email

Este artigo foi útil? Was this helpful?

Classificação média - Average rating 1 / 5. Count: 1

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *