PropertyVisualizer.hh 6.99 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*===========================================================================*\
*                                                                            *
*                              OpenFlipper                                   *
*      Copyright (C) 2001-2011 by Computer Graphics Group, RWTH Aachen       *
*                           www.openflipper.org                              *
*                                                                            *
*--------------------------------------------------------------------------- *
*  This file is part of OpenFlipper.                                         *
*                                                                            *
*  OpenFlipper is free software: you can redistribute it and/or modify       *
*  it under the terms of the GNU Lesser General Public License as            *
*  published by the Free Software Foundation, either version 3 of            *
*  the License, or (at your option) any later version with the               *
*  following exceptions:                                                     *
*                                                                            *
*  If other files instantiate templates or use macros                        *
*  or inline functions from this file, or you compile this file and          *
*  link it with other files to produce an executable, this file does         *
*  not by itself cause the resulting executable to be covered by the         *
*  GNU Lesser General Public License. This exception does not however        *
*  invalidate any other reasons why the executable file might be             *
*  covered by the GNU Lesser General Public License.                         *
*                                                                            *
*  OpenFlipper is distributed in the hope that it will be useful,            *
*  but WITHOUT ANY WARRANTY; without even the implied warranty of            *
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             *
*  GNU Lesser General Public License for more details.                       *
*                                                                            *
*  You should have received a copy of the GNU LesserGeneral Public           *
*  License along with OpenFlipper. If not,                                   *
*  see <http://www.gnu.org/licenses/>.                                       *
*                                                                            *
\*===========================================================================*/
34
35
36
37
38
39
40
41

/*===========================================================================*\
*                                                                            *
*   $Revision$                                                       *
*   $LastChangedBy$                                                *
*   $Date$                     *
*                                                                            *
\*===========================================================================*/
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109

#ifndef PROPERTY_VISUALIZER_HH
#define PROPERTY_VISUALIZER_HH

#include "Utils.hh"

#include <OpenFlipper/BasePlugin/BaseInterface.hh>
#include <OpenFlipper/BasePlugin/LoggingInterface.hh>

#include "OpenMesh/Core/Geometry/VectorT.hh"

#ifdef ENABLE_SKELETON_SUPPORT
    #include <ObjectTypes/Skeleton/BaseSkin.hh>
#endif

#include <stdexcept>

class VizException : public std::logic_error {
    public:
        VizException(const std::string &msg) : std::logic_error(msg) {}
};


/*! \class PropertyVisualizer
 *  \brief This class vizualizes a property.
 *
 * For each property one object of this class is created. It is responsible for
 * the visualization of that property. It provides a widget that can be used
 * to set options for the visualization.
 *
 */
class PropertyVisualizer: public QObject
{
    Q_OBJECT

signals:
    void log(Logtype _type, QString _message);
    void log(QString _message);

public:
    /**
     * @brief Constructor
     *
     * @param _propertyInfo Information about the property this visualizer should visualize.
     */
    PropertyVisualizer(PropertyInfo _propertyInfo)
        :
          propertyInfo(_propertyInfo),
          widget(0)
    {
    }

    /// Destructor
    virtual ~PropertyVisualizer(){delete widget;}

    /// Visualizes the property.
    virtual void visualize();

    /// Removes the property.
    virtual void removeProperty();

    /// Duplicates the property.
    virtual void duplicateProperty();

    /// Clears the property visualization.
    virtual void clear();

    /**
Jan Möbius's avatar
Typo    
Jan Möbius committed
110
     * @brief Returns a beautiful name.
111
     *
Jan Möbius's avatar
Typo    
Jan Möbius committed
112
     * The beautiful name consists of a symbol representing the entity type, the property's
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
     * name and the property's type.
     */
    virtual QString getName() { return propertyInfo.toString(); }

    /** @brief Returns the visualizer's widget.
     *
     * Returns the visualizer's widget that can be used to set some options
     * for the visualization.
     */
    virtual QWidget* getWidget() { return widget; }

    /// Returns the PropertyInfo.
    const PropertyInfo& getPropertyInfo() const { return propertyInfo; }

    /**
     * @brief Returns the value of a property in text form.
     * @param i The id of the entity whose property we want to know.
     * @return The property value in text form.
     */
    virtual QString getPropertyText(unsigned int i) = 0;


    /**
     * @brief Returns the value of a property in text form.
     * @param index The id of the entity whose property should be set.
     * @param text The value in text form.
     *
     * This method sets the porperty of a given entity by transforming
     * the text into the correct type. This is used when a property is
     * loaded from a file.
     */
    virtual void setPropertyFromText(unsigned int index, QString text) = 0;

    /// Returns the number of entities.
    virtual int getEntityCount() = 0;

    /// Returns the header for saving.
    virtual QString getHeader() = 0;


    static inline QString toStr(bool b)               { return b ? QObject::tr("True") : QObject::tr("False"); }
    static inline QString toStr(double d)             { return QObject::tr("%1").arg(d); }
    static inline QString toStr(int i)                { return QObject::tr("%1").arg(i); }
    static inline QString toStr(unsigned int i)       { return QObject::tr("%1").arg(i); }
    static        QString toStr(OpenMesh::Vec3d v);
#ifdef ENABLE_SKELETON_SUPPORT
    static        QString toStr(BaseSkin::SkinWeights sw);
#endif

    static inline bool            strToBool  (QString str) { return (str.compare(QObject::tr("True"))==0); }
    static inline double          strToDouble(QString str) { return str.toDouble() ;    }
    static inline int             strToInt   (QString str) { return str.toInt();        }
    static inline unsigned int    strToUInt  (QString str) { return str.toUInt();       }
    static        OpenMesh::Vec3d strToVec3d (QString str);



protected:

    PropertyInfo propertyInfo;
    QWidget* widget;

};

#endif /* PROPERTY_VISUALIZER_HH */