// Project the viewer's position onto the grid plane. If more than threshold distance // from grid center, move grid center. void maybe_create_new_grid(grid* gridp, vector *pos, matrix *orient, int force) { int roundoff; plane tplane; vector gpos, tmp, c; float dist_to_plane; float square_size, ux, uy, uz; ux = tplane.A = gridp->gmatrix.v.uvec.xyz.x; uy = tplane.B = gridp->gmatrix.v.uvec.xyz.y; uz = tplane.C = gridp->gmatrix.v.uvec.xyz.z; tplane.D = gridp->planeD; compute_point_on_plane(&c, &tplane, pos); dist_to_plane = fl_abs(vm_dist_to_plane(pos, &gridp->gmatrix.v.uvec, &c)); square_size = 1.0f; while (dist_to_plane >= 25.0f) { square_size *= 10.0f; dist_to_plane /= 10.0f; } if (fvi_ray_plane(&gpos, &gridp->center, &gridp->gmatrix.v.uvec, pos, &orient->v.fvec, 0.0f)<0.0f) { vector p; vm_vec_scale_add(&p,pos,&orient->v.fvec, 100.0f ); compute_point_on_plane(&gpos, &tplane, &p ); } if (vm_vec_dist(&gpos, &c) > 50.0f * square_size) { vm_vec_sub(&tmp, &gpos, &c); vm_vec_normalize(&tmp); vm_vec_scale_add(&gpos, &c, &tmp, 50.0f * square_size); } roundoff = (int) square_size * 10; if (!ux) gpos.xyz.x = fl_roundoff(gpos.xyz.x, roundoff); if (!uy) gpos.xyz.y = fl_roundoff(gpos.xyz.y, roundoff); if (!uz) gpos.xyz.z = fl_roundoff(gpos.xyz.z, roundoff); if ((square_size != gridp->square_size) || (gpos.xyz.x != gridp->center.xyz.x) || (gpos.xyz.y != gridp->center.xyz.y) || (gpos.xyz.z != gridp->center.xyz.z) || force) { gridp->square_size = square_size; gridp->center = gpos; modify_grid(gridp); } }
void CGrid::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { CString strValue; CSpinButtonCtrl* pSpin = (CSpinButtonCtrl*) GetDlgItem(IDC_SPIN_GRID_SIZE); strValue.Format("%i", pSpin->GetPos()); pSpin->GetBuddy()->SetWindowText(strValue); The_grid->nrows = pSpin->GetPos() * 5; The_grid->ncols = The_grid->nrows; modify_grid(The_grid); CDialog::OnVScroll(nSBCode, nPos, pScrollBar); }
void adjust_grid_dlg::OnOK() { UpdateData(TRUE); The_grid->center.x = (float) m_x; The_grid->center.y = (float) m_y; The_grid->center.z = (float) m_z; if (((CButton *) GetDlgItem(IDC_XY_PLANE)) -> GetCheck()) { The_grid->gmatrix.fvec = vmd_x_vector; The_grid->gmatrix.rvec = vmd_y_vector; } else if (((CButton *) GetDlgItem(IDC_YZ_PLANE)) -> GetCheck()) { The_grid->gmatrix.fvec = vmd_y_vector; The_grid->gmatrix.rvec = vmd_z_vector; } else { // XZ plane The_grid->gmatrix.fvec = vmd_x_vector; The_grid->gmatrix.rvec = vmd_z_vector; } modify_grid(The_grid); CDialog::OnOK(); }