/*
* Copyright (C) 2008,2009,2010 Thorsten Liebig (Thorsten.Liebig@gmx.de)
*
* This program 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.
*
* This program 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 Lesser General Public License
* along with this program. If not, see .
*/
#ifndef _QVTKSTRUCTURE_H_
#define _QVTKSTRUCTURE_H_
#include
#include "vtkCommand.h"
#if VTK_MAJOR_VERSION>=8
class QVTKOpenGLWidget;
#else
class QVTKWidget;
#endif
class vtkRenderWindow;
class vtkRenderWindowInteractor;
class vtkRenderer;
class vtkAxesActor;
class vtkActor;
class ContinuousStructure;
class VTKPrimitives;
class vtkObject;
class vtkRectilinearGrid;
class vtkStructuredGrid;
class QVTKStructure : public QObject
{
Q_OBJECT
public:
QVTKStructure();
virtual ~QVTKStructure();
QWidget* GetVTKWidget() {return (QWidget *)VTKWidget;};
void AddAxes();
void SetGeometry(ContinuousStructure *CS);
void clear();
void SetBackgroundColor(int r, int g, int b);
//! Set the update mode to false if this widget should not be rendered e.g. because it is hidden
void SetUpdateMode(bool mode) {AllowUpdate=mode;}
//Callback
void SetCallback(vtkRenderWindowInteractor *iren);
public slots:
void SetGridOpacity(int val);
void ResetView();
void setXY();
void setYZ();
void setZX();
void SetPropOpacity(unsigned int uiID, int val);
void RenderGrid();
void RenderGridX(int plane_pos);
void RenderGridY(int plane_pos);
void RenderGridZ(int plane_pos);
void RenderGeometry();
//! Enable/Disable 3D parallel projection
void SetParallelProjection(bool val, bool render=true);
//! Enable/Disable 2D interaction style
void Set2DInteractionStyle(bool val, bool render=true);
void SaveCamData();
void RestoreCamData(bool render);
void RenderDiscMaterialModel();
//! Export the current view to an image file (currently only png)
void ExportView2Image();
void ExportProperty2PolyDataVTK(unsigned int uiID, QString filename, double scale = 1.0);
void ExportProperty2STL(unsigned int uiID, QString filename, double scale = 1.0);
void ExportProperty2PLY(unsigned int uiID, QString filename, double scale = 1.0);
protected slots:
void RenderGridDir(int dir, unsigned int plane_pos);
protected:
typedef struct
{
VTKPrimitives* VTKProp;
unsigned int uID;
} VTKLayerStruct;
#if VTK_MAJOR_VERSION>=8
QVTKOpenGLWidget *VTKWidget;
#else
QVTKWidget *VTKWidget;
#endif
//set to false if this widget is hidden
bool AllowUpdate;
vtkRenderer *ren;
vtkAxesActor* Axes;
ContinuousStructure* clCS;
QVector LayerPrimitives;
vtkRectilinearGrid *m_Rect_Grid;
vtkStructuredGrid *m_Struct_Grid;
vtkActor* ActorGridPlane[3];
int GridOpacity; //remember the grid opacity
int iResolution;
typedef struct
{
VTKPrimitives* vtk_model;
unsigned int uID;
} VTKDiscModel;
QVector m_DiscMatModels;
typedef struct
{
double pos[3];
double focalPoint[3];
double viewUp[3];
double viewAngle;
} CamData;
CamData* m_CamData;
struct KeyPressData
{
vtkActor **GridPlanes;
vtkRenderer *ren;
vtkRenderWindowInteractor * iren;
};
static void KeyPress(vtkObject *caller, unsigned long eid, void *clientdata, void *calldata);
};
#endif //_QVTKSTRUCTURE_H_