Diversas marcas fijas en una gráfica estática

TeeChart for Java (NetBeans, Eclipse, Android Studio, etc)
Post Reply
Carlos
Newbie
Newbie
Posts: 22
Joined: Fri Jan 26, 2007 12:00 am

Diversas marcas fijas en una gráfica estática

Post by Carlos » Fri Mar 23, 2007 9:41 am

Hola,

No consigo dejar marcas fijas en la gráfica, ni tampoco más de una.
Utilizando la herramienta 'mark tips', va poniendo marcas correctamente, aunque me gustaria que no existiera delay sino que simplemente se quedaran fijas, y mediant la herramienta 'nearest point' no sale ningun tipo de marca en la gráfica.

Gracias por la ayuda

Carlos.

Marc
Site Admin
Site Admin
Posts: 1272
Joined: Thu Oct 16, 2003 4:00 am
Location: Girona
Contact:

Post by Marc » Fri Mar 23, 2007 11:40 am

Hola Carlos,

Para conseguir Marcas permanentes:
Ejemplo:

Setting Marks to Visible

Code: Select all

lineSeries = new com.steema.teechart.styles.Line(tChart.getChart()); 
lineSeries.getMarks().setVisible(true);
Se puede modificar otros aspectos de las marcas por la misma clase:

Ej.

Code: Select all

lineSeries.getMarks().setBackColor(com.steema.teechart.drawing.Color.ORANGE);
lineSeries.getMarks().setTransparency(30);
saludos,
Marc Meumann
Steema Support

Carlos
Newbie
Newbie
Posts: 22
Joined: Fri Jan 26, 2007 12:00 am

Post by Carlos » Fri Mar 23, 2007 11:57 am

Mi intencion es mas bien que el usuario tenga la opcion de elegir un punto de la grafica, y por ejemplo haciendo clic con el raton, aparezca una marca.

Esto se puede conseguir facilmente con 'tool->mark tips', pero no quiero que desaparezca, sino que se quede fija y que pueda ir a otro punto y marcarlo tambien.

Habia pensado en, por ejemplo, utilizar el boton derecho del raton, o sea, utilizar 'mark tips' con movimiento en vez de con el clic del raton, que el usuario haga un clic en el boton derecho cuando quiera que se quede marcado ese punto, y que aparezca una marca (que no es la misma que con 'mark tips') de manera permanente, sin que se borre con el tiempo.
Podria hacerse con una anotacion verdad?, o sea, en el momento que reciba el evento del boton derecho del mouse, recoger su posicion, recoger de alguna manera la serie a la que se refiere, y crear una anotacion en esa posicion con los datos que me interesen de la serie.

Hay muchos problemas en hacerlo asi?, o hay alguna otra manera mas sencilla de conseguir lo que quiero?

Gracias por la ayuda

Carlos.

Narcís
Site Admin
Site Admin
Posts: 14730
Joined: Mon Jun 09, 2003 4:00 am
Location: Banyoles, Catalonia
Contact:

Post by Narcís » Fri Mar 23, 2007 12:41 pm

Hola Carlos,

En este caso yo utilizaria AnnotationTools. Puedes encontrar ejemplos en la sección All Features\Welcome!\Tools\Annotation de la demo TeeChart.Features.jar, incluida con la instalación.

También agradeceriamos que, si es possible, escribieras tus mensajes en inglés. De este modo muchos mas usuarios de los foros pueden seguir las discusiones.

Gracias de antemano.
Best Regards,
Narcís Calvet / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

Marc
Site Admin
Site Admin
Posts: 1272
Joined: Thu Oct 16, 2003 4:00 am
Location: Girona
Contact:

Post by Marc » Fri Mar 23, 2007 2:59 pm

Hola Carlos,

Si. Lo podrias hacer con Annotation.

Una manera seria utilizar 'clicked' del Series.

Ej.

Code: Select all

private int pointIndex=-1;

private void initTChart(){ 

    tChart.setHeight(100); 
    tChart.setMinimumSize(new java.awt.Dimension(100, 100)); 
    tChart.setPreferredSize(new java.awt.Dimension(100, 100)); 
    tChart.setWidth(100); 

    mat = new double[15][24]; 
    for(int i=0; i<1; i++){ 
        lineSeries = new com.steema.teechart.styles.Line(tChart.getChart()); 
        lineSeries.setClickableLine(false); 
        lineSeries.getPointer().setVisible(true);

        for(int j=0; j<24; j++){ 
            lineSeries.add(10*Math.random()); 
        } 

        tChart.addMouseMotionListener( new MouseMotionAdapter() {
                public void mouseMoved(MouseEvent e) {
                    double tmpX = tChart.getAxes().getBottom().calcPosPoint(e.getX());
                    int i = (int)Math.round(tmpX);
                    double tmpY;
                    try
                    {
                      tmpY = lineSeries.getYValues().getValue(i);
                    }
                    catch(ArrayIndexOutOfBoundsException ee)
                    {
                      return;
                    }

                    int yValue = tChart.getAxes().getLeft().calcPosValue(tmpY);

                    int tmpPoint = lineSeries.clicked(e.getX(), e.getY());
                    pointIndex = tmpPoint;
                    tChart.repaint();
               }
        });

        tChart.addChartPaintListener( new com.steema.teechart.events.ChartPaintAdapter() {

            public void chartPainted(com.steema.teechart.events.ChartDrawEvent pce) {
                if (pointIndex!=-1) {
                    com.steema.teechart.tools.Annotation anno=new com.steema.teechart.tools.Annotation(tChart.getChart());
                    anno.setText(Integer.toString(pointIndex));
                    anno.setLeft(lineSeries.calcXPos(pointIndex));
                    anno.setTop(lineSeries.calcYPos(pointIndex));
                    }
                }
        });
    } 

    tChart.getFooter().setVisible(true); 
    tChart.getHeader().setVisible(true); 
    tChart.getAspect().setView3D(false); 
    tChart.getLegend().setVisible(false); 
    tChart.setBackground(Color.WHITE); 

    jFrameTeeChartCommander = new Commander(tChart.getChart()); 
    jFrameTeeChartCommander.setFloatable(false); 
    jFrameTeeChartCommander.setVisible(true); 
    jFrameTeeChartCommander.setRollover(true); 

    jPanel1.setLayout(new BorderLayout()); 
    jPanel1.add(jFrameTeeChartCommander, BorderLayout.PAGE_START); 
    jPanel1.add(tChart, BorderLayout.CENTER); 
    jPanel1.repaint(); 
    jPanel1.validate(); 
}
Las Annotations se activan cuando pasas el mouse sobre los puntos de la Series.

