⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 faceattributesdialog.cpp

📁 3D游戏场景编辑器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
void CFaceAttributesDialog::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	if ((nSBCode != SB_LINEUP) && (nSBCode != SB_LINEDOWN))
	{
		return;
	}

	UpdateData(TRUE);
	switch (pScrollBar->GetDlgCtrlID ())
	{
			//	First we deal with all of the Unit scrolling bars...
			//	X Offset...
		case IDC_SBXOFFSET_UNIT:
			m_TextureXOffset = (int)DoIncrement ((float)m_TextureXOffset, UNIT_OFFSET_INCR, MIN_TEX_OFF, MAX_TEX_OFF, nSBCode);
			UpdateData (FALSE);
			OnKillfocusXOffset ();
			break;
			//	Y Offset...
		case IDC_SBYOFFSET_UNIT:
			m_TextureYOffset = (int)DoIncrement ((float)m_TextureYOffset, UNIT_OFFSET_INCR, MIN_TEX_OFF, MAX_TEX_OFF, nSBCode);
			UpdateData (FALSE);
			OnKillfocusYOffset ();
			break;
			//	X Scale...
		case IDC_SBXSCALE_UNIT:
			m_TextureXScale = DoIncrement (m_TextureXScale, UNIT_SCALE_INCR, MIN_TEX_SCL, MAX_TEX_SCL, nSBCode);
			UpdateData (FALSE);
			OnKillfocusXScale ();
			break;
			//	Y Scale...
		case IDC_SBYSCALE_UNIT:
			m_TextureYScale = DoIncrement (m_TextureYScale, UNIT_SCALE_INCR, MIN_TEX_SCL, MAX_TEX_SCL, nSBCode);
			UpdateData (FALSE);
			OnKillfocusYScale ();
			break;
			//	X Scale...
		case IDC_SBXLIGHTSCALE_UNIT:
			m_LightXScale = DoIncrement (m_LightXScale, UNIT_SCALE_INCR, MIN_TEX_SCL, MAX_TEX_SCL, nSBCode);
			UpdateData (FALSE);
			OnKillfocusEditxlightscale ();
			break;
			//	Y Scale...
		case IDC_SBYLIGHTSCALE_UNIT:
			m_LightYScale = DoIncrement (m_LightYScale, UNIT_SCALE_INCR, MIN_TEX_SCL, MAX_TEX_SCL, nSBCode);
			UpdateData (FALSE);
			OnKillfocusEditylightscale ();
			break;
			//	Angle...
		case IDC_SBANGLE_UNIT:
			m_TextureAngle = DoIncrement (m_TextureAngle, UNIT_ANGLE_INCR, MIN_TEX_ANG, MAX_TEX_ANG, nSBCode);
			UpdateData (FALSE);
			OnKillfocusAngle ();
			break;

			//	Now deal with all of the increment scrollers...
			//	X Offset...
		case IDC_SBXOFFSET_INCR:
			m_TextureXOffset = (int)DoIncrement ((float)m_TextureXOffset, GetIncrement (m_ComboXOffset), MIN_TEX_OFF, MAX_TEX_OFF, nSBCode);
			UpdateData (FALSE);
			OnKillfocusXOffset ();
			break;
			//	Y Offset...
		case IDC_SBYOFFSET_INCR:
			m_TextureYOffset = (int)DoIncrement ((float)m_TextureYOffset, GetIncrement (m_ComboYOffset), MIN_TEX_OFF, MAX_TEX_OFF, nSBCode);
			UpdateData (FALSE);
			OnKillfocusYOffset ();
			break;
			//	X Scale...
		case IDC_SBXSCALE_INCR:
			m_TextureXScale = DoIncrement (m_TextureXScale, GetIncrement (m_ComboXScale), MIN_TEX_SCL, MAX_TEX_SCL, nSBCode);
			UpdateData (FALSE);
			OnKillfocusXScale ();
			break;
			//	Y Scale...
		case IDC_SBYSCALE_INCR:
			m_TextureYScale = DoIncrement (m_TextureYScale, GetIncrement (m_ComboYScale), MIN_TEX_SCL, MAX_TEX_SCL, nSBCode);
			UpdateData (FALSE);
			OnKillfocusYScale ();
			break;
		case IDC_SBXLIGHTSCALE_INCR:
			m_LightXScale = DoIncrement (m_LightXScale, GetIncrement (m_ComboXLightScale), MIN_TEX_SCL, MAX_TEX_SCL, nSBCode);
			UpdateData (FALSE);
			OnKillfocusEditxlightscale ();
			break;
			//	Y Scale...
		case IDC_SBYLIGHTSCALE_INCR:
			m_LightYScale = DoIncrement (m_LightYScale, GetIncrement (m_ComboYLightScale), MIN_TEX_SCL, MAX_TEX_SCL, nSBCode);
			UpdateData (FALSE);
			OnKillfocusEditylightscale ();
			break;
			//	Angle...
		case IDC_SBANGLE_INCR:
			m_TextureAngle = DoIncrement (m_TextureAngle, GetIncrement (m_ComboAngle), MIN_TEX_ANG, MAX_TEX_ANG, nSBCode);
			UpdateData (FALSE);
			OnKillfocusAngle ();
			break;
		
		default :
			assert (0);
			return;

	}
	UpdateData(FALSE);
}

