Скачиваний:
28
Добавлен:
02.05.2014
Размер:
4.18 Кб
Скачать
// LightDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Lighting.h"

#include "LightDlg.h"
#include "LightingView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern GLfloat index;
extern int possibleDivisions[];

/////////////////////////////////////////////////////////////////////////////
// CLightDlg dialog

CLightDlg::CLightDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CLightDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CLightDlg)
	m_air = -1;
	m_subdivision = -1;
	m_red = FALSE;
	m_green = FALSE;
	m_blue = FALSE;
	m_square = FALSE;
	m_shadows = FALSE;
	m_refraction = FALSE;
	m_sphere = FALSE;
	m_lights = FALSE;
	//}}AFX_DATA_INIT
  m_pView = NULL;
}

BOOL CLightDlg::Create(CView * pView)
{
	m_pView = (CLightingView*)pView;
	return CDialog::Create(CLightDlg::IDD);
}

void CLightDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLightDlg)
	DDX_Radio(pDX, IDC_AIR, m_air);
	DDX_Radio(pDX, IDC_SD10, m_subdivision);
	DDX_Check(pDX, IDC_RED, m_red);
	DDX_Check(pDX, IDC_GREEN, m_green);
	DDX_Check(pDX, IDC_BLUE, m_blue);
	DDX_Check(pDX, IDC_SQUARE, m_square);
	DDX_Check(pDX, IDC_SHADOWS, m_shadows);
	DDX_Check(pDX, IDC_REFRACT, m_refraction);
	DDX_Check(pDX, IDC_SPHERE, m_sphere);
	DDX_Check(pDX, IDC_LIGHTS, m_lights);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLightDlg, CDialog)
	//{{AFX_MSG_MAP(CLightDlg)
	ON_CONTROL_RANGE(BN_CLICKED, IDC_AIR, IDC_HFGLASS, OnMaterial)
  ON_CONTROL_RANGE(BN_CLICKED, IDC_SD10, IDC_SD40, OnSubDivision)
  ON_CONTROL_RANGE(BN_CLICKED, IDC_RED, IDC_BLUE, OnColors)
	ON_BN_CLICKED(IDC_SQUARE, OnSquare)
	ON_BN_CLICKED(IDC_REFRACT, OnRefraction)
	ON_BN_CLICKED(IDC_SHADOWS, OnShadows)
	ON_BN_CLICKED(IDC_SPHERE, OnSphere)
	ON_BN_CLICKED(IDC_LIGHTS, OnLights)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLightDlg message handlers


BOOL CLightDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	m_air         = 3;
  
	m_red         = TRUE;
  m_blue        = TRUE;
	m_green       = TRUE;

	m_square      = TRUE;
	m_shadows     = TRUE;
	m_refraction  = TRUE;
	m_sphere      = TRUE;
  m_lights      = TRUE;

	m_subdivision = 1;

  UpdateData(FALSE);	

	return TRUE;
}

void CLightDlg::OnMaterial(UINT nID)
{
	CheckRadioButton(IDC_AIR, IDC_HFGLASS, nID);
  refractionChange(indices[nID - IDC_AIR].index);
}

void CLightDlg::refractionChange(GLfloat type)
{
  if(type == index)
    return;
  index = type;
  for(int i = 0; i < nLights; i++){
    ((CLightingView*)m_pView)->shadowRefractionFullBuild(i);
    ((CLightingView*)m_pView)->refractionListInit(i);
  }
  ((CLightingView*)m_pView)->sceneDraw();
}

void CLightDlg::OnSubDivision(UINT nID)
{
	CheckRadioButton(IDC_SD10, IDC_SD40, nID);
  ((CLightingView*)m_pView)->divisionChange(possibleDivisions[nID - IDC_SD10]);
  ((CLightingView*)m_pView)->sceneDraw();
}

void CLightDlg::OnColors(UINT nID)
{
  int on;

  UpdateData(TRUE);
  switch(nID - IDC_RED){
      case 0: on = m_red;   break;
      case 1: on = m_green; break;
      case 2: on = m_blue;  break;
    }
  
  ((CLightingView*)m_pView)->lightsOnOff(nID - IDC_RED, on);
  ((CLightingView*)m_pView)->sceneDraw();
}

void CLightDlg::OnSquare() 
{
	UpdateData(TRUE);

  ((CLightingView*)m_pView)->drawSquare = m_square;
  ((CLightingView*)m_pView)->sceneDraw();
}

void CLightDlg::OnRefraction() 
{
	UpdateData(TRUE);

  ((CLightingView*)m_pView)->drawRefraction = m_refraction;
  ((CLightingView*)m_pView)->sceneDraw();
}

void CLightDlg::OnShadows() 
{
		UpdateData(TRUE);

  ((CLightingView*)m_pView)->drawShadows = m_shadows;
  ((CLightingView*)m_pView)->sceneDraw();
}

void CLightDlg::OnSphere() 
{
		UpdateData(TRUE);

  ((CLightingView*)m_pView)->drawSphere = m_sphere;
  ((CLightingView*)m_pView)->sceneDraw();
}

void CLightDlg::OnLights()
{
	UpdateData(TRUE);

  ((CLightingView*)m_pView)->drawLights = m_lights;
  ((CLightingView*)m_pView)->sceneDraw();
}
Соседние файлы в папке Lighting