saludos,
Marc

Carlos
Newbie
Newbie
Posts: 22
Joined: Fri Jan 26, 2007 12:00 am

Post by Carlos » Mon Mar 26, 2007 8:01 am

Estoy probando un poco con el codigo que has pasado, aun tengo problemillas con la posicion de la Annotation y cosillas por el estilo, supongo que es por haber fusilado el codigo directamente, sigo mirandolo :)

Otra preguntilla, para borrar estas anotaciones?, por si se hace un zoom y tal, donde se 'guardan'?

Y el tema de ingles, lo siento pero no tengo suficiente nivel como para poder escribir bien, pero a partir de ahora (este post), intentare secuestrar a alguien para que me vaya traduciendo.

Gracias

Carlos.

Narcís
Site Admin
Site Admin
Posts: 14730
Joined: Mon Jun 09, 2003 4:00 am
Location: Banyoles, Catalonia
Contact:

Post by Narcís » Mon Mar 26, 2007 8:37 am

Hola Carlos,
Otra preguntilla, para borrar estas anotaciones?, por si se hace un zoom y tal, donde se 'guardan'?
Cada vez que se hace zoom tendrias que actualizar la posición de las anotaciones en el evento Zoomed del chart.

Puedes acceder las anotaciones como se muestra abajo. Ten en cuenta que seguramente tendrás que hacer un "type casting" de las tools en la colección getTools ya que puede que no todas las tools sean anotaciones.

Code: Select all

    for(int i=0; i<tChart.getTools().size(); i++){ 
       //tChart.getTools().getTool(i) //type casting necesario        
    }
Y el tema de ingles, lo siento pero no tengo suficiente nivel como para poder escribir bien, pero a partir de ahora (este post), intentare secuestrar a alguien para que me vaya traduciendo.


De acuerdo, ningún problema, puedes seguir escribiendo en castellano.
Best Regards,
Narcís Calvet / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

Carlos
Newbie
Newbie
Posts: 22
Joined: Fri Jan 26, 2007 12:00 am

Post by Carlos » Mon Mar 26, 2007 1:09 pm

Ya he conseguido lo de las anotaciones, aunque he aprovechado otro codigo que teneis en los ejemplos:

Code: Select all

tempX = tChart.getAxes().getBottom().calcPosPoint(e.getX());
        Series lineSeries = tChart.getSeries(3);
        pointIndex = getNearestPoint(lineSeries, e.getX(), e.getY());
        int i = (int)Math.round(tempX);
        try
        {
          tempY = lineSeries.getYValues().getValue(pointIndex);
        }
        catch(ArrayIndexOutOfBoundsException ee)
        {
            ee.printStackTrace();
          return;
        }        
        com.steema.teechart.tools.Annotation anno=new com.steema.teechart.tools.Annotation(tChart.getChart());
            
        anno.setText(Double.toString(tempX) +", "+ Double.toString(tempY));
        anno.setLeft(lineSeries.calcXPos(pointIndex));
        anno.setTop(lineSeries.calcYPos(pointIndex));
        tChart.repaint();

Code: Select all

private int getNearestPoint(Series aSeries, int x, int y) {
        int tmpResult = -1;
        int difference = -1;
        int tmpDif, tmpX, tmpY;

        for (int t=0; t < aSeries.getCount(); t++) {

            tmpX = aSeries.calcXPos(t) - x;
            tmpY = aSeries.calcYPos(t) - y;
            tmpDif = MathUtils.round(Math.sqrt(MathUtils.sqr(tmpX) + MathUtils.sqr(tmpY)));

            if ((difference==-1) || (tmpDif<difference)) {
                difference = tmpDif;
                tmpResult = t;
            }
        }

        return tmpResult;
    }

Code: Select all

public void mouseDragged(MouseEvent e) {
        for(int i=0; i<tChart.getTools().size(); i++){
            if (tChart.getTools().getTool(i) instanceof com.steema.teechart.tools.Annotation) {
                tChart.getTools().remove(i);
            }
        }   
        pointIndex = -1;
    }
Por ahora hay una serie puesta a pelo, pero bueno, son las tonterias que me faltan por modificar.

Gracias de nuevo

Carlos.

Post Reply