Painel para edição de curvas

Olá…

Preciso oferecer em meu sistema a funcionalidade de usuário editar curvas. Estas curvas representarão informações importantes que serão processadas com outros dados para oferecer conclusões.

A ideia seria oferecer um painel em que o usuário primeiramente definiria os dois pontos extremos da curva e o sistema definiria uma reta entre eles. Em seguida, o usuário poderia adicionar e remover pontos de controle a esta curva e controlá-la como desejasse…

Alguém sabe se há uma forma simples de plotar essas curvas em função de um conjunto de pontos de controle?
Além disso, alguém tem algum sugestão de como posso oferecer a interação de criação, destruição e manipulação destes pontos de controle? Preciso definir os pontos como componentes?

Um requisito adicional ainda, e com o qual terei de me preocupar depois, é como armazenar esta curva no BD.

Agradeço desde já.

Você diz uma curva mesmo, ou quer dizer um gráfico de linhas por exemplo?
O cara definiria -10 como início e 100 como fim. Ai ele conseguiria inserir pontos no gráfico. É isso?

Eu faria o seguinte:
Eu teria um painel, que seria usado como o container dos pontos e onde os pedaços do gráfico seriam desenhados.
Para cada um dos pontos, eu usaria um painel também de dimensões fixas, por exemplo, 5x5 pixels. Para cada ponto adicionado, seria adicionado então esse painel 5x5 no painel onde é feito o desenho. Vc deve configurar o layout do painel de desenho como null.
Ai vc poderia ter uma classe para representar o gráfico…

Enfim, dá uma olhada no exemplo. Não está completo, estou como sono… A orientação a objetos tbm não está lá aquelas coisas, mas é mais ou menos nesse caminho…
Acredito que o seu maior problema é controlar o drag and drop dos pontos… Se é que eu entendi direito o que você está querendo…

[]´s

Na verdade, eu preciso de uma curva mesmo…Não lembro se spline ou bezier…Em que eu possa adicionar pontos de controle para formatar a curva

Então, o procedimento é parecido com o que eu passei. Vc vai ter q ter o ponto e os pontos de controle dependendo da curva. Ai vc teria n curvas, ligadas umas nas outras.
Se vc usar como base o que eu passei e melhorar muito a idéia básica e a implementação que não está lá aquelas coisas, vc consegue estender para o que você precisa.

[]´s

Ah, e as curvas, vc pode usar a CubicCurve2D ou a QuadCurve2D. Dê uma lida na documentação. Estão no pacote java.awt.geom.

[]´s

Acho que você vai gostar de ler esses artigos:
Ponto V - Pintando no Java 2D
Ponto V - O fantasma do Pacman

O primeiro explica como funcionam as classes do Java 2D, o segundo mostra um exemplo prático.

Agradeço à ajuda de ambos…

Devo dizer que seu artigo sobre as primitivas do Java2d foram extremamente úteis, Viny.

Abraço!

Olá pessoal…Consegui progressos em meu problema, ele está parcialmente resolvido.

Em meu editor, a ideia era oferecer a possibilidade do usuário estabelecer uma curva, entre dois pontos que eu fixo através de JSliders. Estes pontos devem ser fizados através do slider porque eles representam intervalos discretos, controlados. Assim, para estabelecer o ponto topo e o ponto base entre os quais será definida a curva, eu precisa controlar de alguma forma a definição destes pontos. O slider foi minha melhor opção até o momento. Talvez depois eu crie um componente específico para isso.

Estou enviando em anexo meu código parcial. No momento eu consigo desenhar a curva como eu queria. Mas agora eu preciso preencher esta curva, como mostro na imagem que também segue em anexo. Na imagem, à esquerda eu mostro o resultado que já consegui alcançar, na direita, mostro o resultado que quero agora.

Tenho a impressão de que vou precisar trabalhar com polígonos, mas não consegui entender ainda como criar um polígono para este fim. Nos testes que fiz usando polígonos saíram umas coisas estranhas. Alguém poderia dar uma dica?

Ah, sim…A ideia é, depois de definir a curva, armazenar a informação importante associada à ela em BD, de modo que eu possa ressintetizá-la quando eu quiser e processar estas informações associadas. Outra coisa que vou fazer é criar um método para este componente me retornar uma imagem com a curva em questão. Vou precisar exibir esta imagem em uma tabela mais tarde, associada a outras informações…Mas esta parte me parece mais fácil. Só coloquei aqui para que entendam onde quero chegar.

Em tempo…Para tentar criar o polígono que eu preciso, em um dos meus testes eu usei o GeneralPath. Aí, fiquei com 5 pontos para trabalhar:
-3 Pontos da curva:
–PontoTopo = Define o ponto extremo da curva que fica no topo vertical
–PontoBase = Define o ponto extremo da curva que fica na base vertical
–PontoControle = É o ponto que o usuário pode arrastar livremente. Ele define a curvatura da curva entre os dois pontos extremos

-2 Pontos para fechar o polígono no extremo esquerdo da tela:
–PontoFinalTopo = Define o ponto mais à esquerda do limite superior da minha área de desenho
–PontoFinalBase = Define o ponto mais à esquerda do limite inferior da minha área de desenho

Definidos os pontos, fiz a seguinte sequência:
1-moveTo(0,0) para o polígono
2-lineTo(PontoFinalTopo)
3-lineTo(pontoFinalBase)
4-lineTo(pontoBase)
5-curveTo(pontoBase,pontoControle,pontoTopo)
6-lineTo(pontoFinalTopo)

Só que este processo não faz aquilo que espero…