meshmakerview.cpp
来自「finite element mesh 参数化有限元网格划分」· C++ 代码 · 共 744 行 · 第 1/2 页
CPP
744 行
pCmdUI->SetCheck(mode == WIREFRAME);
pCmdUI->Enable();
}
void CMeshMakerView::OnUpdateRenderingHighlightsonly(CCmdUI* pCmdUI)
{
RENDER_MODE mode;
renderer->getRenderMode(mode);
pCmdUI->SetCheck(mode == HIGHLIGHT_ONLY);
pCmdUI->Enable();
}
void CMeshMakerView::OnRenderingShowlines()
{
bool showLines;
renderer->getLineDrawing(showLines);
renderer->setLineDrawing(!showLines);
}
void CMeshMakerView::OnUpdateRenderingShowlines(CCmdUI* pCmdUI)
{
bool showLines;
renderer->getLineDrawing(showLines);
pCmdUI->SetCheck(showLines);
pCmdUI->Enable();
}
void CMeshMakerView::OnRenderingShowcylinders()
{
bool showCylinders;
renderer->getCylinderDrawing(showCylinders);
renderer->setCylinderDrawing(!showCylinders);
}
void CMeshMakerView::OnUpdateRenderingShowcylinders(CCmdUI* pCmdUI)
{
bool showCylinders;
renderer->getCylinderDrawing(showCylinders);
pCmdUI->SetCheck(showCylinders);
pCmdUI->Enable();
}
void CMeshMakerView::OnRenderingShowspheres()
{
bool showSpheres;
renderer->getSphereDrawing(showSpheres);
renderer->setSphereDrawing(!showSpheres);
}
void CMeshMakerView::OnUpdateRenderingShowspheres(CCmdUI* pCmdUI)
{
bool showSpheres;
renderer->getSphereDrawing(showSpheres);
pCmdUI->SetCheck(showSpheres);
pCmdUI->Enable();
}
void CMeshMakerView::OnRenderingShowplates()
{
bool showPlates;
renderer->getPlateDrawing(showPlates);
renderer->setPlateDrawing(!showPlates);
}
void CMeshMakerView::OnUpdateRenderingShowplates(CCmdUI* pCmdUI)
{
bool showPlates;
renderer->getPlateDrawing(showPlates);
pCmdUI->SetCheck(showPlates);
pCmdUI->Enable();
}
///////////////////////////////////////////////////////////////
// Perspective / Orthographic view
void CMeshMakerView::OnModelviewOrthographic()
{
renderer->setPerspective( false);
}
void CMeshMakerView::OnModelviewPerspective()
{
renderer->setPerspective(true);
}
void CMeshMakerView::OnUpdateModelviewOrthographic(CCmdUI* pCmdUI)
{
bool perspective;
renderer->getPerspective(perspective);
pCmdUI->SetCheck(!perspective);
pCmdUI->Enable();
}
void CMeshMakerView::OnUpdateModelviewPerspective(CCmdUI* pCmdUI)
{
bool perspective;
renderer->getPerspective(perspective);
pCmdUI->SetCheck(perspective);
pCmdUI->Enable();
}
///////////////////////////////////////////////////////////////
// Backface culling
void CMeshMakerView::OnModelviewBackface()
{
bool backFaceRemoval;
renderer->getBackfaceCulling(backFaceRemoval);
renderer->setBackfaceCulling(!backFaceRemoval);
}
void CMeshMakerView::OnUpdateModelviewBackface(CCmdUI* pCmdUI)
{
bool backFaceRemoval;
renderer->getBackfaceCulling(backFaceRemoval);
pCmdUI->SetCheck(backFaceRemoval);
pCmdUI->Enable();
}
///////////////////////////////////////////////////////////////
// Mouse interaction / transformations
void CMeshMakerView::OnLButtonDown(UINT nFlags, CPoint point)
{
if (!renderer->interactionEnabled) return;
SetCapture();
x = point.x;
y = point.y;
transformMode = (nFlags & MK_RBUTTON) ? TRANSLATE : ROTATE;
SetCursor(AfxGetApp()->LoadStandardCursor((transformMode == TRANSLATE) ? IDC_SIZEALL : IDC_ARROW));
if (renderer->inPickingMode) {
GLuint selectBuf[512];
GLint hits, viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
float matrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX, matrix);
glGetFloatv(GL_PROJECTION_MATRIX, matrix);
glSelectBuffer(512, selectBuf);
glRenderMode(GL_SELECT);
glInitNames();
glPushName((GLuint)-1);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPickMatrix((GLdouble)x, (GLdouble)(viewport[3]-y), 9.0, 9.0, viewport);
renderer->setProjection();
renderer->render(true); // wireframe/render, selection mode
glFlush();
hits = glRenderMode(GL_RENDER);
renderer->processSelection(hits, selectBuf);
}
}
void CMeshMakerView::OnLButtonUp(UINT /*nFlags*/, CPoint /*point*/)
{
ReleaseCapture();
}
void CMeshMakerView::OnRButtonDown(UINT nFlags, CPoint point)
{
SetCapture();
x = point.x;
y = point.y;
transformMode = (nFlags & MK_LBUTTON) ? TRANSLATE : SCALE;
SetCursor(AfxGetApp()->LoadStandardCursor((transformMode == TRANSLATE) ?
IDC_SIZEALL : IDC_SIZENS));
}
void CMeshMakerView::OnRButtonUp(UINT /*nFlags*/, CPoint /*point*/)
{
ReleaseCapture();
}
void CMeshMakerView::OnMouseMove(UINT /*nFlags*/, CPoint point)
{
if(GetCapture() != this)
return;
float angle;
int dx, dy;
switch(transformMode) {
case ROTATE:
dx = (int)point.x - x;
dy = (int)point.y - y;
angle = (float)sqrt((float)(dx * dx + dy * dy));
renderer->screen_rotate(angle, dy, dx, 0);
//renderer->screen_rotate((int)point.x - x, (int)point.y - y);
break;
case TRANSLATE:
renderer->screen_translate((int)point.x - x, (int)point.y - y);
break;
case SCALE:
renderer->screen_scale((int)point.y - y);
break;
}
x = point.x;
y = point.y;
}
LRESULT CMeshMakerView::OnRotate(WPARAM wParam, LPARAM /*lParam*/) {
rotate_params *params = (rotate_params*)wParam;
renderer->screen_rotate(params->angle, params->dx, params->dy, params->dz);
delete params;
return 1;
}
LRESULT CMeshMakerView::OnTranslate(WPARAM wParam, LPARAM /*lParam*/) {
translate_params *params = (translate_params*)wParam;
renderer->screen_translate(params->dx, params->dy, params->dz);
delete params;
return 1;
}
LRESULT CMeshMakerView::OnScale(WPARAM wParam, LPARAM /*lParam*/) {
renderer->screen_scale((int)wParam);
return 1;
}
///////////////////////////////////////////////////////////////
// Colors
void CMeshMakerView::OnColorsBackground()
{
CColorDialog colorDlg;
if (colorDlg.DoModal()==IDOK)
renderer->setBgColor(colorDlg.GetColor());
}
void CMeshMakerView::OnColorsVerticesdefaultcolor()
{
CColorDialog colorDlg;
if (colorDlg.DoModal()==IDOK)
renderer->setVerticesDefaultColor(colorDlg.GetColor());
}
void CMeshMakerView::OnColorsEdgesdefaultcolor()
{
CColorDialog colorDlg;
if (colorDlg.DoModal()==IDOK)
renderer->setEdgesDefaultColor(colorDlg.GetColor());
}
void CMeshMakerView::OnColorsFacesdefaultcolor()
{
CColorDialog colorDlg;
if (colorDlg.DoModal()==IDOK)
renderer->setFacesDefaultColor(colorDlg.GetColor());
}
///////////////////////////////////////////////////////////////
// Highlights
void CMeshMakerView::OnColorsHighlightallvertices()
{
bool highlight;
renderer->getHighlightAllVertices(highlight);
renderer->highlightAllVertices(!highlight);
}
void CMeshMakerView::OnColorsHighlightalledges()
{
bool highlight;
renderer->getHighlightAllEdges(highlight);
renderer->highlightAllEdges(!highlight);
}
void CMeshMakerView::OnColorsHighlightallfaces()
{
bool highlight;
renderer->getHighlightAllFaces(highlight);
renderer->highlightAllFaces(!highlight);
}
void CMeshMakerView::OnUpdateColorsHighlightallvertices(CCmdUI* pCmdUI)
{
bool highlight;
renderer->getHighlightAllVertices(highlight);
pCmdUI->SetCheck(highlight);
pCmdUI->Enable();
}
void CMeshMakerView::OnUpdateColorsHighlightalledges(CCmdUI* pCmdUI)
{
bool highlight;
renderer->getHighlightAllEdges(highlight);
pCmdUI->SetCheck(highlight);
pCmdUI->Enable();
}
void CMeshMakerView::OnUpdateColorsHighlightallfaces(CCmdUI* pCmdUI)
{
bool highlight;
renderer->getHighlightAllFaces(highlight);
pCmdUI->SetCheck(highlight);
pCmdUI->Enable();
}
///////////////////////////////////////////////////////////////
// texture mapping
void CMeshMakerView::OnRenderingTexturemapping()
{
bool textureMapping;
renderer->getTextureMapping(textureMapping);
renderer->setTextureMapping(!textureMapping);
}
void CMeshMakerView::OnUpdateRenderingTexturemapping(CCmdUI* pCmdUI)
{
bool textureMapping;
renderer->getTextureMapping(textureMapping);
pCmdUI->SetCheck(textureMapping);
pCmdUI->Enable();
}
///////////////////////////////////////////////////////////////
// misc.
LRESULT CMeshMakerView::OnReset(WPARAM /*wParam*/, LPARAM /*lParam*/)
{
renderer->reset();
return 0;
}
LRESULT CMeshMakerView::OnProjection(WPARAM /*wParam*/, LPARAM /*lParam*/) {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
renderer->setProjection();
return 0;
}
void CMeshMakerView::OnModelviewReset()
{
renderer->resetModel();
refresh();
}
void CMeshMakerView::OnRenderingLoadtextureimage()
{
CFileDialog dlg(TRUE);
if (dlg.DoModal()==IDOK) {
renderer->setTextureImage(dlg.GetPathName());
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?