#pragma warning (default:4100)

//	And this is here to update the views as changes are made.
void CFaceAttributesDialog::AssignCurrentToViews()
{
	if (m_pDoc == NULL)
		m_pDoc = CGlobals::GetActiveDocument();

	// update child faces on all selected brushes
	int NumSelBrushes;

	NumSelBrushes = SelBrushList_GetSize (m_pDoc->pSelBrushes);
	for (int i = 0; i < NumSelBrushes; ++i)
	{
		Brush *pBrush = SelBrushList_GetBrush (m_pDoc->pSelBrushes, i);
		Brush_UpdateChildFaces (pBrush);
	}

	//	new g3dc
	//	NOTE Must Deselect all brushes when going from face adjustment mode
	//	to brush adjustment mode, or these changes won't show up.
	//	See CGenEditDoc::OnToolsBrushAdjustmentmode() 

	//	Be very careful when speccing flags for UpdateAllViews()
	//	The wrong flags at the wrong time will totally screw things up
//	m_pDoc->UpdateAllViews(UAV_RENDER_ONLY, NULL);  // oringinal gedit
	m_pDoc->UpdateAllViews(UAV_ALL3DVIEWS, NULL);	//	best current one
	


//	m_pDoc->UpdateAllViews(UAV_ALL3DVIEWS | REBUILD_QUICK, NULL);  // experiment g3dc


//	m_pDoc->mpMainFrame->UpdateMainControls();

}

/*
Problem updating textured view
See the following functions
CGenEditDoc::UpdateFaceAttributes, RebuildTrees, UpdateAllViews, OnGbspnowater() 



*/



/*
void ::OnCancel()
{
	if (m_pDoc == NULL)
	m_pDoc = CGlobals::GetActiveDocument();

	m_pDoc->NullFaceAttributes ();
	DestroyWindow();
}
*/

void CFaceAttributesDialog::OnCancel()
{
	return;
}

void CFaceAttributesDialog::PostNcDestroy() 
{
//	delete this;
//	DestroyWindow();
}

// The document calls this function whenever a face is selected or deselected.
void CFaceAttributesDialog::UpdatePolygonFocus (Face *pFace)
{
	if (!m_pDoc)
	{
		AfxMessageBox("No Document for UpdatePolygonFocus in FaceAttribs");
		m_pDoc = CGlobals::GetActiveDocument();
	}


//	Face *pFace = NULL;
	if (pFace == NULL)
		pFace = SelFaceList_GetFace (m_pDoc->pSelFaces, 0);
	
	if (!pFace)
		AfxMessageBox("No pFace in FaceAttribs");
	
	else if (pFace)
	{
		m_TextureAngle	= Face_GetTextureRotate (pFace);
		Face_GetTextureShift (pFace, &m_TextureXOffset, &m_TextureYOffset);
		Face_GetTextureScale (pFace, &m_TextureXScale, &m_TextureYScale);
		Face_GetLightScale (pFace, &m_LightXScale, &m_LightYScale);
		m_LightIntensity = Face_GetLightIntensity (pFace);
		m_MipMapBias = Face_GetMipMapBias (pFace);
		m_Translucency = Face_GetTranslucency (pFace);
		m_Reflectivity = Face_GetReflectivity (pFace);

		m_Light			=Face_IsLight (pFace);
		m_FullBright	=Face_IsFullBright (pFace);
		m_Gouraud		=Face_IsGouraud (pFace);
		m_Flat			=Face_IsFlat (pFace);
		m_TextureLock	=Face_IsTextureLocked (pFace);
		m_Transparent	=Face_IsTransparent (pFace);
		m_Sky			=Face_IsSky (pFace);
		m_Mirror		=Face_IsMirror (pFace);
		GetDlgItem( IDC_FACELIGHTINTENSITY )->EnableWindow( m_Light ) ;
	}

	UpdateData(FALSE);
}
/*
static BOOL CheckIntValue (CEdit &Edit)
{
	CString Text;

	Edit.GetWindowText (Text);
	return (Text != "");
}
*/

