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

📄 entityview.cpp

📁 快速原型制造分层切片源代码,适用于高温合金.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	    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 + -