/*===========================================================================*\ * * * OpenFlipper * * Copyright (C) 2001-2014 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 . * * * \*===========================================================================*/ /*===========================================================================*\ * * * $Revision$ * * $LastChangedBy$ * * $Date$ * * * \*===========================================================================*/ #ifndef PROPERTY_VISUALIZER_HH #define PROPERTY_VISUALIZER_HH #include "Utils.hh" #include #include #include "OpenMesh/Core/Geometry/VectorT.hh" #ifdef ENABLE_SKELETON_SUPPORT #include #endif #include 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(bool _setDrawMode = true); /// Removes the property. virtual void removeProperty(); /// Duplicates the property. virtual void duplicateProperty(); /// Clears the property visualization. virtual void clear(); /** * @brief Returns a beautiful name. * * The beautiful name consists of a symbol representing the entity type, the property's * 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 */