/*
static BOOL CheckFloatValue (CEdit &Edit)
{
	CString Text;

	Edit.GetWindowText (Text);
	if (Text != "")
	{
		int pos, len;
		len = Text.GetLength ();
		pos = Text.Find ('.') + 1;
	
		if (pos != len)
		{
			return TRUE;
		}
	}
	return FALSE;
}
*/

/*
#pragma warning (disable:4100)
void CFaceAttributesDialog::OnMouseMove(UINT nFlags, CPoint point) 
{
	CPoint CursorPos;

	//	CHANGE!	04/16/97	John Moore
	//	Is the mouse cursor within this dialog?  If so, activate it...
	CRect WindowRect;

	GetCursorPos( &CursorPos );
	GetWindowRect( &WindowRect );
	//ClientToScreen( &WindowRect );

	if( WindowRect.PtInRect( CursorPos ) )
	{
		if( GetActiveWindow() != (CWnd*) this )
		{
			BringWindowToTop();
			SetFocus();
		}
	}
	//	End of CHANGE
	
	//CDialog::OnMouseMove(nFlags, point);
}
#pragma warning (default:4100)
*/


static BOOL OnIntEditChange (CEdit &Edit, int *val, int DefaultVal)
{
	CString Text;

	Edit.GetWindowText (Text);
	if (Text == "")
	{
		*val = DefaultVal;
		return FALSE;
	}
	return TRUE;
}

static void OnIntKillFocus (CEdit &Edit, int *val, int DefaultVal, const char *Defstr)
{
	if (!OnIntEditChange (Edit, val, DefaultVal))
	{
		Edit.SetWindowText (Defstr);
	}
}

static BOOL OnFloatEditChange (CEdit &Edit, float *val, float DefaultVal)
{
	CString Text;

	Edit.GetWindowText (Text);
	if (Text == "")
	{
		*val = DefaultVal;
		return FALSE;
	}
	return TRUE;
}

static void OnFloatKillFocus (CEdit &Edit, float *val, float DefaultVal, const char *Defstr)
{
	if (!OnFloatEditChange (Edit, val, DefaultVal))
	{
		Edit.SetWindowText (Defstr);
	}
}

void CFaceAttributesDialog::OnChangeXOffset() 
{	
	OnIntEditChange (m_EditXOffset, &m_TextureXOffset, 0);
}

void CFaceAttributesDialog::OnChangeYOffset() 
{
	OnIntEditChange (m_EditYOffset, &m_TextureYOffset, 0);
}

void CFaceAttributesDialog::OnChangeXScale() 
{
	OnFloatEditChange (m_EditXScale, &m_TextureXScale, 1.0f);
}

void CFaceAttributesDialog::OnChangeYScale() 
{
	OnFloatEditChange (m_EditYScale, &m_TextureYScale, 1.0f);
}

void CFaceAttributesDialog::OnChangeEditxlightscale() 
{
	OnFloatEditChange (m_EditLightXScale, &m_LightXScale, 1.0f);
}

void CFaceAttributesDialog::OnChangeEditylightscale() 
{
	OnFloatEditChange (m_EditLightYScale, &m_LightYScale, 1.0f);
}

void CFaceAttributesDialog::OnChangeAngle() 
{
	OnFloatEditChange (m_EditAngle, &m_TextureAngle, 0.0f);
}

