📄 entityview.cpp
字号:
int totalFaces = pSTLSolid->m_faces.GetSize();
for (int i=0; i < totalFaces; i++)
{
normal_array[0]=pSTLSolid->m_faces[i].m_vector.m_dX;
normal_array[1]=pSTLSolid->m_faces[i].m_vector.m_dY;
normal_array[2]=pSTLSolid->m_faces[i].m_vector.m_dZ;
glColor3fv(color_array);
for(int j=0; j < 3; j++)
{
glNormal3dv(normal_array);
vertex_index = pSTLSolid->m_faces[i].m_points[j];
vertex_array[0]=pSTLSolid->m_points[vertex_index].m_dX;
vertex_array[1]=pSTLSolid->m_points[vertex_index].m_dY;
vertex_array[2]=pSTLSolid->m_points[vertex_index].m_dZ;
glVertex3dv(vertex_array);
}
}
glEnd();
}
glFlush ();
SwapBuffers(wglGetCurrentDC());
// make the rendering context not current
wglMakeCurrent(NULL, NULL);
// delete the rendering context
if (m_hglrc)
{
wglDeleteContext(m_hglrc);
m_hglrc = NULL;
}
}
BOOL CEntityView::PreCreateWindow(CREATESTRUCT& cs)
{
return CBaseView::PreCreateWindow(cs);
}
void CEntityView::OnRotation()
{
CStlDoc* pDoc=GetDocument( );
ASSERT(pDoc);
m_bRandomRotation = TRUE;
pDoc->m_pathData.m_IPInfo.ResetFlagBit(4);
while(m_bRandomRotation)
{
m_randomRotationAngle += PI/10.0;
post_gl_shade( );
MsgProcFunc();
if(QueryStopMsg())
break;
}
}
void CEntityView::OnColor()
{
m_colorRed += 0.05;
m_colorGreen += 0.1;
m_colorBlue += 0.05;
if(m_colorRed > 1.0)
m_colorRed = 0.0;
if(m_colorGreen > 1.0)
m_colorGreen = 0.1;
if(m_colorBlue > 1.0)
m_colorBlue = 0.0;
m_bRandomRotation = TRUE;
post_gl_shade( );
}
void CEntityView::OnRotationX()
{
CStlDoc* pDoc = GetDocument();
ASSERT(pDoc);
double yVal, zVal, normValY, normValZ;
double rotateAngle = m_rotationAngle * PI /180.0;
CSTLSolid* pSTLSolid = &(pDoc->m_pathData.m_Solid);
if(pSTLSolid->m_bInitialized)
{
//旋转平面法矢
for (int i=0; i < pSTLSolid->m_faces.GetSize(); i++)
{
normValY = pSTLSolid->m_faces[i].m_vector.m_dY * cos(rotateAngle)
- pSTLSolid->m_faces[i].m_vector.m_dZ * sin(rotateAngle);
normValZ = pSTLSolid->m_faces[i].m_vector.m_dY * sin(rotateAngle)
+ pSTLSolid->m_faces[i].m_vector.m_dZ * cos(rotateAngle);
pSTLSolid->m_faces[i].m_vector.m_dY = normValY;
pSTLSolid->m_faces[i].m_vector.m_dZ = normValZ;
}
//旋转顶点
for( i=0; i < pSTLSolid->m_points.GetSize(); i++)
{
yVal = pSTLSolid->m_points[i].m_dY * cos(rotateAngle)
- pSTLSolid->m_points[i].m_dZ * sin(rotateAngle);
zVal = pSTLSolid->m_points[i].m_dY * sin(rotateAngle)
+ pSTLSolid->m_points[i].m_dZ * cos(rotateAngle);
pSTLSolid->m_points[i].m_dY = yVal;
pSTLSolid->m_points[i].m_dZ = zVal;
pSTLSolid->Find_Min_Max_Value(pSTLSolid->m_points[i], i);
}
pDoc->ShowEntityInfo();
pDoc->SetModifiedFlag();
m_bRandomRotation = FALSE;
post_gl_shade( );
}
}
void CEntityView::OnRotationY()
{
CStlDoc* pDoc = GetDocument();
ASSERT(pDoc);
double xVal, zVal, normValX, normValZ;
double rotateAngle = m_rotationAngle * PI /180.0;
CSTLSolid* pSTLSolid = &(pDoc->m_pathData.m_Solid);
if(pSTLSolid->m_bInitialized)
{
//旋转平面法矢
for (int i=0; i < pSTLSolid->m_faces.GetSize(); i++)
{
normValX = pSTLSolid->m_faces[i].m_vector.m_dX * cos(rotateAngle)
+ pSTLSolid->m_faces[i].m_vector.m_dZ * sin(rotateAngle);
normValZ = -pSTLSolid->m_faces[i].m_vector.m_dX * sin(rotateAngle)
+ pSTLSolid->m_faces[i].m_vector.m_dZ * cos(rotateAngle);
pSTLSolid->m_faces[i].m_vector.m_dX = normValX;
pSTLSolid->m_faces[i].m_vector.m_dZ = normValZ;
}
//旋转顶点
for( i=0; i < pSTLSolid->m_points.GetSize(); i++)
{
xVal = pSTLSolid->m_points[i].m_dX * cos(rotateAngle)
+ pSTLSolid->m_points[i].m_dZ * sin(rotateAngle);
zVal = -pSTLSolid->m_points[i].m_dX * sin(rotateAngle)
+ pSTLSolid->m_points[i].m_dZ * cos(rotateAngle);
pSTLSolid->m_points[i].m_dX = xVal;
pSTLSolid->m_points[i].m_dZ = zVal;
pSTLSolid->Find_Min_Max_Value(pSTLSolid->m_points[i], i);
}
pDoc->ShowEntityInfo();
pDoc->SetModifiedFlag();
m_bRandomRotation = FALSE;
post_gl_shade( );
}
}
void CEntityView::OnRotationZ()
{
CStlDoc* pDoc = GetDocument();
ASSERT(pDoc);
double xVal, yVal, normValX, normValY;
double rotateAngle = m_rotationAngle * PI /180.0;
CSTLSolid* pSTLSolid = &(pDoc->m_pathData.m_Solid);
if(pSTLSolid->m_bInitialized)
{
//旋转平面法矢
for (int i=0; i < pSTLSolid->m_faces.GetSize(); i++)
{
normValX = pSTLSolid->m_faces[i].m_vector.m_dX * cos(rotateAngle)
- pSTLSolid->m_faces[i].m_vector.m_dY * sin(rotateAngle);
normValY = pSTLSolid->m_faces[i].m_vector.m_dX * sin(rotateAngle)
+ pSTLSolid->m_faces[i].m_vector.m_dY * cos(rotateAngle);
pSTLSolid->m_faces[i].m_vector.m_dX = normValX;
pSTLSolid->m_faces[i].m_vector.m_dY = normValY;
}
//旋转顶点
for( i=0; i < pSTLSolid->m_points.GetSize(); i++)
{
xVal = pSTLSolid->m_points[i].m_dX * cos(rotateAngle)
- pSTLSolid->m_points[i].m_dY * sin(rotateAngle);
yVal = pSTLSolid->m_points[i].m_dX * sin(rotateAngle)
+ pSTLSolid->m_points[i].m_dY * cos(rotateAngle);
pSTLSolid->m_points[i].m_dX = xVal;
pSTLSolid->m_points[i].m_dY = yVal;
pSTLSolid->Find_Min_Max_Value(pSTLSolid->m_points[i], i);
}
pDoc->ShowEntityInfo();
pDoc->SetModifiedFlag();
m_bRandomRotation = FALSE;
post_gl_shade( );
}
}
void CEntityView::OnZoom()
{
CStlDoc* pDoc = GetDocument();
ASSERT(pDoc);
double xVal, yVal, zVal;
CSTLSolid* pSTLSolid = &(pDoc->m_pathData.m_Solid);
if(pSTLSolid->m_bInitialized)
{
//缩放
for(int i=0; i < pSTLSolid->m_points.GetSize(); i++)
{
xVal = pSTLSolid->m_points[i].m_dX * m_zoomRatio;
yVal = pSTLSolid->m_points[i].m_dY * m_zoomRatio;
zVal = pSTLSolid->m_points[i].m_dZ * m_zoomRatio;
pSTLSolid->m_points[i].m_dX = xVal;
pSTLSolid->m_points[i].m_dY = yVal;
pSTLSolid->m_points[i].m_dZ = zVal;
pSTLSolid->Find_Min_Max_Value(pSTLSolid->m_points[i], i);
}
pDoc->ShowEntityInfo();
m_bRandomRotation = FALSE;
post_gl_shade( );
}
}
void CEntityView::OnProperties()
{
CTransPropertySheet propSheet;
propSheet.m_Page1.m_rotationAngle = m_rotationAngle;
propSheet.m_Page1.m_zoomRatio = m_zoomRatio;
if(propSheet.DoModal())
{
m_rotationAngle = propSheet.m_Page1.m_rotationAngle;
m_zoomRatio = propSheet.m_Page1.m_zoomRatio;
}
}
void CEntityView::OnTransform()
{
OnProperties();
}
void CEntityView::RandomRotation()
{
CStlDoc* pDoc=GetDocument( );
ASSERT(pDoc);
m_bRandomRotation = TRUE;
m_randomRotationAngle += PI/10.0;
post_gl_shade( );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -