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().
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.
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! 