static geBoolean ChangeXOffset (Face *pFace, void *lParam)
{
	int *pXOffset = (int *)(lParam);
	int xOff, yOff;
	
	Face_GetTextureShift (pFace, &xOff, &yOff);
	Face_SetTextureShift (pFace, *pXOffset, yOff);
	return GE_TRUE;	
}
	
void CFaceAttributesDialog::OnKillfocusXOffset() 
{
	if (m_pDoc == NULL)
		m_pDoc = CGlobals::GetActiveDocument();

	int	lastValue = m_TextureXOffset;
	if (GetDlgItemInt(IDC_EDITXOFFSET) == NULL)
	{
		this->SetDlgItemInt(IDC_EDITXOFFSET, lastValue);
		return;
	}
	
	UpdateData (TRUE);
	OnIntKillFocus (m_EditXOffset, &m_TextureXOffset, 0, "0");
	SelFaceList_Enum (m_pDoc->pSelFaces, ChangeXOffset, &m_TextureXOffset);
	AssignCurrentToViews ();
}

static geBoolean ChangeYOffset (Face *pFace, void *lParam)
{
	int *pYOffset = (int *)(lParam);
	int xOff, yOff;

	Face_GetTextureShift (pFace, &xOff, &yOff);
	Face_SetTextureShift (pFace, xOff, *pYOffset);
	return GE_TRUE;	
}

void CFaceAttributesDialog::OnKillfocusYOffset() 
{	
	if (m_pDoc == NULL)
		m_pDoc = CGlobals::GetActiveDocument();

	int	lastValue = m_TextureYOffset;
	if (GetDlgItemInt(IDC_EDITYOFFSET) == NULL)
	{
		this->SetDlgItemInt(IDC_EDITYOFFSET, lastValue);
		return;
	}

	UpdateData (TRUE);
	OnIntKillFocus (m_EditYOffset, &m_TextureYOffset, 0, "0");
	SelFaceList_Enum (m_pDoc->pSelFaces, ChangeYOffset, &m_TextureYOffset);
	AssignCurrentToViews ();
}

static geBoolean ChangeTextureXScale (Face *pFace, void *lParam)
{
	float *pXScale = (float *)lParam;
	float xScale, yScale;

	Face_GetTextureScale (pFace, &xScale, &yScale);
	Face_SetTextureScale (pFace, *pXScale, yScale);
	return GE_TRUE;
}

void CFaceAttributesDialog::OnKillfocusXScale() 
{
	CString testString;							//	post 0.5 release
	if (m_pDoc == NULL)
		m_pDoc = CGlobals::GetActiveDocument();

//	int	lastValue = m_TextureXScale;			//	post 0.5 release
//	if (GetDlgItemInt(IDC_EDITXSCALE) == NULL)	//	post 0.5 release
	float lastValue = m_TextureXScale;			// post 0.5 release
	if (GetDlgItemText(IDC_EDITXSCALE, testString) == NULL)// post 0.5 release
	{
		this->SetDlgItemInt(IDC_EDITXSCALE, (int)lastValue);	//	post 0.5 release
		return;
	}

	UpdateData (TRUE);
	OnFloatKillFocus (m_EditXScale, &m_TextureXScale, 1.0f, "1.0");
	SelFaceList_Enum (m_pDoc->pSelFaces, ChangeTextureXScale, &m_TextureXScale);
	AssignCurrentToViews ();
}

static geBoolean ChangeTextureYScale (Face *pFace, void *lParam)
{
	float *pYScale = (float *)lParam;
	float xScale, yScale;

	Face_GetTextureScale (pFace, &xScale, &yScale);
	Face_SetTextureScale (pFace, xScale, *pYScale);
	return GE_TRUE;
}

void CFaceAttributesDialog::OnKillfocusYScale() 
{
	CString testString;							//	post 0.5 release
	if (m_pDoc == NULL)
		m_pDoc = CGlobals::GetActiveDocument();

//	int	lastValue = m_TextureYScale;			//	post 0.5 release
//	if (GetDlgItemInt(IDC_EDITYSCALE) == NULL)	//	post 0.5 release
	float	lastValue = m_TextureYScale;		//	post 0.5 release
	if (GetDlgItemText(IDC_EDITYSCALE, testString) == NULL)	//	post 0.5 release
	{
		this->SetDlgItemInt(IDC_EDITYSCALE, (int)lastValue);	//	post 0.5 release
		return;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -