📄 faceattributesdialog.cpp
字号:
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 + -