[RESOLVIDO]Java 2D ------> HTML5

porque na 1° posição eu tenho uma string com o tipo de objeto (linha, arco etc…)

deixa eu te perguntar.

por exemplo no dxf tem uma linha que vai de 0 a 800 mas como definir isso no palco do applet

como definir o tamnho do palco do applet para poder calcular (ajustar) porque vai ter que redimencionar
para poder caber . alguma dica?

da uma ollhada tbm no anti alias

@Override
    public void paint(Graphics g) {
        List<ArrayList> a = lista;
        Graphics2D g2d = (Graphics2D) g.create();
        for (int i = 0; i < a.size(); i++) {
            if (a.get(i).get(0).toString().equals("LINE")) {                
                Line2D linha = new Line2D.Double(Double.parseDouble(a.get(i).get(1).toString())/2,
                                                 Double.parseDouble(a.get(i).get(2).toString())/2,
                                                 Double.parseDouble(a.get(i).get(3).toString())/2,
                                                 Double.parseDouble(a.get(i).get(4).toString())/2);

                g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

                g2d.draw(linha);                
            }
        }
        g2d.dispose();
    }

me ajuda a definir a scala da imagem

por exemplo se eu tenho um pauco de 593x567

e recebo uma imagem de 1200x900

vou ter que calcular tudo

será que não tem como eu receber o valor normal desenhar e depois tipo dar um zoom afastando os elementos?

Eu ainda criaria uma classe para armazenar isso.

Com um enum para o tipo do objeto.
E uma lista com as coordenadas.

Evitar casts e conversões assim é sempre uma boa política. Se você for desenhar muitos pontos, isso vai acabar com sua performance. Faça a conversão uma vez só, na hora da leitura.

O applet tem os métodos getWidth() e getHeigth(). O objeto Graphics() também tem o método getClipRect(). Eles te retornam as dimensões da área de pintura.
E a dica que eu dou é que vc leia os artigos que te passei com cuidado, pq isso também está explicado por lá.

Use para isso a classe AffineTransform. Ela pode fazer o zoom para você.

ok parece que deu certo

@Override
    public void paint(Graphics g) {
        List<ArrayList> a = lista;
        Graphics2D g2d = (Graphics2D) g.create();

        //Scala de zoom out
        AffineTransform af = new AffineTransform();
        af.scale(3,3);
        
        try {
            af.invert();
        } catch (NoninvertibleTransformException ex) {
            Logger.getLogger(ViewerApplet.class.getName()).log(Level.SEVERE, null, ex);
        }

        for (int i = 0; i < a.size(); i++) {
            if (a.get(i).get(0).toString().equals("LINE")) {                
                Line2D linha = new Line2D.Double((Double.parseDouble(a.get(i).get(1).toString()) +10),
                                                 (Double.parseDouble(a.get(i).get(2).toString()) +10),
                                                 (Double.parseDouble(a.get(i).get(4).toString()) +10),
                                                 (Double.parseDouble(a.get(i).get(5).toString()) +10));

                g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
                
                g2d.setTransform(af);
                g2d.draw(linha);
            }
        }
        g2d.dispose();        
    }

Você também pode setar os rendering hints uma única vez, logo depois de usar o create().

vlw coloquei la em cima

qual melhor compoenete para fazer um arco de meu dxf

ele vem com os seguintes atributos

1-ponto central x
2-ponto central y
3-raio
4-anglo inicial
5-anglo final

sei que tem o Arc2D arco = new Arc2D.Double

mas não consegui montalo pois os parametros é diferente como por exemplo Arc2D.OPEN que vc explicou no tutorial
esse componente mesmo qeu devo usar ou outro?

a documentação dele é boa
http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf

vi que o arc do java 2d é bem parecido só que ele não recebe como parametro o raio e sim width e height
como posso calcular então?

Arc2D arco = new Arc2D.Double((Double.parseDouble(a.get(i).get(1).toString())),//StartX,
                                              (Double.parseDouble(a.get(i).get(2).toString())),//StartY,
                                              (50),//Width            //<--------- eu tenho o raio 
                                              (50),//Height,         //<--------- eu tenho o raio 
                                              (Double.parseDouble(a.get(i).get(5).toString())),//startAngle
                                              (Double.parseDouble(a.get(i).get(6).toString())),//endAngle
                                              Arc2D.OPEN);


