/***************************************************************************
  qgs25drenderer.sip - Qgs25DRenderer

 ---------------------
 begin                : 14.1.2016
 copyright            : (C) 2016 by Matthias Kuhn
 email                : matthias@opengis.ch
 ***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

class Qgs25DRenderer : QgsFeatureRenderer
{
%TypeHeaderCode
#include "qgs25drenderer.h"
%End
  public:
    Qgs25DRenderer();

    /**
     * Create a new 2.5D renderer from XML
     *
     * @param element XML information
     */
    static QgsFeatureRenderer* create( QDomElement& element );
    QDomElement save( QDomDocument& doc );

    void startRender( QgsRenderContext& context, const QgsFields& fields );
    void stopRender( QgsRenderContext& context );

    QSet<QString> usedAttributes() const;
    QgsFeatureRenderer* clone() const;

    virtual QgsSymbol* symbolForFeature( QgsFeature& feature, QgsRenderContext& context );
    virtual QgsSymbolList symbols( QgsRenderContext& context );

    /**
     * Get the roof color
     */
    QColor roofColor() const;

    /**
     * Set the roof color
     */
    void setRoofColor( const QColor& roofColor );

    /**
     * Get the wall color
     */
    QColor wallColor() const;

    /**
     * Set the wall color
     */
    void setWallColor( const QColor& wallColor );

    /**
     * Set wall shading enabled
     */
    void setWallShadingEnabled( bool enabled );

    /**
     * Get wall shading enabled
     */
    bool wallShadingEnabled();

    /**
     * Get the shadow's color
     */
    QColor shadowColor() const;

    /**
     * Set the shadow's color
     */
    void setShadowColor( const QColor& shadowColor );

    /**
     * Get the shadow's spread distance in map units
     */
    double shadowSpread() const;
    /**
     * Set the shadow's spread distance in map units
     */
    void setShadowSpread( double shadowSpread );

    /**
     * Try to convert from an existing renderer. If it is not of the same type
     * we assume that the internals are not compatible and create a new default
     * 2.5D renderer.
     */
    static Qgs25DRenderer* convertFromRenderer( QgsFeatureRenderer* renderer );

    /**
     * Is the shadow enabled
     */
    bool shadowEnabled() const;
    /**
     * Enable or disable the shadow
     */
    void setShadowEnabled( bool value );
};