Пример #1
0
void MorphObject::SetupTargetList()
   {
   if (!morphCont) return;
   SendMessage(GetDlgItem(hParams2,IDC_MORPHTARG_LIST),LB_RESETCONTENT,0,0);
   for (int i=0; i<morphCont->NumMorphTargs(); i++) {
      SendMessage(GetDlgItem(hParams2,IDC_MORPHTARG_LIST),
         LB_ADDSTRING,0,(LPARAM)(const TCHAR*)SubAnimName(i));
      }
   if (sel>=0) {
      SendMessage(GetDlgItem(hParams2,IDC_MORPHTARG_LIST),
         LB_SETCURSEL,sel,0);
      EnableWindow(GetDlgItem(hParams2,IDC_CREATE_MORPHKEY),TRUE);
      EnableWindow(GetDlgItem(hParams2,IDC_DELETE_MORPHTARG),TRUE);

      ICustEdit *edit = GetICustEdit(GetDlgItem(hParams2,IDC_MORPHTARG_NAME));
      edit->Enable();
      edit->SetText(SubAnimName(sel));
      ReleaseICustEdit(edit);
   } else {
      EnableWindow(GetDlgItem(hParams2,IDC_CREATE_MORPHKEY),FALSE);
      EnableWindow(GetDlgItem(hParams2,IDC_DELETE_MORPHTARG),FALSE);
      
      ICustEdit *edit = GetICustEdit(GetDlgItem(hParams2,IDC_MORPHTARG_NAME));
      edit->Disable();
      edit->SetText(_T(""));
      ReleaseICustEdit(edit);
      }
   }
