tools/diagram-viewer/diagram.h
author Dmitriy Morozov <dmitriy@mrzv.org>
Sat, 11 Apr 2009 10:29:53 -0700
branchdev
changeset 126 3c3e77ac43d2
parent 99 6c0da7931e4d
permissions -rw-r--r--
Added Python bindings for the Rips complex + an example

#ifndef __DIAGRAM_H__
#define __DIAGRAM_H__

#include <QtGui>
#include <QObject>
#include <QColor>

#include <map>

#include <utilities/types.h>
#include <topology/persistence-diagram.h>

typedef         PersistenceDiagram<>                PDiagram;
typedef         std::map<Dimension, PDiagram>       Diagrams;

class DgmPoint;

class DgmViewer: public QGraphicsView
{
    Q_OBJECT

    public:
        typedef             std::vector<DgmPoint*>          PointsVector;

                            DgmViewer(const PDiagram& dgm);
                            ~DgmViewer();

        void                addDgmPoints();

    private:
        PointsVector        points;
        QGraphicsScene      scene;
        RealType            min_x, min_y, max_x, max_y;
};


class DgmPoint: public PDPoint<>, public QGraphicsItem
{
    public:
        typedef             PDPoint<>                                       Parent;

                            DgmPoint(QGraphicsItem* parent = 0);
                            DgmPoint(const Parent& pt, qreal size, QGraphicsItem *parent = 0); 
                            DgmPoint(RealType b, RealType d, qreal size, QGraphicsItem *parent = 0); 
        
        void                paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
        QRectF                 boundingRect() const;
        
        qreal               getX() const                    { return Parent::x(); }
        qreal               getY() const                    { return Parent::y(); }

        int                 type() const                                    { return QGraphicsItem::UserType + 1; }

    private:
        // size of rectangle containing ellipses
        qreal                 ellipse_size;
};


#endif // __DIAGRAM_H__