/* gtkplotcsurface - csurface plots widget for gtk+
 * Copyright 1999-2001  Adrian E. Feiguin <feiguin@ifir.edu.ar>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library 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
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */

#ifndef __GTK_PLOT_CSURFACE_H__
#define __GTK_PLOT_CSURFACE_H__

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

#include "gtkplot.h"
#include "gtkplotdt.h"
#include "gtkplotsurface.h"
#include "gtkplotpc.h"


#define GTK_PLOT_CSURFACE(obj)        G_TYPE_CHECK_INSTANCE_CAST (obj, gtk_plot_csurface_get_type (), GtkPlotCSurface)
#define G_TYPE_PLOT_CSURFACE        (gtk_plot_csurface_get_type ())
#define GTK_PLOT_CSURFACE_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, gtk_plot_csurface_get_type, GtkPlotCSurfaceClass)
#define GTK_IS_PLOT_CSURFACE(obj)     G_TYPE_CHECK_INSTANCE_TYPE (obj, gtk_plot_csurface_get_type ())

typedef struct _GtkPlotCSurface		GtkPlotCSurface;
typedef struct _GtkPlotCSurfaceClass	GtkPlotCSurfaceClass;

typedef enum
{
  GTK_PLOT_PROJECT_NONE,  /* draw surface with no projections */
  GTK_PLOT_PROJECT_EMPTY, /* draw empty contours -- lines only.
                             Notice that the style of the lines is given by
                             levels/sublevels_line. You should set to 
                             GTK_PLOT_LINE_NONE if you don't want the lines
                             drawn */
  GTK_PLOT_PROJECT_FULL,  /* draw filled contours */
} GtkPlotProjection;      


/**
 * GtkPlotCSurface:
 *
 * The GtkPlotCSurface struct contains only private data.
 * It should only be accessed through the functions described below.
 */
struct _GtkPlotCSurface
{
  GtkPlotSurface surface;

  gboolean lines_visible;  /* show contour level lines -- for 3d only */
                           /* for 2d it is given by projection and line style */
  GtkPlotProjection projection;  /* project on x-y plane */

  /* all fields below this line are for 2d contours */
  
  GList *levels;           /* polygons corrsponding to each contour level */
  GList *bg_triangles;     /* background triangles, drawn before the contour
                              levels, that are not cut by any contour line */

  GtkPlotLine levels_line;
  GtkPlotLine sublevels_line;
};

struct _GtkPlotCSurfaceClass
{
  GtkPlotSurfaceClass parent_class;
};

/* PlotCSurface */

GType		gtk_plot_csurface_get_type	(void);
GtkWidget*	gtk_plot_csurface_new		(void);
GtkWidget*	gtk_plot_csurface_new_function	(GtkPlotFunc3D function);

void		gtk_plot_csurface_construct_function (GtkPlotCSurface *csurface,
					 	      GtkPlotFunc3D function);

void		gtk_plot_csurface_set_lines_visible (GtkPlotCSurface *csurface,
						     gboolean visible);
gboolean	gtk_plot_csurface_get_lines_visible (GtkPlotCSurface *csurface);
void		gtk_plot_csurface_set_projection    (GtkPlotCSurface *csurface,
						     GtkPlotProjection proj);
GtkPlotProjection	gtk_plot_csurface_projection 	(GtkPlotCSurface *csurface);
void            gtk_plot_csurface_set_levels_attributes (GtkPlotCSurface *dataset,
                                                         GtkPlotLineStyle style,
                                                         gfloat width,
                                                         const GdkColor *color);
void            gtk_plot_csurface_set_sublevels_attributes (GtkPlotCSurface *dataset,
                                                         GtkPlotLineStyle style,
                                                         gfloat width,
                                                         const GdkColor *color);
void            gtk_plot_csurface_get_levels_attributes (GtkPlotCSurface *dataset,
                                                         GtkPlotLineStyle *style,
                                                         gfloat *width,
                                                         GdkColor *color);
void            gtk_plot_csurface_get_sublevels_attributes (GtkPlotCSurface *dataset,
                                                         GtkPlotLineStyle *style,
                                                         gfloat *width,
                                                         GdkColor *color);

#ifdef __cplusplus
}
#endif /* __cplusplus */


#endif /* __GTK_PLOT_CSURFACE_H__ */