void ConvexApproximationObject::DestroyUI(HWND hWnd)
{
	ReleaseICustEdit (m_maxConcavity);
	ReleaseISpinner (m_maxConcavitySpinner);

	ReleaseICustEdit (m_maxSegments);
	ReleaseISpinner (m_maxSegmentsSpinner);
}
void RigidBodyWorld::DestroyUI(HWND hWnd)
{
	ReleaseICustEdit (m_minFps);
	ReleaseICustEdit (m_gravity[0]);
	ReleaseICustEdit (m_gravity[1]);
	ReleaseICustEdit (m_gravity[2]);

	UnRegisterNotification(OnUndoRedo, this, NOTIFY_SCENE_UNDO);
	UnRegisterNotification (OnUndoRedo, this, NOTIFY_SCENE_REDO);

}
Пример #4
0
void EllipseObject::UpdateUI(HWND hwnd)
{
	Interval valid;
	BOOL build_outine = FALSE;
	TimeValue t = ip? ip->GetTime() : 0;

	myParamBlock->GetValue(PB_OUTLINE, t, build_outine, valid);
	ICustEdit *thickness_edit = GetICustEdit(GetDlgItem(hwnd, IDC_THICKNESSEDIT));
	ISpinnerControl *thickness_spin = GetISpinner(GetDlgItem(hwnd, IDC_THICKSPINNER));

	if(!thickness_edit || !thickness_spin)
		return;

	if(build_outine)
	{
		EnableWindow(GetDlgItem(hwnd,IDC_THICKNESS_TEXT),TRUE);
		thickness_edit->Enable();
		thickness_spin->Enable();
	}
	else
	{
		EnableWindow(GetDlgItem(hwnd,IDC_THICKNESS_TEXT),FALSE);
		thickness_edit->Disable();
		thickness_spin->Disable();
	}

	ReleaseICustEdit(thickness_edit);
	ReleaseISpinner(thickness_spin);
}
Пример #5
0
ObjectReference::~ObjectReference()
{
	assert( _edit );
	ReleaseICustEdit( _edit );

	assert( hwndEdit );
	DestroyWindow( hwndEdit );

	assert( hwndBrowseButton );
	DestroyWindow( hwndBrowseButton );

	assert( hwndGoToObjectButton );
	DestroyWindow( hwndGoToObjectButton );
}
Пример #6
0
Fixed32::~Fixed32()
{
	assert( _edit );
	ReleaseICustEdit( _edit );

	assert( _spinner );
	ReleaseISpinner( _spinner );

	assert( hwndEdit );
	DestroyWindow( hwndEdit );

	assert( hwndSpinner );
	DestroyWindow( hwndSpinner );
}
Пример #7
0
void
FooControl::set_enable()
{
	if (parent_rollout != NULL && parent_rollout->page != NULL)
	{
		// set spinner enable
		ISpinnerControl *spin = GetISpinner(GetDlgItem(parent_rollout->page, control_ID));
		if (enabled) spin->Enable();
		else spin->Disable();
		ReleaseISpinner(spin);
		// set editbox enable
		ICustEdit *edit = GetICustEdit(GetDlgItem(parent_rollout->page, control_ID+2));
		if (enabled) edit->Enable();
		else edit->Disable();
		ReleaseICustEdit(edit);
		// set caption enable
		HWND ctrl = GetDlgItem(parent_rollout->page, control_ID+1);
		if (ctrl)
			EnableWindow(ctrl, enabled);
	}
}
Пример #8
0
static INT_PTR CALLBACK MorphParamDlgProc2( 
      HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
   {
   MorphObject *mo = DLGetWindowLongPtr<MorphObject*>(hWnd);
   if (!mo && message!=WM_INITDIALOG) return FALSE;

   switch (message) {
      case WM_INITDIALOG: {
         mo = (MorphObject*)lParam;
         DLSetWindowLongPtr(hWnd, lParam);
         mo->hParams2 = hWnd;
         mo->SetupTargetList();        
         break;
         }

      case WM_COMMAND:
         switch(LOWORD(wParam)) {
            case IDC_CREATE_MORPHKEY: {
               TSTR name;
               Matrix3 tm = mo->morphCont->GetMorphTargTM(mo->sel);
               SetMorphTargetPacket pckt(
                  mo->morphCont->GetMorphTarg(mo->sel),name,
                  tm,TRUE);
               theHold.Begin();
               mo->morphCont->SetValue(mo->ip->GetTime(),&pckt);
               theHold.Accept(GetString(IDS_RB_CREATEMORPHKEY));
               mo->ip->RedrawViews(mo->ip->GetTime());
               break;
               }

            case IDC_MORPHTARG_LIST:
               if (HIWORD(wParam)==LBN_SELCHANGE) {
                  mo->sel = SendMessage(
                     GetDlgItem(mo->hParams2,IDC_MORPHTARG_LIST),
                     LB_GETCURSEL,0,0);                  
                  if (mo->sel < 0) {
                     EnableWindow(GetDlgItem(hWnd,IDC_CREATE_MORPHKEY),FALSE);
                     EnableWindow(GetDlgItem(hWnd,IDC_DELETE_MORPHTARG),FALSE);
                     ICustEdit *edit = GetICustEdit(GetDlgItem(hWnd,IDC_MORPHTARG_NAME));
                     edit->Disable();
                     edit->SetText(_T(""));
                     ReleaseICustEdit(edit);
                  } else {
                     EnableWindow(GetDlgItem(hWnd,IDC_CREATE_MORPHKEY),TRUE);
                     EnableWindow(GetDlgItem(hWnd,IDC_DELETE_MORPHTARG),TRUE);
                     ICustEdit *edit = GetICustEdit(GetDlgItem(hWnd,IDC_MORPHTARG_NAME));
                     edit->Enable();
                     edit->SetText(mo->SubAnimName(mo->sel));
                     ReleaseICustEdit(edit);
                     }
                  mo->NotifyDependents(FOREVER,(PartID) mo,REFMSG_BRANCHED_HISTORY_CHANGED);
                  }
               break;

            case IDC_DELETE_MORPHTARG:
               if (mo->sel>=0) {
                  theHold.Begin();
                  mo->morphCont->DeleteMorphTarg(mo->sel);
                  theHold.Accept(GetString(IDS_RB_DELETEMORPHTARG));
                  mo->sel = -1;
                  mo->SetupTargetList();
                  mo->ip->RedrawViews(mo->ip->GetTime());
                  //GetSystemSetting(SYSSET_CLEAR_UNDO);
                  }
               break;               
            }
         break;

      case WM_CUSTEDIT_ENTER:
         if (LOWORD(wParam)==IDC_MORPHTARG_NAME && mo->sel >= 0) {
            ICustEdit *edit = GetICustEdit(GetDlgItem(hWnd,IDC_MORPHTARG_NAME));
            TCHAR buf[256];
            edit->GetText(buf,256);
            mo->morphCont->SetMorphTargName(mo->sel,TSTR(buf));
            mo->SetupTargetList();
            mo->NotifyDependents(FOREVER,0,REFMSG_SUBANIM_STRUCTURE_CHANGED);
            ReleaseICustEdit(edit);          
            }
         break;

      case WM_LBUTTONDOWN:
      case WM_LBUTTONUP:
      case WM_MOUSEMOVE:
         mo->ip->RollupMouseMessage(hWnd,message,wParam,lParam);
         return FALSE;
      
      default:
         return FALSE;
      }
   return TRUE;
   }
void RigidBodyUIPane::DestroyUI(HWND hWnd)
{

	ReleaseICustEdit (m_massEdit);
	ReleaseISpinner (m_massSpinner);
}
void MorphByBone::EndEditParams( IObjParam *ip, ULONG flags,Animatable *next)
{
	editMorph = FALSE;
	MorphByBoneDesc.EndEditParams(ip, this, flags, next);

	TimeValue t = ip->GetTime();
	ClearAFlag(A_MOD_BEING_EDITED);
	NotifyDependents(Interval(t,t), PART_ALL, REFMSG_END_EDIT);
	NotifyDependents(Interval(t,t), PART_ALL, REFMSG_MOD_DISPLAY_OFF);

	ip->ClearPickMode();

	ip->DeleteMode(moveMode);	
	if (moveMode) delete moveMode;
	moveMode = NULL;	

	ip->DeleteMode(rotMode);	
	if (rotMode) delete rotMode;
	rotMode = NULL;

	ip->DeleteMode(uscaleMode);
	ip->DeleteMode(nuscaleMode);
	ip->DeleteMode(squashMode);
	ip->DeleteMode(selectMode);

	if (uscaleMode) delete uscaleMode;
	uscaleMode = NULL;
	if (nuscaleMode) delete nuscaleMode;
	nuscaleMode = NULL;
	if (squashMode) delete squashMode;
	squashMode = NULL;
	if (selectMode) delete selectMode;
	selectMode = NULL;


	ReleaseICustButton(iEditButton);
	iEditButton = NULL;

	ReleaseICustButton(iNodeButton);
	iNodeButton = NULL;

	ReleaseICustButton(iPickBoneButton);
	iPickBoneButton = NULL;

	ReleaseICustButton(iMultiSelectButton);
	iMultiSelectButton = NULL;


	ReleaseICustButton(iDeleteMorphButton);
	iDeleteMorphButton = NULL;

	ReleaseICustButton(iResetMorphButton);
	iResetMorphButton = NULL;

	ReleaseICustButton(iClearVertsButton);
	iClearVertsButton = NULL;

	ReleaseICustButton(iRemoveVertsButton);
	iRemoveVertsButton = NULL;

	ReleaseICustButton(iGraphButton);
	iGraphButton = NULL;

	ReleaseICustEdit(iNameField);
	iNameField = NULL;

	ReleaseISpinner(iInfluenceAngleSpinner);
	iInfluenceAngleSpinner = NULL;

	


	this->ip = NULL;

	//Defect 727409 If the user turn off the skin morph modifier, we need to get the 
	//localDataList for using the copy/paste mirror option.   
	if(!TestAFlag(A_MOD_DISABLED))
	{
		for (int i = 0; i < localDataList.Count(); i++)
		{
			if (localDataList[i])
				localDataList[i]->FreeConnectionList();
		}
		localDataList.ZeroCount();
	}
	

}
Пример #11
0
// --[  Method  ]---------------------------------------------------------------
//
//  - Class     : CStravaganzaMaxTools
//
//  - prototype : void ReadConfig(bool bLoadDefaults = false)
//
//  - Purpose   : Initializes the tool parameters, reading the previous
//                configuration from a cfg file or creating default values.
//                If bLoadDefaults is true, the config file won't be read and
//                default values will be assigned.
//
// -----------------------------------------------------------------------------
void CStravaganzaMaxTools::ReadConfig(bool bLoadDefaults)
{
	if(!m_hPanel) return;

	ISpinnerControl* pMaxSpin;
	ICustEdit*       pMaxEdit;
	CInputFile cfgFile;

	m_bPreprocessMesh         = true;
	m_bUseLights              = true;
	m_eAnimType               = ANIMATION_SAMPLING;
	m_nAnimCheckStep          = 20;
	m_nNumPosSamplesPerSec    = 30;
	m_nNumSclSamplesPerSec    = 30;
	m_nNumRotSamplesPerSec    = 30;
	m_nNumCamSettingsPerSec   = 15;
	m_nNumLightSettingsPerSec = 15;

	m_strFile                 = "";
	m_bCopyTextures           = true;
	m_strTexturePath          = "";	

	m_ePreviewType            = CRenderVisitor::MODE_SOLID;
	m_bFullscreen             = false;
	m_bLoop                   = true;
	m_nPreviewResX            = 800;
	m_nPreviewResY            = 600;
	m_fViewportHeight         = 1.0f;
	m_bShowStats              = true;
	m_bRenderToAvi            = false;
	m_strAviFile              = "";
	m_strPreviewCamera        = "";

	if(cfgFile.Open(m_strCfgFile, false) && !bLoadDefaults)
	{
		int nValue;

		// Common options

		cfgFile.ReadInt(&nValue);
		m_bPreprocessMesh = nValue ? true : false;

		cfgFile.ReadInt(&nValue);
		m_bUseLights = nValue ? true : false;

		m_fStartTime = TICKS_TO_SECONDS(m_pMaxInterface->GetAnimRange().Start());
		m_fEndTime   = TICKS_TO_SECONDS(m_pMaxInterface->GetAnimRange().End());

		cfgFile.ReadInt(&m_nAnimCheckStep);
		cfgFile.ReadInt(&m_nNumPosSamplesPerSec);
		cfgFile.ReadInt(&m_nNumSclSamplesPerSec);
		cfgFile.ReadInt(&m_nNumRotSamplesPerSec);
		cfgFile.ReadInt(&m_nNumCamSettingsPerSec);
		cfgFile.ReadInt(&m_nNumLightSettingsPerSec);

		cfgFile.ReadInt(&nValue);

		switch(nValue)
		{
		case ANIMATION_SAMPLING: m_eAnimType = ANIMATION_SAMPLING; break;
		case ANIMATION_MAXKEYS:  m_eAnimType = ANIMATION_MAXKEYS;  break;
		}

		// Export options

		cfgFile.ReadStringZero(&m_strFile);
		cfgFile.ReadInt(&nValue);
		m_bCopyTextures = nValue ? true : false;
		cfgFile.ReadStringZero(&m_strTexturePath);

		// Preview options

		cfgFile.ReadStringZero(&m_strPreviewCamera);
		FillCameraCombobox(GetDlgItem(m_hPanel, IDC_COMBO_CAMERA), m_pMaxInterface->GetRootNode());

		cfgFile.ReadInt(&nValue);
		switch(nValue)
		{
		case CRenderVisitor::MODE_WIREFRAME:  m_ePreviewType = CRenderVisitor::MODE_WIREFRAME;  break;
		case CRenderVisitor::MODE_SOLID:      m_ePreviewType = CRenderVisitor::MODE_SOLID;      break;
		case CRenderVisitor::MODE_FULLDETAIL: m_ePreviewType = CRenderVisitor::MODE_FULLDETAIL; break;
		}

		cfgFile.ReadInt(&nValue);
		m_bFullscreen = nValue ? true : false;

		cfgFile.ReadInt(&nValue);
		m_bLoop = nValue ? true : false;

		cfgFile.ReadInt  (&m_nPreviewResX);
		cfgFile.ReadInt  (&m_nPreviewResY);
		cfgFile.ReadFloat(&m_fViewportHeight);
		cfgFile.ReadInt  (&nValue);
		m_bShowStats = nValue ? true : false;
		cfgFile.ReadInt  (&nValue);
		m_bRenderToAvi = nValue ? true : false;
		cfgFile.ReadStringZero(&m_strAviFile);
	}

	cfgFile.Close();

	// Common

	CheckDlgButton(m_hPanel, IDC_CHECK_PREPROCESSMESHES, m_bPreprocessMesh ? BST_CHECKED : BST_UNCHECKED);
	CheckDlgButton(m_hPanel, IDC_CHECK_USELIGHTS,        m_bUseLights      ? BST_CHECKED : BST_UNCHECKED);

	EnableWindow(GetDlgItem(m_hPanel, IDC_RADIO_USEMAXKEYS), FALSE);

	switch(m_eAnimType)
	{
	case ANIMATION_SAMPLING:

		CheckRadioButton(m_hPanel, IDC_RADIO_USESAMPLING, IDC_RADIO_USEMAXKEYS, IDC_RADIO_USESAMPLING);
		break;

	case ANIMATION_MAXKEYS:

		CheckRadioButton(m_hPanel, IDC_RADIO_USESAMPLING, IDC_RADIO_USEMAXKEYS, IDC_RADIO_USEMAXKEYS);
		break;
	}

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_STARTTIME));
	pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_STARTTIME), EDITTYPE_FLOAT);
	pMaxSpin->SetLimits(m_fStartTime, m_fEndTime, TRUE);
	pMaxSpin->SetScale(0.01f);
	pMaxSpin->SetValue(m_fStartTime, FALSE);
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ENDTIME));
	pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_ENDTIME), EDITTYPE_FLOAT);
	pMaxSpin->SetLimits(m_fStartTime, m_fEndTime, TRUE);
	pMaxSpin->SetScale(0.01f);
	pMaxSpin->SetValue(m_fEndTime, FALSE);
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ANIMCHECKSTEP));
	pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_ANIMCHECKSTEP), EDITTYPE_INT);
	pMaxSpin->SetLimits(0, 100, TRUE);
	pMaxSpin->SetScale(1);
	pMaxSpin->SetValue(m_nAnimCheckStep, FALSE);
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_POSSAMPLINGFREQ));
	pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_POSSAMPLINGFREQ), EDITTYPE_INT);
	pMaxSpin->SetLimits(0, 100, TRUE);
	pMaxSpin->SetScale(1);
	pMaxSpin->SetValue(m_nNumPosSamplesPerSec, FALSE);
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_SCLSAMPLINGFREQ));
	pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_SCLSAMPLINGFREQ), EDITTYPE_INT);
	pMaxSpin->SetLimits(0, 100, TRUE);
	pMaxSpin->SetScale(1);
	pMaxSpin->SetValue(m_nNumSclSamplesPerSec, FALSE);
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ROTSAMPLINGFREQ));
	pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_ROTSAMPLINGFREQ), EDITTYPE_INT);
	pMaxSpin->SetLimits(0, 100, TRUE);
	pMaxSpin->SetScale(1);
	pMaxSpin->SetValue(m_nNumRotSamplesPerSec, FALSE);
	ReleaseISpinner(pMaxSpin);

	// Export

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_DESTINATIONFILE));
	pMaxEdit->SetText((char*)m_strFile.data());
	pMaxEdit->SetLeading(2);
	ReleaseICustEdit(pMaxEdit);

	CheckDlgButton(m_hPanel, IDC_CHECK_COPYTEXTURES, m_bCopyTextures ? BST_CHECKED : BST_UNCHECKED);

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_TEXTUREFOLDER));
	pMaxEdit->SetText((char*)m_strTexturePath.data());
	pMaxEdit->SetLeading(2);
	ReleaseICustEdit(pMaxEdit);

	EnableWindow(GetDlgItem(m_hPanel, IDC_EDIT_TEXTUREFOLDER),   m_bCopyTextures ? TRUE : FALSE);
	EnableWindow(GetDlgItem(m_hPanel, IDC_BUTTON_TEXTUREFOLDER), m_bCopyTextures ? TRUE : FALSE);

	// Preview

	switch(m_ePreviewType)
	{
	case CRenderVisitor::MODE_WIREFRAME:
		
		CheckRadioButton(m_hPanel, IDC_RADIO_WIREFRAME, IDC_RADIO_FULLDETAIL, IDC_RADIO_WIREFRAME);
		break;

	case CRenderVisitor::MODE_SOLID:
		
		CheckRadioButton(m_hPanel, IDC_RADIO_WIREFRAME, IDC_RADIO_FULLDETAIL, IDC_RADIO_SOLID);
		break;

	case CRenderVisitor::MODE_FULLDETAIL:
		
		CheckRadioButton(m_hPanel, IDC_RADIO_WIREFRAME, IDC_RADIO_FULLDETAIL, IDC_RADIO_FULLDETAIL);
		break;
	}

	CheckDlgButton(m_hPanel, IDC_CHECK_FULLSCREEN, m_bFullscreen ? BST_CHECKED : BST_UNCHECKED);
	CheckDlgButton(m_hPanel, IDC_CHECK_LOOP,       m_bLoop       ? BST_CHECKED : BST_UNCHECKED);

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_RESW));
	pMaxEdit->SetText(m_nPreviewResX);
	ReleaseICustEdit(pMaxEdit);

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_RESH));
	pMaxEdit->SetText(m_nPreviewResY);
	ReleaseICustEdit(pMaxEdit);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_VIEWPORTHEIGHT));
	pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_VIEWPORTHEIGHT), EDITTYPE_FLOAT);
	pMaxSpin->SetLimits(0.0f, 1.0f, TRUE);
	pMaxSpin->SetScale(0.01f);
	pMaxSpin->SetValue(m_fViewportHeight, FALSE);
	ReleaseISpinner(pMaxSpin);

	CheckDlgButton(m_hPanel, IDC_CHECK_SHOWSTATS,   m_bShowStats   ? BST_CHECKED : BST_UNCHECKED);
	CheckDlgButton(m_hPanel, IDC_CHECK_RENDERTOAVI, m_bRenderToAvi ? BST_CHECKED : BST_UNCHECKED);

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_AVIFILE));
	pMaxEdit->SetText((char*)m_strAviFile.data());
	pMaxEdit->SetLeading(2);
	ReleaseICustEdit(pMaxEdit);

	EnableWindow(GetDlgItem(m_hPanel, IDC_EDIT_AVIFILE),   m_bRenderToAvi ? TRUE : FALSE);
	EnableWindow(GetDlgItem(m_hPanel, IDC_BUTTON_AVIFILE), m_bRenderToAvi ? TRUE : FALSE);
}
Пример #12
0
// --[  Method  ]---------------------------------------------------------------
//
//  - Class     : CStravaganzaMaxTools
//
//  - prototype : void SaveConfig()
//
//  - Purpose   : Saves the panel parameters to a file.
//
// -----------------------------------------------------------------------------
void CStravaganzaMaxTools::SaveConfig()
{
	if(!m_hPanel) return;

	ISpinnerControl* pMaxSpin;
	ICustEdit*       pMaxEdit;

	int  nSelectedItem;
	char szAuxBuffer[MAX_PATH];
	COutputFile cfgFile;

	// GET SETTINGS FROM PANEL

	// Common

	m_bPreprocessMesh = IsDlgButtonChecked(m_hPanel, IDC_CHECK_PREPROCESSMESHES) == BST_CHECKED ? true : false;
	m_bUseLights      = IsDlgButtonChecked(m_hPanel, IDC_CHECK_USELIGHTS)        == BST_CHECKED ? true : false;

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_STARTTIME));
	m_fStartTime = pMaxSpin->GetFVal();
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ENDTIME));
	m_fEndTime = pMaxSpin->GetFVal();
	ReleaseISpinner(pMaxSpin);

	if(IsDlgButtonChecked(m_hPanel, IDC_RADIO_USESAMPLING) == BST_CHECKED)
	{
		m_eAnimType = ANIMATION_SAMPLING;
	}
	else if(IsDlgButtonChecked(m_hPanel, IDC_RADIO_USEMAXKEYS) == BST_CHECKED)
	{
		m_eAnimType = ANIMATION_MAXKEYS;
	}

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ANIMCHECKSTEP));
	m_nAnimCheckStep = pMaxSpin->GetIVal();
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_POSSAMPLINGFREQ));
	m_nNumPosSamplesPerSec = pMaxSpin->GetIVal();
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_SCLSAMPLINGFREQ));
	m_nNumSclSamplesPerSec = pMaxSpin->GetIVal();
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ROTSAMPLINGFREQ));
	m_nNumRotSamplesPerSec = pMaxSpin->GetIVal();
	ReleaseISpinner(pMaxSpin);

	// Export

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_DESTINATIONFILE));
	pMaxEdit->GetText(szAuxBuffer, MAX_PATH);
	ReleaseICustEdit(pMaxEdit);
	m_strFile = szAuxBuffer;

	m_bCopyTextures = IsDlgButtonChecked(m_hPanel, IDC_CHECK_COPYTEXTURES) == BST_CHECKED ? true : false;

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_TEXTUREFOLDER));
	pMaxEdit->GetText(szAuxBuffer, MAX_PATH);
	ReleaseICustEdit(pMaxEdit);
	m_strTexturePath = szAuxBuffer;

	// Preview

	// Get selected combo box camera

	nSelectedItem = SendMessage(GetDlgItem(m_hPanel, IDC_COMBO_CAMERA), CB_GETCURSEL, 0, 0);

	if(nSelectedItem == CB_ERR) // Items?
	{
		m_strPreviewCamera = "";
	}
	else
	{
		// Get selected item

		memset(szAuxBuffer, 0, MAX_PATH);

		if(SendMessage(GetDlgItem(m_hPanel, IDC_COMBO_CAMERA), CB_GETLBTEXT, (WPARAM)nSelectedItem, (LPARAM)(LPCSTR)szAuxBuffer) == CB_ERR)
		{
			CLogger::ErrorWindow("Error getting camera selection");
		}
		else
		{
			m_strPreviewCamera = szAuxBuffer;
		}
	}

	if(IsDlgButtonChecked(m_hPanel, IDC_RADIO_SOLID) == BST_CHECKED)
	{
		m_ePreviewType = CRenderVisitor::MODE_SOLID;
	}
	else if(IsDlgButtonChecked(m_hPanel, IDC_RADIO_WIREFRAME) == BST_CHECKED)
	{
		m_ePreviewType = CRenderVisitor::MODE_WIREFRAME;
	}
	else if(IsDlgButtonChecked(m_hPanel, IDC_RADIO_FULLDETAIL) == BST_CHECKED)
	{
		m_ePreviewType = CRenderVisitor::MODE_FULLDETAIL;
	}

	m_bFullscreen = IsDlgButtonChecked(m_hPanel, IDC_CHECK_FULLSCREEN) == BST_CHECKED ? true : false;
	m_bLoop       = IsDlgButtonChecked(m_hPanel, IDC_CHECK_LOOP)       == BST_CHECKED ? true : false;

	int  nAux;
	BOOL valid;

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_RESW));
	nAux = pMaxEdit->GetInt(&valid);
	if(valid) m_nPreviewResX = nAux; else pMaxEdit->SetText(m_nPreviewResX);
	ReleaseICustEdit(pMaxEdit);

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_RESH));
	nAux = pMaxEdit->GetInt(&valid);
	if(valid) m_nPreviewResY = nAux; else pMaxEdit->SetText(m_nPreviewResY);
	ReleaseICustEdit(pMaxEdit);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_VIEWPORTHEIGHT));
	m_fViewportHeight = pMaxSpin->GetFVal();
	ReleaseISpinner(pMaxSpin);

	m_bShowStats   = IsDlgButtonChecked(m_hPanel, IDC_CHECK_SHOWSTATS)   == BST_CHECKED ? true : false;
	m_bRenderToAvi = IsDlgButtonChecked(m_hPanel, IDC_CHECK_RENDERTOAVI) == BST_CHECKED ? true : false;

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_AVIFILE));
	pMaxEdit->GetText(szAuxBuffer, MAX_PATH);
	ReleaseICustEdit(pMaxEdit);
	m_strAviFile = szAuxBuffer;

	// SAVE SETTINGS

	if(cfgFile.Open(m_strCfgFile, false, false) == false)
	{
		return;
	}

	cfgFile.WriteInt(m_bPreprocessMesh ? 1 : 0);
	cfgFile.WriteInt(m_bUseLights      ? 1 : 0);

	cfgFile.WriteInt(m_nAnimCheckStep);
	cfgFile.WriteInt(m_nNumPosSamplesPerSec);
	cfgFile.WriteInt(m_nNumSclSamplesPerSec);
	cfgFile.WriteInt(m_nNumRotSamplesPerSec);
	cfgFile.WriteInt(m_nNumCamSettingsPerSec);
	cfgFile.WriteInt(m_nNumLightSettingsPerSec);

	cfgFile.WriteInt(m_eAnimType);

	// Export options

	cfgFile.WriteStringZero(m_strFile);
	cfgFile.WriteInt(m_bCopyTextures ? 1 : 0);
	cfgFile.WriteStringZero(m_strTexturePath);

	// Preview options

	cfgFile.WriteStringZero(m_strPreviewCamera);
	cfgFile.WriteInt(m_ePreviewType);
	cfgFile.WriteInt(m_bFullscreen ? 1 : 0);
	cfgFile.WriteInt(m_bLoop       ? 1 : 0);
	cfgFile.WriteInt(m_nPreviewResX);
	cfgFile.WriteInt(m_nPreviewResY);
	cfgFile.WriteFloat(m_fViewportHeight);
	cfgFile.WriteInt(m_bShowStats   ? 1 : 0);
	cfgFile.WriteInt(m_bRenderToAvi ? 1 : 0);
	cfgFile.WriteStringZero(m_strAviFile);

	cfgFile.Close();
}