outra duvida seria que o dxf ler e monta o x e y de baixo pra cima e o applet de cima pra baixo daí tudo fica inverso no meu desenho. temo como espelhar esse desenho ou fazer com que o applet leia de baixo pra cima?

viny só falta o arco pra mim terminar só que não fica igual à imagem acima é encontra de varios arcos para formar um arco grande

veja como esta ficando


 } else if (a.get(i).get(0).toString().equals("ARC")) {//<---------- o arco que ta me dando dor de cabeça                
                Arc2D arco = new Arc2D.Double((Double.parseDouble(a.get(i).get(1).toString()) +10),//StartX,
                                              (Double.parseDouble(a.get(i).get(2).toString()) +10),//StartY,
                                              (Double.parseDouble(a.get(i).get(4).toString())*2),//Width raio*2     //na especificação diz que  tem que passar o tamanho daí tenho o raio 2 vezes que é width!
                                              (Double.parseDouble(a.get(i).get(4).toString())*2),//Height, raio*2
                                              (Double.parseDouble(a.get(i).get(5).toString())),//startAngle    //-<<<<< aqui que parece que ta doido
                                              (Double.parseDouble(a.get(i).get(6).toString())),//endAngle
                                              Arc2D.OPEN);////vi outros tipo também aqui o melhor que ficou foi o Open
                //g2d.setTransform(af);
                //g2d.setStroke(bsThick);
                g2d.setPaint(Color.red);
                g2d.draw(arco);
            } else if (a.get(i).get(0).toString().equals("CIRCLE")) {//<----------circulo e linha ta beleza
                Ellipse2D.Double circle = new Ellipse2D.Double((Double.parseDouble(a.get(i).get(1).toString()) +10),
                                                               (Double.parseDouble(a.get(i).get(2).toString()) +10),
                                                               (Double.parseDouble(a.get(i).get(4).toString()))*2,   // <--------- calculei que o raio é 5 então o width dele é 2 x o raio
                                                               (Double.parseDouble(a.get(i).get(4).toString()))*2);<--------- calculei que o raio é 5 então o height dele é 2 x o raio

                //g2d.setTransform(af);
                //g2d.setStroke(bsThick);
                g2d.setPaint(Color.BLUE);
                g2d.draw(circle);
            }

@ViniGodoy tem como me ajudar a fechar aquele arco igual da primeira figura?

Cara, tenho que pedir para você ler de novo os artigos que te passei? Você chegou a ler?

Leia a parte “Definindo a forma do corpo”.
http://www.pontov.com.br/site/index.php/java/48-java2d/107-o-fantasma-do-pacman

Aliás, aproveita e lê o artigo todo, e os outros também.

ok

como minha aplicação é web optei por usar HTML é bem mais facil e adaptou muito bem pra ler DXF visto que as funções são bem iguais

http://srcware.com/programacao/html-5-introducao-a-tag-canvas/

no html 5 usei igual eu estava usando no applet java2D e no html5 funcionou (Math.PI/180)* angloinicial e (Math.PI/180)* anglofinal mas no java2D é diferente o ARC. que pena.
mas no html5 da pra fazer de tudo que preciso. inclusive scale, rotate, zoom, etc…

[quote=arthurminarini]no html 5 usei igual eu estava usando no applet java2D e no html5 funcionou (Math.PI/180)* angloinicial e (Math.PI/180)* anglofinal mas no java2D é diferente o ARC. que pena.
mas no html5 da pra fazer de tudo que preciso. inclusive scale, rotate, zoom, etc…[/quote]

É pq vc devia ter usado a função Curve, não a Arc. Como explicam os tutoriais.

Essa história de tentar programar por tentativa e erro não dá certo mesmo.

É pq vc devia ter usado a função Curve, não a Arc. Como explicam os tutoriais. 

obrigado!!!

   Essa história de tentar programar por tentativa e erro não dá certo mesmo.

eu li bastante coisa e li os tutoriais mas uma coisa que é simples para você para mim não seja
concordo que brutalforce não é viavel mas estou sem tempo e o HTML5 foi bastante intuitivo e eficaz
incusive é bem parecido com api java2D

obrigado por todas as ajudas! :smiley: